2013-08-25 1 views
0

오늘 또 다른 질문입니다. 이번에는 SQL Server CE 데이터베이스에서 행을 삭제하는 데 문제가 있습니다. SQL Server CE 데이터베이스에서 행을 삭제할 때 도움이 필요합니다.

private void Form1_Load(object sender, EventArgs e) 
{ 
     // Create a connection to the file datafile.sdf in the program folder 
     string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\userDtbs.sdf"; 
     SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile); 

     // Read all rows from the table test_table into a dataset (note, the adapter automatically opens the connection) 
     SqlCeDataAdapter adapter = new SqlCeDataAdapter("SELECT * FROM history", connection); 
     DataSet data = new DataSet(); 
     adapter.Fill(data); 

     //Delete from the database 
     using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE Id = 0", connection)) 
     { 
      com.ExecuteNonQuery(); 
     } 

     // Save data back to the databasefile 
     var cmd = new SqlCeCommandBuilder(adapter); 
     adapter.Update(data); 

     // Close 
     connection.Close(); 
} 

내 프로그램의 나에게 connection가 닫힌 상태에 있고, 나는 DELETE 명령이 실행되기 전에 닫습니다 왜 알아낼 수 없음을 말해 오류를 제공합니다.

답변

2

참고 : Command.ExecuteXXX()으로 명령을 실행하려면 먼저 연결을 열어야합니다. SqlDataAdapter.Fill을 사용하여 DataSet에 데이터를 채우는 것은 내부적으로 처리하기 때문에 필요하지 않습니다. 이 방법으로 SQL query을 실행하는 것은 직접적이며 adapter에 대한 Update 메서드 호출이 필요하지 않습니다 (삭제 후 코드에 추가 할 때). UpdateDataSet에서 변경된 내용을 저장하기위한 것입니다.

//Delete from the database 
    using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE Id = 0", connection)) 
    { 
     if(connection.State == ConnectionState.Closed) connection.Open(); 
     com.ExecuteNonQuery(); 
    }