我在 ASP.NET 中进行了大量开发,并且我知道您只能为每个 SQLConnection 打开一个 SQLDataReader。然而,在 VB.NET(表单应用程序)中似乎并非如此,即我为一个连接对象打开了多个 SQLDataReader。这在 VB.NET 中允许吗?
如果没有明显的答案,那么我将发布一些代码。
这是一些代码:
Public Function CheckActiveReviews()
Dim objCon As SqlConnection
Dim objCommand As SqlCommand, objCommand2 As SqlCommand
Dim objDR As SqlDataReader, objDR2 As SqlDataReader
Try
objCon = New SqlConnection("Data Source=TestDatabase;Initial Catalog=TestTable;User ID=TestUser;Password=TestPassword;MultipleActiveResultSets=True")
objCommand = New SqlCommand
objCommand.Connection = objCon
objCommand2 = New SqlCommand
objCommand2.Connection = objCon
objCon.Open()
objCommand.CommandText = "SELECT ID FROM Person WHERE PersonID > 1000"
objDR = objCommand.ExecuteReader()
Do While objDR.Read
objCommand2.CommandText = "SELECT * FROM Sport WHERE PersonID = @PersonID "
objCommand2.Parameters.AddWithValue("@PersonID", objDR("ID"))
objDR2 = objCommand2.ExecuteReader
Loop
Catch ex As Exception
End Try
End Function
最佳答案
如果您使用MARS - Multiple Active Result Sets,您可以使用多个数据读取器- 但我不建议这样做,除非你真的需要它。
相反,我建议每次需要时创建一个新的 SqlConnection
对象 - 尽可能短地使用它,然后丢弃它(使用 Using
语句来为您执行此操作)。连接池将在可能的情况下考虑重用“物理”网络连接的效率。这样您就不必担心 SqlConnection
是否已打开等 - 您每次都始终遵循相同的“创建、打开、使用、处置”模式。
关于VB.NET - 多个 SQLDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332670/