Delphi写Sql2000扩展存储过程的例子

libraryproject1;

uses
Windows,
SysUtils,
MSODSApi;

... {$R * .res}
FunctionGetParamStr(pSrvProc:SRV_PROC;Index:integer;VarParam:String):integer;
var
PType:Byte;
cbMaxLen,ParaLen:DWORD;
IsNULL:BOOL;
begin
Result:
= NO_ERROR;
srv_paraminfo(pSrvProc,index,@PType,@cbMaxLen,@ParaLen,NIL,@IsNULL);

if PType in [SRVTEXT,SRVVARCHAR,SRVCHAR,SRVNTEXT,
SRVBIGVARCHAR,SRVBIGCHAR,SRVNVARCHAR,SRVNCHAR]then
begin
Param:
= '' ;
if ParaLen > 0 thenbegin
SetLength(Param,ParaLen);
srv_paraminfo(pSrvProc,index,@PType,@cbMaxLen,@ParaLen,@Param[
1 ],@IsNULL);
end;
end
else begin
Result:
= - 1 ;
end;
end;


FunctionEpPackFile(pSrvProc:SRV_PROC):integer;cdecl;
var
ls1,ls2,ls3:String;
n:integer;
begin

Result:
= 1 ;
n:
= srv_rpcparams(pSrvProc);
if n <> 3 thenbegin
// 不是3个参数
end;
if (GetParamStr(pSrvProc, 1 ,ls1) <> NO_ERROR)thenbegin
// 不是字符串
end;
if (GetParamStr(pSrvProc, 2 ,ls2) <> NO_ERROR)thenbegin
// 不是字符串
end;
if (GetParamStr(pSrvProc, 3 ,ls3) <> NO_ERROR)thenbegin
// 不是字符串
end;
n:
= Length(ls1);
srv_describe(pSrvProc,
1 , ' 参数 ' ,SRV_NULLTERM,SRVBIGVARCHAR,
n,SRVBIGVARCHAR,n,NIL);
srv_setcoldata(pSrvProc,
1 ,@ls1[ 1 ]);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc,
1 ,@ls2[ 1 ]);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc,
1 ,@ls3[ 1 ]);
srv_sendrow(pSrvProc);
srv_senddone(pSrvProc,(SRV_DONE_COUNTorSRV_DONE_MORE),
0 , 1 );
end;


exports
EpPackFileName
' xp_EpPackFile ' ;
begin
end.

编译后放入binn目录,在sql中添加并测试,代码如下:

Use Master;
IF object_id ( ' xp_EpPackFile ' ) IS NOT NULL EXEC sp_dropextendedproc ' xp_EpPackFile ' ;
EXEC sp_addextendedproc ' xp_EpPackFile ' , ' project1.dll ' ;
EXEC master..xp_EpPackFile ' aa ' , ' bb ' , ' cc ' ;
EXEC sp_dropextendedproc ' xp_EpPackFile ' ;
DBCC SPEncrypt(FREE);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值