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 名称和条件放在命令字符串
中
编辑
解决了。
感谢评论。连接和命令需要在使用它们的方法中声明和释放。不要在这个方法之外声明。
我在 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 名称和条件放在命令字符串
中编辑 解决了。 感谢评论。连接和命令需要在使用它们的方法中声明和释放。不要在这个方法之外声明。