帶輸入?yún)?shù)ADO.NET存儲過程調(diào)用案例分析
經(jīng)過長時間學(xué)習(xí)ADO.NET存儲過程,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西。此示例很簡單,因為存儲過程不需要任何輸入?yún)?shù)。也就是說,查找十件最貴的產(chǎn)品不需要任何外部信息。無需外界幫助,存儲過程即可完成此操作。然而,多數(shù)存儲過程都需要輸入?yún)?shù)來執(zhí)行其功能。在下一個示例中,讓我們看看如何向ADO.NET存儲過程傳遞輸入?yún)?shù)。我們將使用 CustomerID 來獲取相關(guān)客戶的所有訂單,并使用名為 CustOrderHist 的ADO.NET存儲過程(已存在于 Northwind 數(shù)據(jù)庫中)。
在已使用的表單上再創(chuàng)建一個按鈕,并將以下代碼行放到按鈕的 Click 事件后面:
- Dim sConnectionString As String = _
- "server=localhost;uid=sa;pwd=;database=Northwind"
- Dim cnNorthwind As New SqlConnection(sConnectionString)
- Dim cmdOrders As New SqlCommand("CustOrderHist", cnNorthwind)
- cmdOrders.CommandType = CommandType.StoredProcedure
- ' 為存儲過程設(shè)置參數(shù)
- Dim prmCustomerID As New SqlParameter()
- prmCustomerID.ParameterName = "@CustomerID"
- prmCustomerID.SqlDbType = SqlDbType.VarChar
- prmCustomerID.Size = 5
- prmCustomerID.Value = "ALFKI"
- cmdOrders.Parameters.Add(prmCustomerID)
- Dim daGetOrders As New SqlDataAdapter(cmdOrders)
- Dim dsOrders As New DataSet()
- daGetOrders.Fill(dsOrders, "Orders")
- DataGrid1.DataSource = dsOrders.Tables("Orders")
#T#此代碼與上一個示例中的代碼非常相似,不同之處在于創(chuàng)建 Command 對象之后,為其配置了 Parameter 對象并將此對象添加到 Command 的參數(shù)集合中。在此示例中(更接近于演示軟件)將對客戶 ID 進(jìn)行硬編碼,參數(shù)的 Value 屬性通常會設(shè)置為某些用戶輸入數(shù)據(jù)。但是,參數(shù)的其他屬性可以完全象此示例中那樣設(shè)置。此示例中的所有參數(shù)設(shè)置都是顯式設(shè)置。某些開發(fā)人員喜歡這種樣式,因為它便于說明。但某些開發(fā)人員喜歡使用代碼行較少的等價方法:
- Dim sConnectionString As String = _
- "server=localhost;uid=sa;pwd=;database=Northwind"
- Dim cnNorthwind As New SqlConnection(sConnectionString)
- Dim cmdOrders As New SqlCommand("CustOrderHist", cnNorthwind)
- cmdOrders.CommandType = CommandType.StoredProcedure
- cmdOrders.Parameters.Add(New _
- SqlParameter("@CustomerID", SqlDbType.VarChar, 5))
- cmdOrders.Parameters("@CustomerID").Value = "ALFKI"
- Dim daGetOrders As New SqlDataAdapter(cmdOrders)
- Dim dsOrders As New DataSet()
- daGetOrders.Fill(dsOrders, "Orders")
- DataGrid1.DataSource = dsOrders.Tables("Orders")
此代碼與上一示例的作用完全相同。但每個參數(shù)只需要兩行代碼,而不是六行。如果存儲過程包含大量參數(shù)(如后面某些示例所示),所需代碼行的多少就會有明顯區(qū)別,因此在后面部分,我們將使用此表單。