一、SqlCommand

1、执行带有参数的存储过程

 

代码
 1     Sub a(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandType = CommandType.StoredProcedure
 5                 cmd.CommandText = "uspGetCustomerById"
 6 
 7                 Dim parm = cmd.CreateParameter
 8                 parm.ParameterName = "@Id"
 9                 parm.Value = "AROUT"
10                 cmd.Parameters.Add(parm)
11 
12                 Dim id As String = cmd.Parameters("@Id").Value
13             End Using
14         End Using
15     End Sub
16 

 

 

  • sqlserver要求参数名与存储过程中定义的参数名相匹配,与参数的创建次序无关。
  • 第7~10行为参数的定义方法。
  • 第12行为访问参数的方法。

2、ExecuteNonQuery方法

 

代码
 1     Sub b(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandText = "UPDATE sales SET qty = qty + 1 WHERE qty > 50"
 5                 connection.Open()
 6                 Dim count As Integer = cmd.ExecuteNonQuery
 7             End Using
 8         End Using
 9     End Sub
10 

 

 

  • 第4行为命令文本,为一个修改操作。
  • 第6行返回一个整数,表示操作所影响的行数。

3、 ExecuteScalar方法

当希望查询返回单行单列时,使用ExecuteScalar方法

代码
 1     Sub c(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandText = "SELECT COUNT(*) FROM Sales"
 5                 connection.Open()
 6                 Dim count As Integer = cmd.ExecuteScalar
 7                 MessageBox.Show(count.ToString)
 8             End Using
 9         End Using
10     End Sub
11 

 

 

4、ExecuteReader方法与SqlDataReader对象

 

代码
 1     Sub d(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandText = "SELECT stor_id, ord_num FROM Sales"
 5                 connection.Open()
 6                 Dim rdr = cmd.ExecuteReader
 7                 While rdr.Read
 8                     MessageBox.Show(rdr("stor_id"& "" & rdr("ord_num"))
 9                 End While
10             End Using
11         End Using
12     End Sub
13 

 

  • 第6行,只有通过cmd.ExecuteReader方法才能生成rdr
  • 第7~9行,持续遍历结果,直到数据的末尾(Read方法返回False)

 二、SqlDataAdapter

1、Fill方法

如何用Fill方法加载一个DataTable

代码
 1     Sub e(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandText = "SELECT pub_id,pub_name FROM publishers"
 5 
 6                 Dim pubsDataSet As New DataSet("Pubs")
 7                 Dim da As New SqlDataAdapter(cmd)
 8                 da.Fill(pubsDataSet, "publishers")
 9             End Using
10         End Using
11     End Sub
12 

 

  • 第7行生成具有SelectCommand的适配器
  • 第8行填充pubsDataSet.Tables("publishers")表

2、Update方法

 

代码
 1     Sub f(ByVal connectionString As String)
 2         Using connection As New SqlConnection(connectionString)
 3             Using cmd = connection.CreateCommand
 4                 cmd.CommandText = "SELECT * FROM publishers"
 5 
 6                 Dim pubsDataSet As New DataSet("Pubs")
 7                 Dim da As New SqlDataAdapter(cmd)
 8                 Dim bldr As New SqlCommandBuilder(da)
 9                 da.Fill(pubsDataSet, "publishers")
10                 'modify data here
11                 pubsDataSet.Tables("publishers").Rows(0)("pub_name"= "Hello"
12                 pubsDataSet.Tables("publishers").Rows.Add("9911""tailspin Toys""Paris"Nothing"France")
13                 da.UpdateBatchSize = 0
14                 da.Update(pubsDataSet, "publishers")
15             End Using
16         End Using
17         MessageBox.Show("Update Complete")
18     End Sub
19 

 

 

  • 第7、8行用来生成具有4个命令的适配器
  • 第13行使修改结果批量保存到数据库,以提高性能。
  • 第14行用来将第11、12行修改的数据传送到数据库中。