使用 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
我有 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