为什么我在vb.net中的SQL上创建2个命令时出错

时间:2012-05-23 08:15:06

标签: sql vb.net

我应该使用吗?

 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

3 个答案:

答案 0 :(得分:1)

您在cmd1.ExecuteReader之后错过了括号。它应该是cmd1.ExecuteReader()

答案 1 :(得分:1)

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

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

其次使用using语句正确处理SqlConnection,SqlCommand和SqlDataReader对象。 e.g。

    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

答案 2 :(得分:1)

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