一、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
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
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
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
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
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
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行修改的数据传送到数据库中。