从vb中的listview中的数据库中删除记录

时间:2014-05-23 09:44:21

标签: database vb.net listview

我有问题。在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的界面:

enter image description here

谢谢大家的帮助。 :)

1 个答案:

答案 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提取的一些值来改变