如何在Store Procedure中调用VB COM

本文详细介绍如何使用SQL Server的存储过程调用VB COM组件来记录事件日志(EventLog)。涉及的关键步骤包括创建和销毁COM对象、设置属性及调用方法。

接着前面提到过的如何写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

先看效果: https://renmaiwang.cn/s/jkhfz Hue系列产品将具备高度的个性化定制能力,并且借助内置红、蓝、绿三原色LED的灯泡,能够混合生成1600万种不同色彩的灯光。 整个操作流程完全由安装于iPhone上的应用程序进行管理。 这一创新举措为智能照明控制领域带来了新的启示,国内相关领域的从业者也积极投身于相关研究。 鉴于Hue产品采用WiFi无线连接方式,而国内WiFi网络尚未全面覆盖,本研究选择应用更为普及的蓝牙技术,通过手机蓝牙与单片机进行数据交互,进而产生可调节占空比的PWM信号,以此来控制LED驱动电路,实现LED的调光功能以及DIY调色方案。 本文重点阐述了一种基于手机蓝牙通信的LED灯设计方案,该方案受到飞利浦Hue智能灯泡的启发,但考虑到国内WiFi网络的覆盖限制,故而选用更为通用的蓝牙技术。 以下为相关技术细节的详尽介绍:1. **智能照明控制系统**:智能照明控制系统允许用户借助手机应用程序实现远程控制照明设备,提供个性化的调光及色彩调整功能。 飞利浦Hue作为行业领先者,通过红、蓝、绿三原色LED的混合,能够呈现1600万种颜色,实现了全面的定制化体验。 2. **蓝牙通信技术**:蓝牙技术是一种低成本、短距离的无线传输方案,工作于2.4GHz ISM频段,具备即插即用和强抗干扰能力。 蓝牙协议栈由硬件层和软件层构成,提供通用访问Profile、服务发现应用Profile以及串口Profiles等丰富功能,确保不同设备间的良好互操作性。 3. **脉冲宽度调制调光**:脉冲宽度调制(PWM)是一种高效能的调光方式,通过调节脉冲宽度来控制LED的亮度。 当PWM频率超过200Hz时,人眼无法察觉明显的闪烁现象。 占空比指的...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值