-3

我应该使用吗?

 Private Sub btntest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntest.Click
        If sqlConnection.State = ConnectionState.Closed Then
            sqlConnection.Open()
        End If
        Dim query = "Select * from tablebusiness"

        Dim cmd = New MySqlCommand(query, sqlConnection)

        Dim data = cmd.ExecuteReader()

        Do While data.Read
        Loop

        Dim cmd1 = New MySqlCommand(query, sqlConnection)
    Dim data1 = cmd1.ExecuteReader //Error. Already have data reader 
                                  //Error There is already an open DataReader associated with this Connection which must be closed first.

    Dim check = 1

    'sqlConnection.Close()
End Sub
4

3 回答 3

1

你错过了后面的括号cmd1.ExecuteReader。应该是cmd1.ExecuteReader()

于 2012-05-23T08:34:19.617 回答
1

尽管您没有让我们知道错误是什么(这使得解决任何问题变得更加困难),但我预计会出现问题,因为您正试图将 SqlConnection 对象重新用于 2 个不同的命令。特别是因为您没有在初始化第二个命令之前处理您的第一个命令。

首先,使用 2 个不同的 SqlConnection 对象来管理与数据库的连接。如果您这样做,您不会在数据库或代码上增加任何开销。让 .NET 框架连接池完成它的工作 - 不要试图自己做。您不需要执行任何特定的操作来启用连接池(尽管您可以通过在连接字符串中设置 Pooling=false 来禁用它)。

其次,使用using语句正确处理您的 SqlConnection、SqlCommand 和 SqlDataReader 对象。例如

    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Using Command As New SqlCommand(query, connection)
            Using reader As SqlDataReader = Command.ExecuteReader()
                While reader.Read()
                    'Do Stuff'
                End While
            End Using
        End Using
        connection.Close()
    End Using
于 2012-05-23T08:54:12.773 回答
1

如果您希望两个数据读取器同时工作,则需要另一个连接,否则在使用 cmd1.ExecuteReader() 之前关闭/处理上一个命令

于 2012-05-23T10:11:27.730 回答