我有问题。在listview的属性中,checkboxes =“True”。使用此复选框,我想删除listview和数据库中的数据。
以下是代码:
If MessageBox.Show("Do you really want to DELETE this record?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.No Then
MsgBox("Operation cancel", MsgBoxStyle.Information, "Information")
End If
dbSource = "Data Source=LAILATUL-PC\SERVER;Initial Catalog=HotelManagementSystem;Integrated Security=True"
Dim sql As String = "DELETE FROM [Room] WHERE Room_Code = @code"
Using con = New SqlConnection(dbSource)
Using cmd = New SqlCommand(sql, con)
con.Open()
For Each lvItem As ListViewItem In ListViewRoom.Items
If lvItem.Checked Then
cmd.Parameters.AddWithValue("@code", ColumnRoomCode.Text)
cmd.ExecuteNonQuery()
lvItem.Remove()
End If
Next
End Using
End Using
使用上面的代码,只删除listview中的数据。数据库中的数据未删除。
listviewitem的界面:
谢谢大家的帮助。 :)
答案 0 :(得分:2)
应执行命令以对数据库产生任何影响。你需要添加这个
cmd.ExecuteNonQuery()
在每个循环中。
此外,连接可以在进入循环之前打开,之后应该关闭。 (这里建议使用Statement)
说,请查看参数化查询,因为您的代码对Sql注入和解析问题是开放的。删除记录的sql命令也不需要FROM表部分之后的字段列表。
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
dbSource = "Data Source=LAILATUL-PC\SERVER;Initial Catalog=HotelManagementSystem;Integrated Security=True"
' Parameterized query
Dim sql As String = "DELETE FROM [Room] WHERE Room_Code = @code"
' Using statement to ensure proper closing and disposing
' of the objects SqlConnection and SqlCommand
using con = New SqlConnection(dbSource)
using cmd = New SqlCommand(sql, con)
con.Open()
' Add a parameter just one time before the loop with an empty string
cmd.Parameters.AddWithValue("@code", "")
For Each lvItem As ListViewItem In ListViewRoom.Items
If lvItem.Checked Then
' Set the parameter value with the value extracted from the ListViewItem
Dim RoomCode = lvItem.Text
cmd.Parameters("@code").Value = RoomCode
cmd.ExecuteNonQuery()
lvItem.Remove()
End If
Next
End Using
End Using
End Sub
最后一点。 ColumnRoomCode文本框(?)总是相同的,所以调用一次删除就足够了,但我想这应该用你当前的ListViewItem提取的一些值来改变