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 '

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值