Удалить команду, используя идентификатор из DataGridView - PullRequest
0 голосов
/ 23 марта 2020

У меня есть данные, показанные в DataGridView. Я сделал Button при выборе идентификаторов в сетке, код ниже работает, но я получаю сообщение об ошибке.

Dim cnx As New MySqlConnection("datasource=localhost;database=bdgeststock;username=root;password=")
Dim cmd As MySqlCommand = cnx.CreateCommand
Dim resultat As Integer
If ConnectionState.Open Then
    cnx.Close()
End If
cnx.Open()
If grid.SelectedCells.Count = 0 Then
    MessageBox.Show("please select the ids that u want to delete")
Else
    cmd.CommandText = "delete from utilisateur where idu= @P1"
    cmd.Parameters.AddWithValue("@P1", grid.SelectedCells)
    resultat = cmd.ExecuteNonQuery
    If (resultat = 0) Then
        MessageBox.Show("error")
    Else
        MessageBox.Show("success")
    End If
End If
cnx.Close()
cmd.Dispose()

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Как это имеет смысл?

cmd.Parameters.AddWithValue("@P1", grid.SelectedCells)

Поскольку вы пометили этот вопрос WinForms, вы, вероятно, используете DataGridView, а не DataGrid (имена имеют значение, поэтому используйте правильные). В этом случае свойство SelectedCells имеет тип DataGridViewSelectedCellCollection. Как имеет смысл установить значение этого параметра на это? Как это будет сравниваться с идентификатором в базе данных?

Если вы планируете использовать значения в этих ячейках, то вам действительно нужно получить эти значения. Вам также необходимо решить, собираетесь ли вы использовать одно значение или несколько. Вы используете = в своем запросе SQL, что означает, что поддерживается только одно значение. Если вы хотите использовать несколько значений, вам нужно будет использовать IN и предоставить список, но это также означает использование нескольких параметров. Я написал пример такого типа вещей, используя ListBox некоторое время go. Вы можете найти это здесь . Вы можете адаптировать этот код к вашему сценарию следующим образом:

Dim connection As New SqlConnection("connection string here")
Dim command As New SqlCommand
Dim query As New StringBuilder("DELETE FROM utilisateur")

Select Case grid.SelectedCells.Count
    Case 1
        query.Append(" WHERE idu = @idu")
        command.Parameters.AddWithValue("@idu", grid.SelectedCells(0).Value)
    Case Is > 1
        query.Append(" WHERE idu IN (")

        Dim paramName As String

        For index As Integer = 0 To grid.SelectedCells.Count - 1 Step 1
            paramName = "@idu" & index

            If index > 0 Then
                query.Append(", ")
            End If

            query.Append(paramName)
            command.Parameters.AddWithValue(paramName, grid.SelectedCells(index).Value)
        Next index

        query.Append(")")
End Select

command.CommandText = query.ToString()
command.Connection = connection
0 голосов
/ 23 марта 2020

SelectedCells - это набор ячеек

, поэтому он не может быть только одним идентификатором, поэтому вам нужно угадать, какой вы хотите, или разрешить выбрать только одну строку

grid.SelectedCells(0).Value.ToString()

Или вам нужно запрограммировать al oop, чтобы удалить все выбранные строки

...