Welcome

首页 / 软件开发 / Delphi / Delphi写Sql2000扩展存储过程的例子

Delphi写Sql2000扩展存储过程的例子2011-04-23 csdn 贾涛library project1;

uses
Windows,
SysUtils,
MSODSApi;

...{$R *.res}
Function GetParamStr(pSrvProc: SRV_PROC; Index : integer; Var Param : 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 then begin
SetLength(Param , ParaLen);
srv_paraminfo(pSrvProc, index, @PType, @cbMaxLen, @ParaLen, @Param[1], @IsNULL);
end;
end
else begin
Result := -1;
end;
end;

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

Result := 1;
n := srv_rpcparams(pSrvProc);
if n <> 3 then begin
// 不是3个参数
end;
if (GetParamStr(pSrvProc,1,ls1)<>NO_ERROR) then begin
// 不是字符串
end;
if (GetParamStr(pSrvProc,2,ls2)<>NO_ERROR) then begin
// 不是字符串
end;
if (GetParamStr(pSrvProc,3,ls3)<>NO_ERROR) then begin
// 不是字符串
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_COUNT or SRV_DONE_MORE), 0, 1);
end;

exports
EpPackFile Name "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);