-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

エラーの内容をお知らせしていませんが (問題の解決が非常に難しくなります)、2 つの異なるコマンドで 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 に答える