2015-07-03 19 views
7

Tôi đã sử dụng NuGet để cài đặt các gói Sqlite Lõi vào # dự án c của tôi sử dụng:kiện SqliteConnection vết từ chối bắn

>Install-Package System.Data.SQLite.Core 

tôi tạo ra một kết nối cơ sở dữ liệu như sau:

var data = new SQLiteConnection(connectionString); 

sau đó tôi móc một trình xử lý sự kiện cho sự kiện cập nhật kích hoạt mỗi khi có một câu lệnh cập nhật (cho mục đích của trường ghi ngày cuối cùng cho một đoạn logic nghiệp vụ cụ thể)

data.Update += DataOnUpdate; 

Điều này thật tuyệt vời. Tuy nhiên lớp SqliteConnection cũng cho thấy một sự kiện được gọi là vết Các tài liệu nói như sau về sự kiện này:

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

tôi đọc này có nghĩa là nó thực hiện một chức năng tương tự như sự kiện Cập nhật theo đó nó sẽ bắn bất cứ khi nào một SQL tuyên bố đang được thực hiện.

TUY NHIÊN

Khi tôi treo sự kiện này như sau:

data.Trace += DataOnTrace; 

Nó không bao giờ cháy. Tôi đã thử SELECT, UPDATE, DELETE, TẠO TABLE, GIAO DỊCH và về cơ bản mỗi bit của logic Sql mà tôi có thể nghĩ đến và nó từ chối bắn.

Sự kiện này có gì nếu không kích hoạt? hoặc có điều gì tôi cần làm để có kết nối để kích hoạt sự kiện này không?

Trả lời

8

Tôi đã tải xuống gói System.Data.SQLite và đã viết mã sau đây. Các sự kiện theo dõi dường như cháy OK cho tôi.

Cho một cơ sở dữ liệu SQLite chứa một bảng gọi là "tbl1" (schema không quan trọng)

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

Điểm mấu chốt là bạn phải đăng ký sự kiện _after_ gọi mở –

+0

tôi thực sự sẽ khuyến khích @TimRobinson bình luận được đưa trong một câu trả lời cập nhật vì đây là chìa khóa cho vấn đề của tôi. – killercowuk

Các vấn đề liên quan