是否有任何可能的方法来执行此操作而不会出现此错误“已经有一个打开的 DataReader 与此连接关联,必须先关闭它。”我已经尝试使用“dr.close()
”,但我收到另一个错误,提示“阅读器关闭时读取尝试无效。”你能帮帮我吗?
这是我的代码:
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Label2.Text = AllPicker1.Text
Label3.Text = AllPicker2.Text
If AllPicker1.Value >= AllPicker2.Value Then
MsgBox("End Date Must be Greater!")
Else
Dim SQLstatement As String = "SELECT * FROM tblStudInfo,tbl_studentLog WHERE tblStudInfo.StudID = tbl_studentLog.StudentNumber AND tbl_studentLog.LoginDate BETWEEN '" & AllPicker1.Text & "' AND '" & AllPicker2.Text & "'"
OpenData(SQLstatement)
End If
End Sub
Public Sub OpenData(ByRef SQLstatement As String)
Dim cmd As MySqlCommand = New MySqlCommand
With cmd
.CommandText = SQLstatement
.CommandType = CommandType.Text
.Connection = SqlConnection
dr = .ExecuteReader()
End With
While dr.Read
Dim SQLstatementSave As String = "INSERT INTO tbl_report (RepStudNo,RepName,RepCourse,RepDept,RepLogTime,RepLogdate) VALUES ('" & dr("StudID") & "','" & dr("Name") & "','" & dr("Course") & "','" & dr("Dept") & "','" & dr("LoginTime") & "','" & dr("LoginDate") & "') "
dr.Close()
Save(SQLstatementSave)
End While
SqlConnection.Close()
SqlConnection.Dispose()
SqlConnection.Open()
End Sub
Public Sub Save(ByRef SQLstatementSave As String)
Dim cmd As MySqlCommand = New MySqlCommand
With cmd
.CommandText = SQLstatementSave
.CommandType = CommandType.Text
.Connection = SqlConnection
.ExecuteNonQuery()
End With
SqlConnection.Close()
SqlConnection.Dispose()
SqlConnection.Open()
End Sub
End Class
最佳答案
看来您只使用了一个 SqlConnection。对于大多数数据库系统,您不能在读取连接时重用连接。您可以将所有数据读入内存/数据表并处理之后的行,或者为您的插入使用不同的 SqlConnection。
在使用 SqlConnections、Reader 和 Commands 时,我发现 Using Statement非常有助于可视化对象的使用和创建。
关于mysql - 打开阅读器时如何在 VB 中打开执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182437/