我应该使用吗?
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
答案 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()之前关闭/处理上一个命令