2015-07-03 4 views
7

Я использовал NuGet для установки пакета Sqlite Core, в моей C# проекта с помощью:SqliteConnection трассировки событий отказывается стрелять

>Install-Package System.Data.SQLite.Core 

создать соединение с базой данных следующим образом:

var data = new SQLiteConnection(connectionString); 

Я тогда крюк обработчик события события обновления, который запускается каждый раз, когда выполняется инструкция обновления (для целей последнего поля даты записи для определенной части бизнес-логики)

data.Update += DataOnUpdate; 

Это все замечательно. Однако класс SqliteConnection также предоставляет мероприятие под названием Трассировка документации говорит следующее об этом событии:

"This event is raised whenever SQLite Statement First begins executing on this connection. It only applies for the given connection" 

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

ОДНАКО

Когда я подключить это событие следующим образом:

data.Trace += DataOnTrace; 

Он никогда не стреляет. Я пробовал SELECT, UPDATE, DELETE, CREATE TABLE, TRANSACTIONS и в основном каждый бит логики Sql, о котором я могу думать, и он отказывается стрелять.

Что это за событие, если не стрелять? или есть что-то, что мне нужно сделать, чтобы подключиться к этому событию?

ответ

8

Я загрузил пакет System.Data.SQLite и написал следующий код. Событие трассировки, похоже, срабатывает для меня.

Учитывая SQLite базу данных, содержащую таблицу с именем «tbl1» (схема неважным)

static void Main(string[] args) 
    { 

     using (SQLiteConnection conn = new SQLiteConnection(@"Data Source=C:\dev\Sandbox\Sandbox.Console\test.db;Version=3;")) 
     { 
      conn.Open(); 
      conn.Trace += conn_Trace; 

      using(SQLiteCommand cmd = new SQLiteCommand("Select * from tbl1", conn)) 
      { 
       using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd)) 
       { 
        DataSet ds = new DataSet(); 
        da.Fill(ds); 

       } 
      } 

      conn.Trace -= conn_Trace; 
      conn.Close(); 
     } 
    } 

    static void conn_Trace(object sender, TraceEventArgs e) 
    { 
     System.Console.WriteLine(e.Statement); 
    } 
+2

Ключевым моментом является то, что вы должны подписаться на событие _после_ вызова Open –

+0

Я действительно поощрять @TimRobinson комментарий будет включен в обновленном ответе, поскольку это было ключом к моей проблеме. – killercowuk

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