2013-12-18 4 views
0

Я пробовал все, но всегда, он возвращает мне System.NullreferencesException в "com.Transaction = trx;"Исключение в транзакции sqlite C#

public override int ExecuteNonQuery(string query) 
    { 

     int register=0; 
     SQLiteTransaction trx=null; 
     SQLiteCommand com; 
     try 
     { 
      if (this.IsClosed()) this.Open(); 

       trx = con.BeginTransaction(); 
       com = new SQLiteCommand(query, con); 
       com.Transaction = trx; 
       register = com.ExecuteNonQuery(); 
       trx.Commit(); 

      return register; 
     } 
     catch (SQLiteException ex) 
     { 
      trx.Rollback();//se tiene q deshaser toda la trransaccion hecha 
      throw ex; 
     } 

     finally 
     { 
      this.Close(); 
     } 

    } 

я не выяснить, где моя ошибка :(

здесь является исключением, что бросает меня в transaction

Update:

Вот являются Exception Detalis

+1

Это сокращенная версия? Потому что вам не нужна явная транзакция за то, что вы отправили. –

+0

Странно, что вы получаете исключение из этого «com.Transaction = trx;» линия. Можете ли вы опубликовать полную трассировку стека? – kaptan

+0

Я просто загружаю исключение, да, я не знаю, почему транзакция равна null :( –

ответ

0

я исправить это, проблема была с транзакцией, я думаю, что SQLite не поддерживает, что я заметил это и все работает как шарм.

public override int ExecuteNonQuery(string query) 
    { 

     int register=0; 
     //SQLiteTransaction trx=null; 
     SQLiteCommand com; 
     try 
     { 
      if (con.State == ConnectionState.Closed) this.Open(); 

       //trx = con.BeginTransaction();//para hacer transaciones para que la base de datos este estable 
       com = new SQLiteCommand(query, con); 
       //com.Transaction = trx; 
       register = com.ExecuteNonQuery();//recien hacemos la coneccion en esta linea 
       // trx.Commit(); 

      return register; 
     } 
     catch (SQLiteException ex) 
     { 
      // trx.Rollback();//se tiene q deshaser toda la trransaccion hecha 
      throw ex; 
     } 

     finally 
     { 
      this.Close(); 
     } 

    } 
0

Попробуйте заменить эти строки

if (this.IsClosed()) 
     this.Open(); 

с

if (con.State == ConnectionState.Closed) 
    con.Open(); 
+0

Я просто сделал это и продолжаю бросать меня System.NullreferencesException в «com.Transaction = trx;» :( –

+0

Действительно эта проблема кажется странной. Я смотрел на исходную треску e свойства Transaction SQLiteCommand, и нет ничего, что выдает исключение NRE при попытке присвоить значение, если это значение равно null. – Steve

+0

Значение «trx» с открытым коннексом и не равно нулю –

Смежные вопросы