2012-09-26 2 views
0

내 C# 응용 프로그램에서 sqlite를 백엔드로 사용하고 있습니다. 간단한 삽입 쿼리를 수행하면 데이터베이스가 너무 오래 걸리고 메시지가 잠긴다. 서버에 내 애플리케이션을 배치하고 원격으로 작업을 수행한다. 내 코드가 도움이된다. C# 응용 프로그램을 사용하는 Sqlite 데이터베이스 잠금 오류

String sqlExpr = "INSERT INTO item (id, typeid, ownerid, created, modifiedby, modified,active,imageuploaded,logouploaded,language_item) VALUES (@Id,@type_TypeId ,@db_currentUser,@dates,@db_id ,@modified,@active_status,@image,@logo,@language)"; 

        //using (SQLiteCommand _insertItem = new SQLiteCommand()) 
        //{ 
        SQLiteCommand _insertItem = new SQLiteCommand(); 
         _insertItem.CommandText = sqlExpr; 
         _insertItem.Parameters.AddWithValue("@Id", Id); 
         _insertItem.Parameters.AddWithValue("@type_TypeId", type.TypeId); 
         _insertItem.Parameters.AddWithValue("@db_currentUser", db.currentUser.id); 
         _insertItem.Parameters.AddWithValue("@dates", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 
         _insertItem.Parameters.AddWithValue("@db_id", db.currentUser.id); 
         _insertItem.Parameters.AddWithValue("@modified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 
         _insertItem.Parameters.AddWithValue("@active_status", active_status); 
         _insertItem.Parameters.AddWithValue("@image", "false"); 
         _insertItem.Parameters.AddWithValue("@logo", "false"); 
         _insertItem.Parameters.AddWithValue("@language", language); 
         rowsAffected = db.ExecuteNonQuerySQL(_insertItem); 
         db.Close(); 


public int ExecuteNonQuerySQL(SQLiteCommand cmd) 
     { 
      int ireturn = 0; 

      if (conn.State != ConnectionState.Open)//the connection is individual for each session so no need of lock .added the code on 2011-11-08 by Sangeetha 
       Open(DataFile); 
      //SQLiteConnection C = new SQLiteConnection("Data Source=database.db;Version=3;New=False;Compress=True;"); 

      using (SQLiteTransaction dbtrans = conn.BeginTransaction(IsolationLevel.ReadCommitted)) 
      { 
       using (SQLiteCommand cmd1 = (SQLiteCommand)cmd.Clone()) 
       { 

        cmd.Dispose(); 
        cmd1.Connection = conn; 
        cmd1.Transaction = dbtrans; 
        ireturn = cmd1.ExecuteNonQuery(); 
        dbtrans.Commit(); 
        cmd1.Dispose(); 
       } 
      } 


      return ireturn; 
     } 

당신이 연결을 오픈하고 여전히 열려있어 어쩌면 전에

+0

정확히 어떤 오류 메시지 및 오류 코드입니까? –

+0

데이터베이스 파일이 잠겨 있습니다.이 오류는 내가 받고 있습니다 ... – user642378

+0

SQLcommand를 전달하고 복제하는 이유는 무엇입니까? 매번 처음부터 새로 만들지 않는 이유는 무엇입니까? 연결을 열어 두지 만 명령 – Phil

답변

0

감사드립니다. 모든 연결과 명령이 폐기되었는지 확인하고 (USING 문 사용) 함수를 종료하기 전에 모든 판독기를 닫습니다.

또는 'oledb'제공 업체 (MS ACCESS)

관련 문제