...{$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);