2015-07-03 7 views
7

ich NuGet verwendet haben die SQLite-Core-Paket in mein C# Projekt zu installieren mit:SqliteConnection Trace Ereignis verweigert Feuer

>Install-Package System.Data.SQLite.Core 

ich eine Datenbankverbindung wie folgt erstellen:

var data = new SQLiteConnection(connectionString); 

ich dann Haken eine Ereignisbehandlungsroutine für das Update-Ereignis, die jedes Mal ausgelöst wird, wenn eine Aktualisierungsanweisung auftritt (zum Zweck eines letzten Schreibdatumsfelds für eine bestimmte Geschäftslogik)

data.Update += DataOnUpdate; 

Das ist alles super. Doch die SqliteConnection Klasse stellt auch ein Ereignis Trace Die Dokumentation sagt folgende über dieses Ereignis genannt:

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

ich diese Zeilen lesen bedeuten, dass es eine ähnliche Funktion wie das Update-Ereignis führt, wodurch es ausgelöst werden soll, wenn eine SQL Anweisung wird ausgeführt.

JEDOCH

Als ich dieses Ereignis Haken wie folgt:

data.Trace += DataOnTrace; 

Es wird nie ausgelöst. Ich habe versucht, SELECT, UPDATE, DELETE, CREATE TABLE, TRANSACTIONS und im Grunde jedes bisschen Sql-Logik, die ich mir vorstellen kann und es ablehnt zu feuern.

Was ist dieses Ereignis für, wenn nicht zu feuern? Oder muss ich etwas tun, um die Verbindung zum Auslösen dieses Ereignisses herzustellen?

Antwort

8

Ich habe das System.Data.SQLite-Paket heruntergeladen und den folgenden Code geschrieben. Das Trace-Ereignis scheint für mich OK zu sein.

eine SQLite-Datenbank eine Tabelle namens „tbl1“ (Schema unwichtig)

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

Der entscheidende Punkt Gegeben enthält, ist, dass Sie auf das Ereignis abonnieren haben _after_ öffnen –

+0

Aufruf würde ich wirklich @TimRobinson Kommentar fördern aufgenommen werden in einer aktualisierten Antwort, da dies der Schlüssel zu meinem Problem war. – killercowuk

Verwandte Themen