Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET-多个SQLDataReader';s_Vb.net - Fatal编程技术网

VB.NET-多个SQLDataReader';s

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

我在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
如果使用,您可以使用多个数据读取器,但我不建议这样做,除非您真的需要它


相反,我建议您在每次需要时创建一个新的
SqlConnection
对象—尽可能短的时间使用它,然后将其处理掉(使用
Using
语句为您完成此操作)。连接池将尽可能考虑重用“物理”网络连接的效率。这样,您就不必担心
SqlConnection
是否已经打开等问题,您每次都会遵循相同的“创建、打开、使用、处置”模式。

谢谢。如果在WHILE循环中有一个SQL语句,那么我认为上面的模式不起作用?你能确认这是不是真的吗?@w0051977:为什么不起作用?如果您在while循环中使用连接,那么对整个块使用一个连接就可以了——如果您在每次迭代中创建一个新的连接,这将是可行的,但这将有点毫无意义。(请注意,您应该关闭每个命令。)基本上,如果没有更详细的说明,很难知道某些东西是否可以工作,但完全可以在循环中执行SQL。我想我明白您的意思。当你说“在每个循环上创建一个新连接”时,你是指阴影吗?@w0051977:我从来没有说过,所以很难理解你的意思。提供实际代码(例如问题中的代码),我们可以对此进行讨论。我当然不是说变量的阴影。好的,谢谢。我在问题中加入了一些代码。您能看一下吗?为了提高性能,请使用存储过程而不是临时查询。