sql2000調用.NET環境的dll (未測試)

方案一

/*--下面的部分在VB中完成
首先我們先用VB 作一個最簡略的組件
工程名稱: testSQLCOM
類名: TestMath
函數,計算兩個整數相加的後果
Public Function AddMe(a As Long, b As Long) As Long
   AddMe = a + b
End Function
編譯生成後,我們就可以在 Sql Server 中對這個 Com 組件進行調用了

--定義用到的變量
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@re int
--創造調用實例
exec @err=sp_OACreate 'testSQLCOM.TestMath',@obj out
if @err<>0 goto lberr --如果創造失敗,則進行處理

--調用DLL中的函數
exec @err=sp_OAMethod @obj,AddMe,@re out,100,200
if @err<>0 goto lberr --如果調用毛病,則進行處理

print '返回的後果是:' + str(@re)

--完成後釋放
exec sp_OADestroy @obj
return


lberr:
exec   sp_oageterrorinfo   0,@src   out,@desc   out
select   cast(@err   as   varbinary(4))   as   錯誤號
,@src   as   錯誤源,@desc   as   錯誤描述

/****************************************************************************/

/****************************************************************************/

/****************************************************************************/

sql server 調用c#。net寫的dll
1、構造dll:首先我們要在。net裏面創建一個類庫工程,寫個簡單的helloworld
using system;

namespace mydll
{
/// <summary>
/// class1 的摘要說明。
/// </summary>
public class class1
{
public class1()
{
//
// todo: 在此處添加構造函數邏輯
//
}
public string sayhello()
{
return "helloworld";
}
}
}
mydll是這個dll的名字.編譯以後,到你輸出目錄裏找mydll.dll生成了;切換到命令行模式,在mydll.dll的目錄下輸入sn -k mydll.snk生成密鑰對;
然後回到你的vs.net工程下打開assemblyinfo.cs看[assembly: assemblykeyfile("")]選項,輸入你的密鑰對路徑‘..//..//bin//debug//mydll.snk’
重新編譯mydll.dll;最後是裝配了,在命令行下輸入:regasm mydll.dll,成功後將mydll.dll拷貝到c:/windows/assembly目錄下
(這一步是聽說的,不知道啥用。但是實際我試過不用拷貝也可以調用)。

2、
sqlserver調用事例:
declare @ret int
declare @object int
declare @src varchar(500)
declare @desc varchar(500)
declare @return varchar(500)
exec @ret=sp_oacreate mydll.class1,@object out
if @ret <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select hr=convert(varbinary(4),@ret), source=@src, description=@desc
return
end
-- call a method that returns a value.
exec @ret = sp_oamethod @object, sayhello, @return out
if @ret <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select ret=convert(varbinary(4),@ret), source=@src, description=@desc
return
end
print result=+@return
-- destroy the object.
exec @ret = sp_oadestroy @object
if @ret <> 0
begin
exec sp_oageterrorinfo @object, @src out, @desc out
select ret=convert(varbinary(4),@ret), source=@src, description=@desc
return
end

 

 

/**************************************************************************/

 

方案二

rundll32是用來執行dll中的方法的,可以用類似下面的方法來調用dll:

exec   master..xp_cmdshell   'rundll32   ... '

 

方案三

將dll方法添加到服務器,做爲擴展存儲過程調用:


sp_addextendedproc
將新擴展存儲過程的名稱註冊到   Microsoft&reg;   SQL   Server&#8482;   上。
語法
sp_addextendedproc   [   @functname   =   ]   'procedure '   ,
        [   @dllname   =   ]   'dll '
參數
[   @functname   =   ]   'procedure '
在動態鏈接庫   (DLL)   內調用的函數名稱。procedure   的數據類型爲   nvarchar(517),沒有默認設置。procedure   能夠可選地包含   owner.function   形式的所有者名稱。

[   @dllname   =   ]   'dll '

包含該函數的   DLL   名稱。dll   的數據類型爲   varchar(255),沒有默認設置。

返回代碼值
0(成功)或   1(失敗)

結果集


註釋
使用   Microsoft   Open   Data   Services   的程序員可以創建擴展存儲過程。創建擴展存儲過程後,必須使用   sp_addextendedproc   將此存儲過程添加到   SQL   Server   上。有關更多信息,請參見創建擴展存儲過程。  

只將一個擴展存儲過程添加到   master   數據庫中。若要從非   master   的數據庫中執行擴展存儲過程,請用   master   限定擴展存儲過程的名稱。

sp_addextendedproc   將條目添加到   sysobjects   中,用   SQL   Server   註冊新擴展存儲過程名稱。同樣在   syscomments   表中添加一個條目。

權限
只有   sysadmin   固定服務器角色的成員纔可以執行   sp_addextendedproc。

示例
下例添加   xp_hello   擴展存儲過程。

USE   master
EXEC   sp_addextendedproc   xp_hello,   'xp_hello.dll '

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章