Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 尝试插入、更新或删除时出错:已存在与此命令关联的打开的DataReader,必须先关闭该DataReader_Vb.net_Datareader_Mysqldatareader - Fatal编程技术网

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