首页 - VB.NET

如何在Store Procedure中调用VB COM

发布时间: 2007-04-19 03:57    作者: 未知    来源: 未知    浏览:    评论

 

接着前面提到过的如何写Event Log到NT Server一文,此处将实现Store procedure中写Event Log到NT Server的功能。

其实,写Event Log到NT Server还是采用VB COM实现,而在此处所做的是在Store procedure中调用该VB COM。

首先介绍几个SQL Server自带的Store Procedure。

1:sp_OACreate    建立自动操作对象的一个实例
        这里自动操作对象可以是  ActiveX EXE、COM、Shell等。其中还可以利用wscript.Shell进行入侵攻击(扯远了)。
        可以采用如下方式创建COM:
      EXEC @hr = sp_OACreate 'EventRecord.EventRecorder',@EventRecorder OUTPUT
      这里EventRecord.EventRecorder即为VB编写的COM类,@EventRecorder为返回值,返回值为 int 型。之后的操作都将围绕该@EventRecorder进行,可以看作为Store Procedure中的一个对象。@hr为sp_OACreate调用返回值,若@hr=0则表示创建成功,否则失败。常用作出错处理。

2:sp_OADestroy    释放一个对象的实例
       在对创建的对象操作完成之后需要释放资源,可以采用如下方式:
       EXEC  sp_OADestroy @EventRecorder

3:sp_OAGetErrorInfo    从其他过程返回的HResult中获得错误信息
      主要用作错误处理。

4:sp_OAGetProperty    把对象的属性存储在结果集或局部变量中
      实现与对象的通信。如:
      EXEC sp_OAGetProperty @EventRecorder,'Source',@EventSource OUTPUT
      实现获取EventRecorder对象中的Source属性的值并放入到@EventSource变量中

5:sp_OASetProperty    对对象的属性进行赋值处理,将会改变对象的该属性值
      实现与对象的通信。如:
      EXEC sp_OASetProperty @EventRecorder,'Source',@EventSource
      实现设置@EventRecorder对象的Source属性,将Source属性设定为@EventSource变量的值。

6:sp_OAMethod     实现对象的方法的调用
      向对象的方法传递参数,并得到返回值。
      有参数有返回值:如
      EXEC  sp_OAMethod @EventRecorder,'WriteEventLog',@ResultValue OUTPUT,
                                             @EventMessage=@EventMessage,@EventType=@EventType,
                                             @EventID=@EventID,@EventCategory=@EventCategory
      无参数有返回值:如
      EXEC  sp_OAMethod @EventRecorder,'WriteEventLog',@ResultValue OUTPUT
      无参数无返回值:如
      EXEC  sp_OAMethod @EventRecorder,'WriteEventLog',NULL

7:sp_OAStop    关闭SQL Server的自动存储过程
      关闭SQL Server对COM的自动操作环境,无须任何参数。不是必须的,因为第一次调用sp_OACreate时会自动开启自动操作环境,SQL Server关闭时,该自动环境也会自动关闭。另外,如果一个存储过程正在对一个COM对象进行操作,而另一个存储过程关闭了该自动环境,则会出现错误,所以不建议采用这种方式。

OK,至此,对于操作COM所必须的知识已经足够了。
下面是本次实现的例子:

/*
** Write Event Log To NT Event Viewer
*/
CREATE   PROCEDURE dbo.sp_EventRecorder
(
 @EventSource nvarchar(100),  ----Event Source
 @EventID int,   ----Event ID , please refer the <Application ID document>
 @EventType int,   ----Event Type , 0--Information;1--Error;2--Warning
 @EventMessage nvarchar(2000),  ----Event Message,the Error Content
 @EventCategory int = 0,  ----Event Category ,default 0
 @ReturnValue int OUTPUT  ----Return Value 0--Success;1--Fail
)
AS
DECLARE
 @EventMachineName nvarchar(100),
 @EventRecorder  int,
 @hr   int,
 @ResultValue  nvarchar(10)

 BEGIN
  ----Set Event Log Server Name,' ' Means Local Machine,Need To Config
  SET @EventMachineName = ' '
 END

 ----Create EventRecorder Object
 EXEC @hr = sp_OACreate 'EventRecord.EventRecorder',@EventRecorder OUTPUT
 IF @hr = 0
 BEGIN
  ----Set Method 0--Write To Event Viewer;1--Write To DataBase.Default 0
  EXEC @hr = sp_OASetProperty @EventRecorder,'Method',0
  IF @hr <> 0 GOTO ErrorHandle

  ----Set Machine Name of Event Log Server,Default Local Server
  EXEC @hr = sp_OASetProperty @EventRecorder,'MachineName',@EventMachineName
  IF @hr <> 0 GOTO ErrorHandle

  ----Set Event Source,Must to do it!
  EXEC @hr = sp_OASetProperty @EventRecorder,'Source',@EventSource
  IF @hr <> 0 GOTO ErrorHandle

  ----Write Event Log
  EXEC  @hr = sp_OAMethod @EventRecorder,'WriteEventLog',@ResultValue OUTPUT,
        @EventMessage=@EventMessage,@EventType=@EventType,
        @EventID=@EventID,@EventCategory=@EventCategory
  IF @hr <> 0 GOTO ErrorHandle
  
  ----Check if write successfully!
  IF @ResultValue = 'True'
  BEGIN
   SET @ReturnValue = 0
   EXEC  sp_OADestroy @EventRecorder
   RETURN
  END
  ELSE
  BEGIN
   SET @ReturnValue = 1
   EXEC  sp_OADestroy @EventRecorder
   RETURN
  END
 END
 ELSE
 BEGIN
  SET @ReturnValue = 1
  RETURN
 END

ErrorHandle:

 SET @ReturnValue = 1
 EXEC  sp_OADestroy @EventRecorder
 RETURN

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多