VB中調用帶參數存儲過程的實現
發表于:2007-07-14來源:作者:點擊數:
標簽:
---- VB 做為快速應用 開發 (RAD)工具越來越得到開發人員的認可和接受。它對許多API(如ODBC API、SOCKET API等等)的封裝使得編程變得簡單起來。同時,它支持集成開發環境下的可視化、事件驅動、 面向對象 等編程特點。下面,我們談談在VB中調用存儲過程
----
VB做為快速應用
開發(RAD)工具越來越得到開發人員的認可和接受。它對許多API(如ODBC API、SOCKET API等等)的封裝使得編程變得簡單起來。同時,它支持集成開發環境下的可視化、事件驅動、
面向對象等編程特點。下面,我們談談在VB中調用存儲過程的實現方法及其注意事項。
---- 我們知道,VB的
數據庫編程有許多種方法,比如直接用ODBC API編程,這種方法靈活、高效,
程序員可以實現對數據庫復雜的控制;也可以用VB中的數據對象,如RDO(遠程數據對象)、DAO(數據訪問對象)、ADO(ActiveX 數據對象),這種方法實現起來方便、快捷,但靈活性較差一些。由于存儲過程在實現數據封裝、隱藏以及代碼的預編譯、減少
網絡負載、維護方便等優點,所以被許多RDBMS和編程工具做支持。VB中的各類數據對象也提供對存儲過程的支持。
---- 我們以ADO為例來說明其實現的步驟
---- 1. 創建、調試存儲過程。你可以在數據庫中也可以在其他外掛程序的支持下進行存儲過程的創建和調試工作。本例中的存儲過程代碼如下(使用PUBS的MS
SQL中的例子庫 ):
CREATE PROCEDURE myprocedure
@job_id smallint,
@job_lvl tinyint
AS
SELECT *
FROM employee
WHERE job_id < @job_id
AND job_lvl > @job_lvl
---- 2. 在VB中生成一個新的工程,工程有一窗體,一個COMMAND(NAME:COMMAND1) 按鈕,一個
MSFlexGrid(NAME:MSFlexGrid1)控件。
---- 3. 創建連接ADO connection;
---- 4. 創建命令ADO command;
---- 5. 創建參數并設置各個參數的屬性;
---- 6. 執行ADO command;
---- 7. 對數據進行處理;MSFlexGrid顯示查詢到的數據
---- 8. 釋放連接,退出程序。
---- 其中代碼如下:
在窗體中聲明以下變量:
Dim cnn1 As ADODB.Connection ‘連接
Dim mycommand As ADODB.Command ‘命令
Dim parm_jobid As ADODB.Parameter ‘參數1
Dim parm_joblvl As ADODB.Parameter ‘參數2
Dim rstByQuery As ADODB.Recordset ‘結果集
Dim strCnn As String ‘連接字符串
在窗體的LOAD事件中加入如下代碼:
Set cnn1 = New ADODB.Connection
‘生成一個連接
strCnn = "DSN=MYDSN;uid=sa;pwd="
‘創建的系統數據源MYDSN指向PUBS數據庫
cnn1.Open strCnn ‘打開連接
在窗體的UNLOAD中的加入代碼如下:
cnn1.Close ‘關閉連接
Set cnn1 = Nothing ‘釋放連接
在按鈕中的代碼如下:
Dim i As integer
Dim j as integer
Set parm_jobid = New ADODB.Parameter
Set mycommand = New ADODB.Command
' parm_jobid.Name = "name1"
this line can be ommited
parm_jobid.Type = adInteger ‘參數類型
parm_jobid.Size = 3 ‘參數長度
parm_jobid.Direction = adParamInput
‘參數方向,輸入或輸出
parm_jobid.value = 100 ‘參數的值
mycommand.Parameters.Append
parm_jobid ‘加入參數
Set parm_joblvl = New ADODB.Parameter
‘parm_joblvl.Name = "name2"
parm_joblvl.Type = adInteger
parm_joblvl.Size = 3
parm_joblvl.Direction = adParamInput
mycommand.value = 100
mycommand.Parameters.Append parm_joblvl
mycommand.ActiveConnection = cnn1
‘指定該command 的當前活動連接
mycommand.CommandText = " myprocedure "
‘myprocedure 是你要調用的存儲過程名稱
mycommand.CommandType = adCmdStoredProc
‘表明command 為存儲過程
Set rstByQuery = New ADODB.Recordset
Set rstByQuery = mycommand.Execute()
i = 0
Do While Not rstByQuery.EOF
i = i + 1 ‘ i 中保存記錄個數
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows = i + 1
‘動態設置MSFlexGrid的行和列
MSFlexGrid1.Cols = rstByQuery.Fields.Count + 1
MSFlexGrid1.Row = 0
For i = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = i + 1
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name
Next ‘設置第一行的標題,用域名填充
i = 0
Set rstByQuery = mycommand.Execute()
Do While Not rstByQuery.EOF
i = i + 1
MSFlexGrid1.Row = i ‘確定行
For j = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = j + 1
MSFlexGrid1.Text = rstByQuery (j)
‘添充所有的列
Next
rstByQuery.MoveNext
Loop ‘這個循環用來填充MSFlexGrid的內容
---- 特殊說明
---- 1. Set recordset = command.Execute( RecordsAffected, Parameters, Options ) command.Execute RecordsAffected, Parameters, Options 這是command的兩種用法,一種有返回結果集,一種沒有返回結果集。
---- RecordsAffected:是指用update、delete操作時所影響的結果,對select的查詢,其值為-1;這和在Ms sql server 中的Query Analyzer中的不一樣。Query Analyzer中,select、update、delete的結果顯示的是實際查、改、刪的記錄數。
---- Options:指明command的類型,有adCmdText、adCmdTable、adCmdStoredProc等等,用戶可見MSDN。
---- 2.在參數的類型中,用戶可以用varchar來代替integer,系統會幫你自動實施轉化;
---- 3.本例中僅為帶輸入參數的存儲過程,如果要有輸出參數,根據MSDN的材料,用ADO不行。你可以用RDO數據對象,MSDN中有一個例子,此處不做過多贅述;
---- 4.可以不用ADO COMMAND對象,也可直接調用ADO CONNECTION的execute方法,結果很類似。
原文轉自:http://www.anti-gravitydesign.com