您的位置:首页 > 编程语言 > Delphi

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

2008-10-11 22:00 239 查看
Delphi写Sql2000扩展存储过程的例子

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: