使用 DataGridView 中的 ID 删除命令

Delete command using ID from DataGridView

我有 DataGridView 中显示的数据。我在网格中选择 ID 时做了一个 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()

SelectedCells is a collection of cells

所以它永远不能只有一个 id,所以你必须猜测你想要哪个或者只允许一个 row to be selected

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

或者您必须编写一个循环来删除所有选定的行

这有什么意义?

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

当您在 WinForms 中标记这个问题时,您可能使用的是 DataGridView 而不是 DataGrid(名称很重要,因此请使用正确的名称)。在这种情况下,SelectedCells 属性 是类型 DataGridViewSelectedCellCollection。将参数值设置为该值有何意义?如何与数据库中的 ID 进行比较?

如果您希望使用这些单元格中的值,那么您必须实际取出这些值。您还需要决定是要使用单个值还是多个值。您在 SQL 查询中使用 =,这意味着仅支持单个值。如果你想使用多个值,那么你需要使用 IN 并提供一个列表,但这也意味着使用多个参数。前段时间我用 ListBox 写了一个这种类型的例子。你可以找到 here。您可以像这样使该代码适应您的场景:

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