国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何在Store Procedure中調用VB COM

2024-07-21 02:20:32
字體:
來源:轉載
供稿:網友
 

接著前面提到過的如何寫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,
                                             @[email protected],@[email protected],
                                             @[email protected],@[email protected]
      無參數有返回值:如
      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,
        @[email protected],@[email protected],
        @[email protected],@[email protected]
  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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹县| 梓潼县| 岢岚县| 台东县| 阿拉善右旗| 秦皇岛市| 武川县| 徐汇区| 滨海县| 宜城市| 陇西县| 琼海市| 开阳县| 本溪市| 萍乡市| 罗甸县| 宜君县| 微博| 天峨县| 青川县| 麻城市| 东明县| 肇东市| 泗洪县| 本溪市| 泽普县| 永德县| 宜兴市| 永登县| 松滋市| 乌兰察布市| 印江| 周口市| 玉田县| 防城港市| 颍上县| 咸丰县| 苍梧县| 富蕴县| 霞浦县| 固阳县|