2017-02-22 55 views
-1

有人可以幫助我處理我的應用程序,我試圖用vb中的datagridview從mysql中刪除一行。由於某種原因,它要麼不能找到名爲user的列,要麼它不能像它應該那樣工作。在datagridview中從mysql中刪除一行vb

這是代碼,我知道它的亂糟糟,有沒有使用的東西,但它不應該影響它。

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

在報表中有一個名爲user的列,im sure –

+0

你可以調試,你的'SqlQuery'裏有什麼 –

回答

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 
+0

新錯誤:/ https://puu.sh/ufbSw/5c0f6bfb0a.png –

+1

你最近的錯誤似乎更具體到vb.net。我想,你有檢查'row.DataBoundItem(1)'有價值或沒有設置爲上述代碼之前 –

+0

我有這樣的:對於每一行作爲DataGridViewRow在DataGridView1.Rows –

0

引用您的用戶ID,你得到它像

... WHERE user=asd 

這是一個徹頭徹尾的SQL錯誤。

你需要它

... WHERE user='asd' 

所以,竇它作爲您連接:

Dim SqlQuery As String = "DELETE FROM Report WHERE user='" & row.DataBoundItem(1).ToString & "'" 

或使用參數化,作爲阿卡什KC建議。