VB.NET-多个SQLDataReader';s
我在ASP.NET中开发了很多东西,我知道每个SQLConnection只能打开一个SQLDataReader。但是,VB.NET(表单应用程序)中的情况似乎并非如此,即我为一个连接对象打开了多个SqlDataReader。在VB.NET中允许这样做吗 如果没有一个明显的答案,那么我将发布一些代码 下面是一些代码:VB.NET-多个SQLDataReader';s,vb.net,Vb.net,我在ASP.NET中开发了很多东西,我知道每个SQLConnection只能打开一个SQLDataReader。但是,VB.NET(表单应用程序)中的情况似乎并非如此,即我为一个连接对象打开了多个SqlDataReader。在VB.NET中允许这样做吗 如果没有一个明显的答案,那么我将发布一些代码 下面是一些代码: Public Function CheckActiveReviews() Dim objCon As SqlConnection Di
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
如果使用,您可以使用多个数据读取器,但我不建议这样做,除非您真的需要它
相反,我建议您在每次需要时创建一个新的
SqlConnection
对象—尽可能短的时间使用它,然后将其处理掉(使用Using
语句为您完成此操作)。连接池将尽可能考虑重用“物理”网络连接的效率。这样,您就不必担心SqlConnection
是否已经打开等问题,您每次都会遵循相同的“创建、打开、使用、处置”模式。谢谢。如果在WHILE循环中有一个SQL语句,那么我认为上面的模式不起作用?你能确认这是不是真的吗?@w0051977:为什么不起作用?如果您在while循环中使用连接,那么对整个块使用一个连接就可以了——如果您在每次迭代中创建一个新的连接,这将是可行的,但这将有点毫无意义。(请注意,您应该关闭每个命令。)基本上,如果没有更详细的说明,很难知道某些东西是否可以工作,但完全可以在循环中执行SQL。我想我明白您的意思。当你说“在每个循环上创建一个新连接”时,你是指阴影吗?@w0051977:我从来没有说过,所以很难理解你的意思。提供实际代码(例如问题中的代码),我们可以对此进行讨论。我当然不是说变量的阴影。好的,谢谢。我在问题中加入了一些代码。您能看一下吗?为了提高性能,请使用存储过程而不是临时查询。