• 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);
  • 相关阅读:
    Java Web之Servlet入门篇(二)
    『一本通』KMP算法
    P2865 [USACO06NOV]Roadblocks (次短路)
    字符串算法
    『一本通』哈希和哈希表
    『一本通』广搜的优化技巧
    [SCOI2011]糖果(差分约束系统)
    『一本通』二分与三分
    『一本通』贪心
    『P1122』最大子树和
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204979.html
Copyright © 2020-2023  润新知