Au3调用存储过程事例
本帖最后由 bob 于 2011-6-10 19:39 编辑不要问我存储过程是个什么东东有什么用途,百度、Google可回答一切!
测试环境:
系统: 瘟逗死 XP
软件: autoit(3.3.6.1)
数据库系统: mssql 2000
数据库: mssql2000 自带的 Pubs ,没有的或有问题的可先删除在执行本附件中的 instpubs.sql 安装
根据存储过程输入输出调用方法,简单分为以下7种类型
1、返回单一记录集的存储过程
存储过程如下
CREATE PROCEDURE getEmployee
as
set nocount on
begin
select * from employee
end
goau3代码如下:
Dim $sServer = '192.168.1.249', $sUsername = 'sa', $sPassword = '',$sDatabase = 'Pubs' ;四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名
$Comm = ObjCreate("ADODB.Command") ;建一个command对象
With $Comm
.ActiveConnection = "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";Database=" & $sDatabase & "" ;建立连结
.CommandText = 'getEmployee' ;定义command 对象调用名称,即存储过程名称
.CommandType = 4 ;设置command调用类型是存储过程
.Prepared = True ;将SQL命令先行编译
EndWith
$Rs = $Comm.Execute ;存储过程取得的记录集赋给$Rs
MsgBox(0,0,$Rs.Fields (0).value)
在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定
1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称
2、无输入输出的存储过程
调用方法与上面讲过的基本相同,只是不用取得记录集,不做例子了
**** Hidden Message ***** 本帖最后由 bob 于 2011-6-10 19:58 编辑
3、带返回值的存储过程
存储过程CREATE PROCEDURE dbo.delUser
as
set nocount on
begin
BEGIN TRANSACTION
delete from employee where fname='bob'
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go以上存储过程,在delete顺利执行时,返回1,否则返回0,并进行回滚操作。
au3代码
Dim $sServer = '192.168.1.249', $sUsername = 'sa', $sPassword = '',$sDatabase = 'Pubs' ;四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名
$Comm = ObjCreate("ADODB.Command") ;建一个command对象
With $Comm
.ActiveConnection = "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";Database=" & $sDatabase & "" ;建立连结
.CommandText = 'delUser' ;定义command 对象调用名称,即存储过程名称
.CommandType = 4 ;设置command调用类型是存储过程
.Prepared = True ;将SQL命令先行编译
EndWith
;声明返回值
$Comm.Parameters.Append($Comm.CreateParameter("RETURN",2,4))
$Comm.Execute
;取得返回值
$retValue = $Comm(0) ;或$retValue = $Comm.Parameters(0)
MsgBox(0,0,$retValue.value)
在$Comm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储过程中声明的参数名相同。此处是返回值,我习惯上设为"RETURE";
第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
adBigInt: 20 ;
adBinary : 128 ;
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ;
adTinyInt: 16 ;
adVarChar: 200 ;
对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值 本帖最后由 bob 于 2011-6-10 20:03 编辑
4、带输入输出参数的存储过程
存储过程CREATE PROCEDURE getEmp_id
@emp_id char(9),
@fname varchar(20) output
as
set nocount on
begin
if @emp_id is null return
select @fname=fname from employee where emp_id=@emp_id
return
end
goau3代码如下
Dim $sServer = '192.168.1.249', $sUsername = 'sa', $sPassword = '',$sDatabase = 'Pubs' ;四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名
$empid = 'F-C16315M'
$Comm = ObjCreate("ADODB.Command") ;建一个command对象
With $Comm
.ActiveConnection = "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";Database=" & $sDatabase & "" ;建立连结
.CommandText = 'getFname' ;定义command 对象调用名称,即存储过程名称
.CommandType = 4 ;设置command调用类型是存储过程
.Prepared = True ;将SQL命令先行编译
.Parameters.append (.CreateParameter('@emp_id',129,1,9,$empid))
.Parameters.append (.CreateParameter('@fname',200,2,20))
.Execute
EndWith
;获取输出
$Fname = $Comm(1)
MsgBox(0,0, $Fname.value)
在以上代码中,可以看到,与声明返回值不同,
声明输入参数时需要5个参数,声明输出参数时需要4个参数。
声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值。
声明输出参数时,没有最后一个参数:参数值。
需要特别注意的是:在声明参数时,顺序一定要与存储过程中定义的顺序相同,而且各参数的数据类型、长度也要与存储过程中定义的相同。 本帖最后由 bob 于 2011-6-16 10:25 编辑
5. 同时具有返回值、输入参数、输出参数的存储过程
存储过程CREATE PROCEDURE getFname2
@emp_id char(9),
@fname varchar(20) output
as
set nocount on
begin
if @emp_id is null return
select @fname=fname from employee where emp_id=@emp_id
if @@rowcount>0 --@@rowcount返回上一语句受影响的行数
return 1
else
return 0
return
end
goau3代码
Dim $sServer = '192.168.1.249', $sUsername = 'sa', $sPassword = '',$sDatabase = 'Pubs' ;四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名
$empid = 'F-C16315M'
$Comm = ObjCreate("ADODB.Command") ;建一个command对象
With $Comm
.ActiveConnection = "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";Database=" & $sDatabase & "" ;建立连结
.CommandText = 'getFname2' ;定义command 对象调用名称,即存储过程名称
.CommandType = 4 ;设置command调用类型是存储过程
.Prepared = True ;将SQL命令先行编译
.Parameters.Append(.CreateParameter("RETURN",2,4)) ;返回值要最先被声明
.Parameters.append (.CreateParameter('@emp_id',129,1,9,$empid))
.Parameters.append (.CreateParameter('@fname',200,2,20))
.Execute
EndWith
;获取输出
If $Comm(0).value = 1 then
MsgBox(0,'输入'&$Comm(1).value, '输出'&$Comm(2).value)
else
MsgBox(0,'错误提示','对应输入在数据库不存在')
EndIf
在以上代码中,可以看到,与声明返回值不同,
声明输入参数时需要5个参数,声明输出参数时需要4个参数。
声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值。
声明输出参数时,没有最后一个参数:参数值。
需要特别注意的是:在声明参数时,顺序一定要与存储过程中定义的顺序相同,而且各参数的数据类型、长度也要与存储过程中定义的相同。 占楼待续(请斑竹勿删) 占楼待续(请斑竹勿删) 占楼看楼主作品 看架势一篇强帖即将诞生,远处观摩,以免误伤!!! 楼主之效率,快!
佩服。。。。。 我首先还真不知道存储过程是什么....有的学习了...首下先 正是我需要的 一条条 SQL 不如调用过存储过程来得效率高! 好像在MSSQL 2005不行!
输入 输出!返回的输出值怎么试都是0!
还望楼主解答一下! 强贴留名!这东东要顶!ADO还有这个东东! 好像在MSSQL 2005不行!
输入 输出!返回的输出值怎么试都是0!
还望楼主解答一下!
qzdisk 发表于 2011-6-15 12:54 http://www.autoitx.com/images/common/back.gif
能把存储过程及AU3代码写下吗,应该不会有多大出入的
我这成品都有了 学习一下,不错。