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

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

  1. library project1;
  2. uses
  3.   Windows,
  4.   SysUtils,
  5.   MSODSApi;
  6. ...{$R *.res}
  7. Function GetParamStr(pSrvProc: SRV_PROC; Index : integer; Var Param : String ) : integer;
  8. var
  9.   PType : Byte;
  10.   cbMaxLen , ParaLen : DWORD;
  11.   IsNULL : BOOL;
  12. begin
  13.   Result := NO_ERROR;
  14.   srv_paraminfo(pSrvProc, index, @PType, @cbMaxLen, @ParaLen, NIL, @IsNULL);
  15.   if PType in [SRVTEXT,SRVVARCHAR,SRVCHAR,SRVNTEXT,
  16.                SRVBIGVARCHAR,SRVBIGCHAR,SRVNVARCHAR,SRVNCHAR] then
  17.     begin
  18.       Param := '''';
  19.       if ParaLen>0 then begin
  20.         SetLength(Param , ParaLen);
  21.         srv_paraminfo(pSrvProc, index, @PType, @cbMaxLen, @ParaLen, @Param[1], @IsNULL);
  22.       end;
  23.     end
  24.   else begin
  25.     Result := -1;
  26.   end;
  27. end;
  28. Function EpPackFile(pSrvProc: SRV_PROC) : integer;cdecl;
  29. var
  30.   ls1,ls2,ls3 : String;
  31.   n      : integer;
  32. begin
  33.   Result := 1;
  34.   n := srv_rpcparams(pSrvProc);
  35.   if n <> 3 then begin
  36.     //     不是3个参数
  37.   end;
  38.   if   (GetParamStr(pSrvProc,1,ls1)<>NO_ERROR) then begin
  39.     //    不是字符串
  40.   end;
  41.   if    (GetParamStr(pSrvProc,2,ls2)<>NO_ERROR) then begin
  42.     //    不是字符串
  43.   end;
  44.   if    (GetParamStr(pSrvProc,3,ls3)<>NO_ERROR) then begin
  45.     //    不是字符串
  46.   end;
  47.   n := Length(ls1);
  48.   srv_describe(pSrvProc, 1 ,  ''参数'', SRV_NULLTERM,  SRVBIGVARCHAR,
  49.                 n, SRVBIGVARCHAR, n,  NIL);
  50.     srv_setcoldata(pSrvProc, 1 , @ls1[1]);
  51.     srv_sendrow(pSrvProc);
  52.     srv_setcoldata(pSrvProc, 1 , @ls2[1]);
  53.     srv_sendrow(pSrvProc);
  54.     srv_setcoldata(pSrvProc, 1 , @ls3[1]);
  55.     srv_sendrow(pSrvProc);
  56.   srv_senddone(pSrvProc, (SRV_DONE_COUNT or SRV_DONE_MORE), 01);
  57. end;
  58. exports
  59.   EpPackFile Name ''xp_EpPackFile'';
  60. begin
  61. 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);

原文地址:https://www.cnblogs.com/zhaoshujie/p/9594819.html