2011-11-02 39 views
0

我試圖從數據庫和DataGridView中刪除選定的行。行不從數據庫中刪除。 DataGridView&SQLCE

下面的代碼似乎工作,因爲如果我啓動程序並刪除它從數據網格中刪除行。如果我重新加載程序,它仍然從數據網格中刪除。但是,如果我使用數據庫瀏覽器查看錶,該行仍然存在。如果我刷新表格並重新加載程序,則顯示已刪除的行。

任何想法爲什麼會發生這種情況?

private void button1_Click(object sender, EventArgs e) 
    { 

     Int32 selectedRowCount = dataAccounts.Rows.GetRowCount(DataGridViewElementStates.Selected); 

     if (selectedRowCount > 0) 
     { 
      using (SqlCeConnection c = new SqlCeConnection(Properties.Settings.Default.snogAccountsConnectionString)) 
      { 
       c.Open(); 

       for (int i = 0; i < selectedRowCount; i++) 
       { 
        using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE id = (@id)", c)) 
        { 
         com.Parameters.AddWithValue("@id", dataAccounts.SelectedRows[i].Cells["userID"].Value); 
         com.ExecuteNonQuery(); 
        } 
        dataAccounts.Rows.RemoveAt(i); 
       } 
      } 
     } 
     else 
     { 
      MessageBox.Show("Select some rows to delete."); 
     } 
    } 
+0

也許你應該把「id」而不是「userID」? – neeKo

+0

您是否檢查記錄是否從數據庫中刪除? –

+0

@NikoDrašković列名是'userID' –

回答

1

您是否在您的主鍵字段中使用了BIGINT。我有一張使用BIGINT作爲主鍵的表,並且發生了各種各樣的奇怪事情。

您不能只使用SQL Management Studio GUI編輯表工具進行更新。它總是抱怨,並且不斷地必須使用CAST語句來告訴系統它是什麼樣的數據,儘管當你這樣做時它告訴你這可能是不必要的。 BIGINT的原因有很多記錄在案的問題。

我可以在此表中更新記錄的唯一方法是使用更新T-SQL語句。

您也可以嘗試這樣格式化代碼:

   using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE id ="+ dataAccounts.SelectedRows[i].Cells["userID"].Value.ToString(), c)) 
       { 
        com.ExecuteNonQuery(); 
       } 

當然,如果錯誤類型的數據的傳遞,這將拋出一個錯誤,但至少你應該知道,然後。