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