2017-02-22 86 views
-1

Может ли кто-нибудь помочь мне с моим приложением, я пытаюсь удалить строку из mysql, используя datagridview в vb. По какой-то причине он либо говорит, что не может найти столбец с именем пользователя, либо просто не работает так, как должен.Удаление строки из mysql в datagridview 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 

EDIT: Исправлено это сейчас, спасибо всем, кто ответил.

+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

Quote ваш идентификатор пользователя, вы получили его, как

... WHERE user=asd 

, который прямо-таки ошибка SQL.

Вам нужно быть

... WHERE user='asd' 

Итак, доу как вы конкатенации:

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

или использовать параметризацию, как это было предложено Акаши KC.

 Смежные вопросы

  • Нет связанных вопросов^_^