经过长时间学习ADO.NET存储过程,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。此示例很简单,因为存储过程不需要任何输入参数。也就是说,查找十件最贵的产品不需要任何外部信息。无需外界帮助,存储过程即可完成此操作。然而,多数存储过程都需要输入参数来执行其功能。在下一个示例中,让我们看看如何向ADO.NET存储过程传递输入参数。我们将使用 CustomerID 来获取相关客户的所有订单,并使用名为 CustOrderHist 的ADO.NET存储过程(已存在于 Northwind 数据库中)。
在已使用的表单上再创建一个按钮,并将以下代码行放到按钮的 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
- ' 为存储过程设置参数
- 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#此代码与上一个示例中的代码非常相似,不同之处在于创建 Command 对象之后,为其配置了 Parameter 对象并将此对象添加到 Command 的参数集合中。在此示例中(更接近于演示软件)将对客户 ID 进行硬编码,参数的 Value 属性通常会设置为某些用户输入数据。但是,参数的其他属性可以完全象此示例中那样设置。此示例中的所有参数设置都是显式设置。某些开发人员喜欢这种样式,因为它便于说明。但某些开发人员喜欢使用代码行较少的等价方法:
- 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")
此代码与上一示例的作用完全相同。但每个参数只需要两行代码,而不是六行。如果存储过程包含大量参数(如后面某些示例所示),所需代码行的多少就会有明显区别,因此在后面部分,我们将使用此表单。