ado调用存储过程
① delphi 中 使用ADOQuery 如何执行已有的存储过程
建立proc
create proc MyABC @a int ,@b int, @c int output
as
set @c=@a*@b
在sql中执行:
declare @a int,@b int,@c int
set @a=250
set @b=40
exec MyABC @a,@b,@c output --注意要添加output 关键字!
select @c
在D中:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(‘execute MyABC :a,:b,:c output‘);//也要添加output 关键字!
ADOQuery1.Parameters.ParamByName(‘a‘).Value:=250;
ADOQuery1.Parameters.ParamByName(‘b‘).Value:=40;
ADOQuery1.ExecSQL;
showmessage(ADOQuery1.Parameters.ParamByName(‘c‘).Value);
② asp 如何返回存储过程中的某个变量值
你可以使用 ADODB.Command 来调用存储过程,如:
Dim adoComm
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
'// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
'// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
'// 存储过程名称
.CommandText = "你的存储过程名称"
'// 设置输入参数
.Parameters.Item("@输入参数").Value = "值"
'// 执行存储过程
.Execute
If .Parameters.Item("@返回参数名称").Value = True Then
Else
End If
End With
'// 释放对象
Set adoComm = Nothing
详细参考我原来写的文章
http://bbs.51js.com/viewthread.php?tid=51505&fpage=2
③ 哪位大神告诉一下vb6.0怎么调用带2个参数的存储过程,有简单的例子最好。谢谢!
DimCmdSP
DimadoRS
DimadCmdSPStoredProc
DimadParamReturnValue
DimadParaminput
DimadParamOutput
DimadInteger
DimiVal
DimoVal
DimadoField
DimadVarChar
'这些值在VB中是预定义常量,可以直接调用,但在VBScript中没有预定义
adCmdSPStoredProc=4
adParamReturnValue=4
adParaminput=1
adParamOutput=2
adInteger=3
adVarChar=200
iVal=5
oVal=3
'建一个command对象
setCmdSP=Server.CreateObject("ADODB.Command")
'建立连结
CmdSP.ActiveConnection="Driver={SQLServer};server=(local);Uid=sa;Pwd=sa;Database=Pubs"
'定义command对象调用名称
CmdSP.CommandText="sp_PubsTest"
'设置command调用类型是存储过程(adCmdSPStoredProc=4)
CmdSP.CommandType=adCmdSPStoredProc
'往command对象中加参数
'定义存储过程有直接返回值,并且是个整数,省缺值是4
CmdSP.Parameters.AppendCmdSP.CreateParameter("RETURN_VALUE",adInteger,adParamReturnValue,4)
'定义一个字符型输入参数
CmdSP.Parameters.AppendCmdSP.CreateParameter("@au_lname",adVarChar,adParaminput,20,"M")
'定义一个整型输入参数
CmdSP.Parameters.AppendCmdSP.CreateParameter("@intID",adInteger,adParamInput,,iVal)
'定义一个整型输出参数
CmdSP.Parameters.AppendCmdSP.CreateParameter("@intIDOut",adInteger,adParamOutput,oVal)
'运行存储过程,并得到返回记录集
SetadoRS=CmdSP.Execute
'把每个记录打印出来,其中的字段是虚拟的,可以不用管
WhileNotadoRS.EOF
foreachadoFieldinadoRS.Fields
Response.WriteadoField.Name&"="&adoField.Value&"<br>"&vbCRLF
Next
Response.Write"<br>"
adoRS.MoveNext
Wend
'打印两个输出值:
Response.Write"<p>@intIDOut=“&CmdSP.Parameters("@intIDOut").Value&"</p>"
Response.Write"<p>Returnvalue="&CmdSP.Parameters("RETURN_VALUE").Value&"</p>"
'大扫除
SetadoRS=nothing
SetCmdSP.ActiveConnection=nothing
SetCmdSP=nothing
以上代码仅供参考
其实核心的就是如何获得存储过程的返回值
④ 如何在VBA中调用存储过程
方法有几种
1、
SetConn=Server.CreateObject("ADODB.Connection")
Conn.openstrConn
iferr.number<>0then
response.Write"数据库链接失败。"'&err.Description
response.End
endIf
setRs=server.CreateObject("adodb.recordset")
'调用存储过程:[dbo].[Usp_GetUserMenu]
strsql="[dbo].[Usp_GetUserMenu]@UserID='"&Session(g_SessionName&"_UserID")&"'"
'这句话是关键,CursorLocation意思是游标本地化
rs.CursorLocation=3
Rs.openstrsql,conn,1,1
iferr.number<>0Then
conn.close
setconn=nothing
endif
fori=1tors.RecordCount
iMenuType=rs("MenuType")
......
rs.MoveNext
next
rs.Close
setrs=nothing
conn.close
setconn=nothing
2. 使用adobd.Command对象
VB6.0调用存储过程的例子
(说明:以下代码摘自微软的MSDN,经过测试没问题。使用该方法的前提条件是必须知道将要使用的参数化命令的详细情况。)
打开Form1窗体,Copy以下的代码到窗体中,该段代码将测试存储过程ADOTestRPE的返回值、输入参数及输出参数,测试的过程中,可能需要修改链接字符串。
SubCreateParms()
DimADOCmdAsNewADODB.Command
DimADOPrmAsNewADODB.Parameter
DimADOConAsADODB.Connection
DimADORsAsADODB.Recordset
DimsParmNameAsString
DimstrConnectAsString
DimrStrAsString
OnErrorGoToErrHandler
strConnect="driver={SQLServer};server=(local);uid=sa;pwd=;database=pubs"
SetADOCon=NewADODB.Connection
WithADOCon
.Provider="MSDASQL"
.CursorLocation=adUseServer'MustuseServersidecursor.
.ConnectionString=strConnect
.Open
EndWith
SetADOCmd.ActiveConnection=ADOCon
WithADOCmd
.CommandType=adCmdStoredProc
.CommandText="ADOTestRPE"
EndWith
'.
sParmName="Return"
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamReturnValue,,0)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=-1
'
'parameter.
sParmName="Output"
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamOutput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sP
armName).Value=999
'Parameter2
sParmName="R1Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=1
'Parameter3
sParmName="P1Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0
'Parameter4
sParmName="E1Num"'
'1.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0
'Parameter5
sParmName="R2Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=2
'Parameter6
sParmName="P2Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0
'Parameter7
sParmName="E2Num"'
'2.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0
SetADORs=ADOCmd.Execute
DoWhile(NotADORsIsNothing)
IfADORs.State=adStateClosedThenExitDo
WhileNotADORs.EOF
Fori=0ToADORs.Fields.Count-1
rStr=rStr&":"&ADORs(i)
Nexti
Debug.PrintMid(rStr,3,Len(rStr))
ADORs.MoveNext
rStr=""
Wend
Debug.Print"----------------------"
SetADORs=ADORs.NextRecordset
Loop
Debug.Print"Return:"&ADOCmd.Parameters("Return").Value
Debug.Print"Output:"&ADOCmd.Parameters("Output").Value
GoToShutdown
ErrHandler:
CallErrHandler(ADOCon)
ResumeNext
Shutdown:
SetADOCmd=Nothing
SetADOPrm=Nothing
SetADORs=Nothing
SetADOCon=Nothing
EndSub
PrivateSubCommand1_Click()
CallCreateParms
EndSub
SubErrHandler(objConAsObject)
DimADOErrAsADODB.Error
DimstrErrorAsString
ForEachADOErrInobjCon.Errors
strError="Error#"&ADOErr.Number&vbCrLf&ADOErr.Description_
&vbCr&_
"(Source:"&ADOErr.Source&")"&vbCr&_
"(SQLState:"&ADOErr.SQLState&")"&vbCr&_
"(NativeError:"&ADOErr.NativeError&")"&vbCr
IfADOErr.HelpFile=""Then
strError=strError&"NoHelpfileavailable"&vbCr&vbCr
Else
strError=strError&"(HelpFile:"&ADOErr.HelpFile&")"_
&vbCr&"(HelpContext:"&ADOErr.HelpContext&")"&_
vbCr&vbCr
EndIf
Debug.PrintstrError
Next
objCon.Errors.Clear
EndSub