2015-07-03 9 views
7

Użyłem Nuget zainstalować pakiet Sqlite rdzenia w moim C# projektu, używając:wydarzenie SqliteConnection nazwiska nie chce odpalić

>Install-Package System.Data.SQLite.Core 

utworzyć połączenie z bazą danych w następujący sposób:

var data = new SQLiteConnection(connectionString); 

Potem hak obsługa zdarzeń do zdarzenia aktualizacji, które jest uruchamiane za każdym razem, gdy występuje instrukcja aktualizująca (dla celów pola ostatniej daty zapisu dla określonego elementu logiki biznesowej)

data.Update += DataOnUpdate; 

To wszystko jest niesamowite. Jednak klasa SqliteConnection naraża również zdarzenie o nazwie nazwiska Dokumentacja mówi, że po tym wydarzeniu:

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

czytałem to oznaczać, że spełnia ona podobną funkcję w przypadku aktualizacji przy czym powinien on ogień ilekroć SQL instrukcja jest wykonywana.

JEDNAK

Kiedy hak to wydarzenie w następujący sposób:

data.Trace += DataOnTrace; 

To nigdy pożarów. Próbowałem SELECT, UPDATE, DELETE, CREATE TABLE, TRANSACTIONS i praktycznie każdy kawałek logiki Sql, że mogę myśleć i nie chce strzelać.

Co to za wydarzenie, jeśli nie ma ognia? lub czy jest coś, co muszę zrobić, aby połączenie mogło wystrzelić to wydarzenie?

Odpowiedz

8

Pobrałem pakiet System.Data.SQLite i napisałem następujący kod. Zdarzenie śledzenia wydaje się być dla mnie OK.

Biorąc pod uwagę SQLite bazę danych zawierającą tabelę o nazwie „TBL1” (schemat nieistotne)

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

Kluczową kwestią jest to, że trzeba zapisać się do wydarzenia _after_ nazywając Otwórz –

+0

Chciałbym naprawdę zachęcić @TimRobinson komentarz zostać włączone w zaktualizowanej odpowiedzi, ponieważ było to kluczowe dla mojego problemu. – killercowuk