Delphi写Sql2000扩展存储过程的例子
2009-08-06 12:48
411 查看
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);
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);
相关文章推荐
- Delphi写Sql2000扩展存储过程的例子
- Delphi写Sql2000扩展存储过程的例子
- Delphi写Sql2000扩展存储过程的例子
- Delphi 调用 Oracle 存储过程并返回数据集的例子.
- SQL2000 存储过程中实现递归的一个简单例子
- Delphi 调用 Oracle 存储过程并返回数据集的例子
- DELPHI 调用 Oracle 存储过程并返回数据集的例子.
- 通过 JSTL 调用 MySQL 存储过程的例子
- 未公布的访问注册表的扩展存储过程
- 一个简单例子讲明mysql存储过程是什么
- 使用SQLSERVER的扩展存储过程实现远程备份与恢复(转载)
- 在delphi中取存储过程的返回值
- 关于ASP.NET2.0编写扩展存储过程的问题
- 编写的SQLServer扩展存储过程
- 用VS.Net编写扩展存储过程(三,完)
- 编写安全的SQL Server扩展存储过程
- 剖析SQL Server数据库扩展存储过程
- 存储过程例子
- 使用SQLSERVER的扩展存储过程实现远程备份与恢复 测试后的结果。
- 使用SQLSERVER的扩展存储过程实现远程备份与恢复