如何在sqlserver中调用dll

主  题:  如何在Sql server中调用Dll,并且可从Dll中得到返回的数据
作  者:  visual (胖都胖的那么帅) 
等  级:   
信 誉 值:  100
所属论坛:  MS-SQL Server 基础类
问题点数:  100
回复次数:  6
发表时间:  2002-09-19 11:00:40Z
  
 
  

我想用Sql server调用Delphi写的dll.
<Code>

CREATE PROCEDURE sp_WSSql AS

exec sp_addextendedproc "StrTest", "WSSql.dll" --声明函数

declare @szStr varchar(200)
declare @rtStr varchar(200)

Select @szStr = 'ws中文'

EXEC @rtStr = StrTest @szStr
select @rtStr

exec sp_dropextendedproc "StrTest"

dbcc StrTest(free)

GO
</code>

<DllCode Lan=Delphi>

library WsSql;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes;

{$R *.res}
function  StrTest(S:pChar):pChar;stdcall;
begin
        Result:=pChar('您输入的字符串:'+S);
end;

Exports
    StrTest name 'StrTest';

begin
end.

</DllCode>

---------------------------------------------------------------
我在调用时没发现什么错误,可是我得不到返回的值,在存储过程中的select @rtStr得到的是扩展存储过程执行后的句柄。我该如何得到Dll中的返回值。

谢谢。
对了,还有如果我以其他用户登陆,是否也可执行Master中的存储过程?
再谢。
 
 
 
 回复人: microlong(微龙) ( ) 信誉:128  2002-09-19 11:44:29Z  得分:30
 
 
 
可以利用扩展存储过程!
XP——CMDSHELL
 
 
Top
 
 回复人: leimin(黄山光明顶) ( ) 信誉:290  2002-09-19 12:12:36Z  得分:40
 
 
 
SQL 好像不可以调用DELPHI的DLL,你可以用VC OR JAVA写的DLL,再通过SQLSERVER的
sp_addextendedproc
将新扩展存储过程的名称注册到 Microsoft&reg; SQL Server&#8482; 上。

语法
sp_addextendedproc [ @functname = ] 'procedure' ,
    [ @dllname = ] 'dll'
注册到SQLSERVER
这样你就可以EXEC SP_YOUEXTENDPROC


有如果我以其他用户登陆,是否也可执行Master中的存储过程?
只要该用户 sysadmin 固定服务器角色的成员才可以执行

 
 
Top
 
 回复人: visual(胖都胖的那么帅) ( ) 信誉:100  2002-09-19 13:13:39Z  得分:0
 
 
 
那用VC怎样写呢?
例如有这样一个函数
String StrTest(string S)
{
   return "您的字符串:"+S;
}
在存储过程中怎样调用可得到返回的字符串
 
 
Top
 
 回复人: N_chow(双色铅笔 | XML beginner) ( ) 信誉:101  2002-09-19 13:42:57Z  得分:30
 
 
 
1、寫成擴展的存儲過程。
在SQL Server/Develop/Sample下面有例子,可以去參考。
2、寫成COM,在T-SQL中用sp_OACreate、sp_OAMethod來調用。
可以查查FAQ,應該有同類的例子。
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值