Vb.net 尝试插入、更新或删除时出错:已存在与此命令关联的打开的DataReader,必须先关闭该DataReader
每次我Vb.net 尝试插入、更新或删除时出错:已存在与此命令关联的打开的DataReader,必须先关闭该DataReader,vb.net,datareader,mysqldatareader,Vb.net,Datareader,Mysqldatareader,每次我插入,更新或删除,以下错误都会不断出现: 已存在与此命令关联的打开的DataReader,必须先关闭该命令 我已经尝试添加MultipleActiveResultSets=True在我的连接字符串上,但它仍然不起作用。在ExecuteReader中使用CommandBehavior.CloseConnection 作为 MySqlDataReader-myReader=myCommand.ExecuteReader(CommandBehavior.CloseConnection) 另外,使
插入
,更新
或删除
,以下错误都会不断出现:
已存在与此命令关联的打开的DataReader,必须先关闭该命令
我已经尝试添加
MultipleActiveResultSets=True代码>在我的连接字符串上,但它仍然不起作用。在ExecuteReader
中使用CommandBehavior.CloseConnection
作为
MySqlDataReader-myReader=myCommand.ExecuteReader(CommandBehavior.CloseConnection)代码>
另外,使用using
构造也适用于非托管资源,如SQL连接
Imports MySql.Data.MySqlClient
Public Class manageAdminAccounts
Dim MysqlConn As MySqlConnection
Dim COMMAND As MySqlCommand
Dim dbDataSet As New DataTable
Dim SDA As New MySqlDataAdapter
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
manageAccounts.Show()
Me.Hide()
End Sub
Private Sub btnInsert_Click(sender As Object, e As EventArgs) Handles btnInsert.Click
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "Server=localhost;Uid=root;Pwd=;Database=ilycean;"
Dim READER As MySqlDataReader
Try
MysqlConn.Open()
Dim Query As String
Query = "insert into ilycean.users(name,email,password) values ('" & txtName.Text & "', '" & txtEmail.Text & "', '" & txtPassword.Text & "')"
COMMAND = New MySqlCommand(Query, MysqlConn)
READER = COMMAND.ExecuteReader
MessageBox.Show("Data inserted")
txtID.ResetText()
txtName.ResetText()
txtEmail.ResetText()
txtPassword.ResetText()
txtPassword.ResetText()
RefreshData()
READER.Close()
MysqlConn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
MysqlConn.Dispose()
COMMAND.Dispose()
End Try
End Sub
Private Sub btnEdit_Click(sender As Object, e As EventArgs) Handles btnEdit.Click
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "Server=localhost;Uid=root;Pwd=;Database=ilycean;"
Dim READER As MySqlDataReader
Try
MysqlConn.Open()
Dim Query As String
Query = "update ilycean.users Set name='" & txtName.Text & "', email='" & txtEmail.Text & "', password='" & txtPassword.Text & "' where id='" & txtID.Text & "' "
COMMAND = New MySqlCommand(Query, MysqlConn)
READER = COMMAND.ExecuteReader
MessageBox.Show("Data Updated")
txtID.ResetText()
txtName.ResetText()
txtEmail.ResetText()
txtPassword.ResetText()
txtPassword.ResetText()
RefreshData()
READER.Close()
MysqlConn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
MysqlConn.Dispose()
COMMAND.Dispose()
End Try
End Sub
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "Server=localhost;Uid=root;Pwd=;Database=ilycean;"
Dim READER As MySqlDataReader
Try
MysqlConn.Open()
Dim Query As String
Query = "Delete from ilycean.users where id='" & txtID.Text & "'"
COMMAND = New MySqlCommand(Query, MysqlConn)
READER = COMMAND.ExecuteReader
MessageBox.Show("Data Deleted")
txtID.ResetText()
txtName.ResetText()
txtEmail.ResetText()
txtPassword.ResetText()
txtPassword.ResetText()
RefreshData()
READER.Close()
MysqlConn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
MysqlConn.Dispose()
COMMAND.Dispose()
End Try
End Sub
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "Server=localhost;Uid=root;Pwd=;Database=ilycean;"
Dim SDA As New MySqlDataAdapter
Dim dbDataSet As New DataTable
Dim bSource As New BindingSource
Try
MysqlConn.Open()
Dim Query As String
Query = "select * from ilycean.users"
COMMAND = New MySqlCommand(Query, MysqlConn)
SDA.SelectCommand = COMMAND
SDA.Fill(dbDataSet)
bSource.DataSource = dbDataSet
dataGridViewAdminAccounts.DataSource = bSource
SDA.Update(dbDataSet)
txtID.ResetText()
txtName.ResetText()
txtEmail.ResetText()
txtPassword.ResetText()
RefreshData()
MysqlConn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
MysqlConn.Dispose()
End Try
End Sub
Private Sub loadTable()
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "Server=localhost;Uid=root;Pwd=;Database=ilycean;"
Dim SDA As New MySqlDataAdapter
Dim bSource As New BindingSource
Try
MysqlConn.Open()
Dim Query As String
Query = "select * from ilycean.users"
COMMAND = New MySqlCommand(Query, MysqlConn)
SDA.SelectCommand = COMMAND
SDA.Fill(dbDataSet)
bSource.DataSource = dbDataSet
dataGridViewAdminAccounts.DataSource = bSource
SDA.Update(dbDataSet)
MysqlConn.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
MysqlConn.Dispose()
End Try
End Sub
Private Sub dataGridViewAdminAccounts_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridViewAdminAccounts.CellContentClick
If e.RowIndex >= 0 Then
Dim row As DataGridViewRow
row = Me.dataGridViewAdminAccounts.Rows(e.RowIndex)
txtID.Text = row.Cells("id").Value.ToString
txtName.Text = row.Cells("name").Value.ToString
txtEmail.Text = row.Cells("email").Value.ToString
txtPassword.Text = row.Cells("password").Value.ToString
End If
End Sub
Private Sub txtSearch_TextChanged(sender As Object, e As EventArgs) Handles txtSearch.TextChanged
Dim DV As New DataView(dbDataSet)
DV.RowFilter = String.Format("name Like'%{0}%'", txtSearch.Text)
dataGridViewAdminAccounts.DataSource = DV
End Sub
Private Sub manageAdminAccounts_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
Dim dialog As DialogResult
dialog = MessageBox.Show("Do you really want to exit?", "Exit", MessageBoxButtons.YesNo)
If dialog = DialogResult.No Then
e.Cancel = True
Else
Application.ExitThread()
End If
End Sub
Private Sub manageAdminAccounts_Load(sender As Object, e As EventArgs) Handles MyBase.Load
loadTable()
txtID.ResetText()
txtName.ResetText()
txtEmail.ResetText()
txtPassword.ResetText()
txtPassword.ResetText()
End Sub
Public Sub RefreshData()
Dim Query As String
Query = "select * from ilycean.users"
dbDataSet.Clear()
COMMAND = New MySqlCommand(Query, MysqlConn)
SDA.SelectCommand = COMMAND
SDA.Fill(dbDataSet)
dataGridViewAdminAccounts.DataSource = dbDataSet
End Sub
End Class
我将考虑对所有MySQL
对象使用实现<代码>使用命令作为新的MySQLCommand(查询,MysqlConn)
。还要研究如何使用参数来避免SQL注入。此外,在插入、删除和更新时,您没有选择数据,因此不需要读卡器。改用命令。ExecuteNonQuery()
@bug谢谢你,它成功了!
Using resource As New resourceType
' Insert code to work with resource.
End Using