2014-05-23 98 views
-1

我有一個問題。在listview屬性中是checkboxes =「True」。使用這個複選框,我想刪除列表視圖和數據庫中的數據。從列表視圖中的數據庫刪除記錄在vb

下面是代碼:

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 

使用上述代碼中,僅在列表視圖中的數據被刪除。數據庫中的數據未被刪除。

的ListViewItem的接口:

enter image description here

謝謝你,如果你都可以幫助我。 :)

回答

2

應執行命令以對數據庫有任何影響。您需要在每個循環中添加此

cmd.ExecuteNonQuery() 

此外,連接可以在進入循環之前打開,之後應該關閉。 (這裏推薦使用聲明)

表示請參閱參數化查詢,因爲您的代碼對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文本框(?)始終是相同的,所以調用delete一次就足夠了,但我想這應該改變一些值由你當前ListViewItem提供

+0

ColumnRoomCode是列中有一個複選框,而不是文本框。我嘗試上面的代碼。但結果仍然相同。重新加載應用程序後,先前的數據刪除不會刪除數據庫中.tq – siyhaz

+0

那麼,您在哪裏將RoomCode傳遞給DELETE WHERE子句?您需要它才能刪除選中的行。 – Steve

+0

對不起,但我不明白你的意思 – siyhaz