2011-11-02 2 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

어쩌면 "userID"대신 "id"를 넣어야합니까? – 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(); 
       } 

물론,이 오류가 발생하지만 적어도 당신은 알고 있어야합니다 :

또한, 따라서 코드 포맷을 시도 할 수 있습니다.

관련 문제