VB.NET 刷新 DataGridView 功能适用于插入和删除命令,但不适用于更新

VB.NET Refresh DataGridView function works with insert and delete commands but not with update

我在 VB.NET 上有一个表格,我用它来管理 mysql 数据库的数据。 除了用于输入数据的各种字段(文本框 + 1 个日期选择器)之外,该表单还包括一个“保存”按钮(当我按下“编辑”按钮时变成“更新”)、一个“编辑”按钮、一个“删除”按钮和 DataGridView。

我创建了一个 ShowData() 来显示 DataGridView 中的数据。 此功能适用于表单加载,当我使用“保存”命令(使用 mysql 插入命令)和“删除”命令(使用 mysql 删除命令)时它也适用,但它似乎在我使用“更新”命令时产生问题。

当我使用“更新”命令时,数据库中的数据已更新,但“ShowData ()”函数给我错误 您的 SQL 语法有误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行 附近使用的正确语法,因此,DataGridView 中的数据不会更新。

“ShowData ()”函数也出现在 DataGridView 的“CellMouseDown”事件中。当我先使用“更新”命令然后浏览各行时,同样的错误 出现。

Public Class

Dim Connection As New MySqlConnection("server=localhost; user=root; password=; database=dbname")
    Dim MySQLCMD As New MySqlCommand
    Dim MySQLDA As New MySqlDataAdapter
    Dim DT As New DataTable

    Dim Table_Name As String = "tablename"
    Dim Dati As Integer

    Dim LoadImagesStr As Boolean = False
    Dim data1Ram, data2Ram As String
    Dim StatusInput As String = "Save"
    Dim SqlCmdSearchstr As String

ShowData()

Try
            Connection.Open()
        Catch ex As Exception
            MessageBox.Show("Connection failed !!!" & vbCrLf & "Please check that the server is ready !!!", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return
        End Try

        Try
            MySQLCMD.CommandType = CommandType.Text
            MySQLCMD.CommandText = "SELECT data1,data2 FROM " & Table_Name & " WHERE cid=" & cid.Text & ""
            MySQLDA = New MySqlDataAdapter(MySQLCMD.CommandText, Connection)
            DT = New DataTable
            Dati = MySQLDA.Fill(DT)
            If Dati > 0 Then
                DataGridView1.DataSource = Nothing
                DataGridView1.DataSource = DT

                DataGridView1.DefaultCellStyle.ForeColor = Color.Black
                DataGridView1.ClearSelection()
            Else
                DataGridView1.DataSource = DT
            End If
        Catch ex As Exception
            MsgBox("Connection Error !!!" & vbCr & ex.Message, MsgBoxStyle.Critical, "Error Message")
            Connection.Close()
            Return
        End Try

        DT = Nothing
        Connection.Close()

Save/Update 按钮点击

Dim mstream As New System.IO.MemoryStream()    

        If StatusInput = "Save" Then

            Try
                Connection.Open()
            Catch ex As Exception
                MessageBox.Show("Connection Failed" & vbCrLf & "Check internet connection !!!", "No connection", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return
            End Try

            Try
                MySQLCMD = New MySqlCommand
                With MySQLCMD
                    .CommandText = "INSERT INTO " & Table_Name & " (data1, data2) VALUES (@data1, @data2)"
                    .Connection = Connection
                    .Parameters.AddWithValue("@data1", textbox1.Text)
                    .Parameters.AddWithValue("@data2", textbox2.Text)
                    .ExecuteNonQuery()
                End With
                MsgBox("Data saved successfully", MsgBoxStyle.Information, "Information")
                ClearInputUpdateData()
            Catch ex As Exception
                MsgBox("Data failed to save !!!" & vbCr & ex.Message, MsgBoxStyle.Critical, "Error Message")
                Connection.Close()

                Return
            End Try
            Connection.Close()

        Else

            Try
                Connection.Open()
            Catch ex As Exception
                MessageBox.Show("Connection failed !!!" & vbCrLf & "Please check that the server is ready !!!", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return
            End Try

            Try
                MySQLCMD = New MySqlCommand
                With MySQLCMD
                    .CommandText = "UPDATE " & Table_Name & " SET `data1` = @data1, `data2` = @data2 WHERE id=@id"
                    .Connection = Connection
                    .Parameters.AddWithValue("@data1", textbox1.Text)
                    .Parameters.AddWithValue("@data2", textbox2.Text)
                    .Parameters.AddWithValue("@id", id.Text)
                    .ExecuteNonQuery()
                End With
                MsgBox("Data updated successfully", MsgBoxStyle.Information, "Information")
                ButtonSave.Text = "Save"
                DatePicker1.Enabled = True
                ClearInputUpdateData()
            Catch ex As Exception
                MsgBox("Data failed to Update !!!" & vbCr & ex.Message, MsgBoxStyle.Critical, "Error Message")
                Connection.Close()
                Return
            End Try

            Connection.Close()
            StatusInput = "Save"

        End If

        ShowData()

点击编辑按钮

If DataGridView1.RowCount = 1 Then
            textbox1.Text = data1Ram
            textbox2.Text = data2Ram
            ButtonSave.Text = "Update"
            StatusInput = "Update"
            Return
        End If

DataGridView1 CellMouseDown

Try
            If AllCellsSelected(DataGridView1) = False Then
                If e.Button = MouseButtons.Left Then
                    DataGridView1.CurrentCell = DataGridView1(e.ColumnIndex, e.RowIndex)
                    Dim i As Integer
                    With DataGridView1
                        If e.RowIndex >= 0 Then
                            i = .CurrentRow.Index
                            LoadImagesStr = True
                            data1Ram = .Rows(i).Cells("data1").Value.ToString
                            data2Ram = .Rows(i).Cells("data2").Value.ToString
                            ShowData()
                        End If
                    End With
                End If
            End If
        Catch ex As Exception
            Return
        End Try

编辑 1

正如错误消息所解释的那样,这是一个命令语法问题。 事实上,我尝试在 ShowData()

中替换这个字符串
"SELECT data1,data2 FROM " & Table_Name & " WHERE cid=" & cid.Text & ""

有了这个

"SELECT data1,data2 FROM tablename WHERE cid = 10"

并且没有出现错误。 所以我需要弄清楚如何将 table 名称和条件放在命令字符串

正如错误消息所解释的那样,这是一个命令语法问题。 事实上,我尝试在 ShowData()

中替换这个字符串
"SELECT data1,data2 FROM " & Table_Name & " WHERE cid=" & cid.Text & ""

有了这个

"SELECT data1,data2 FROM tablename WHERE cid = 10"

并且没有出现错误。 所以我需要弄清楚如何将 table 名称和条件放在命令字符串

编辑 解决了。 感谢评论。连接和命令需要在使用它们的方法中声明和释放。不要在这个方法之外声明。