有人可以帮我处理我的应用程序,我试图使用vb中的datagridview从mysql中删除一行。由于某种原因,它要么说它找不到名为user的列,要么就像它应该做的那样起作用。
这是代码,我知道它不整洁并且有未使用的东西,但它不应该影响它。
Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
Try
MySqlConnection.Open()
Catch ex As Exception
End Try
If Me.DataGridView1.Rows.Count > 0 Then
If Me.DataGridView1.SelectedRows.Count > 0 Then
For Each row As DataGridViewRow In DataGridView1.Rows
Dim selUser As String = Me.DataGridView1.CurrentRow.Index
Dim SqlQuery As String = "DELETE FROM Report WHERE user=" & row.DataBoundItem(1).ToString
Dim cmd As New MySqlCommand(SqlQuery, MySqlConnection)
cmd.ExecuteNonQuery()
Dim da As New MySqlDataAdapter("select * from Report", MySqlConnection)
Dim ds As New DataSet
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
Next
End If
End If
End Sub
编辑:现在修复它,感谢所有回答的人。
答案 0 :(得分:0)
根据您的错误,我认为您的列名与值的串联问题。因此,您可以使用基于参数的查询来避免连接和SQL注入(在代码中无法避免)。
您的代码将是这样的:
Dim SqlQuery As String = "DELETE FROM Report WHERE user= @user"
Dim cmd As New MySqlCommand(SqlQuery, MySqlConnection)
cmd.Parameters.Add(New SqlParameter("@user", row.DataBoundItem(1).ToString)) // with SqlParameter, you can pass value
答案 1 :(得分:0)
引用你的用户ID,就像
一样... WHERE user=asd
这是一个彻头彻尾的SQL错误。
你需要它
... WHERE user='asd'
所以,当你连接时,它就是它:
Dim SqlQuery As String = "DELETE FROM Report WHERE user='" & row.DataBoundItem(1).ToString & "'"
或使用参数化,正如Akash KC所建议的那样。