2011-01-22 48 views
6

Tôi muốn đọc thông tin về bảng và cột trong ứng dụng C# .NET Windows. Tôi biết rằng có quyền truy cập cơ sở SMO cho SQL Server. Trên nền tảng tương tự thì có API nào cho SQLite không?Đọc thông tin bảng SQLite trong C# .NET

+0

Bạn đang tìm kiếm này? http://stackoverflow.com/questions/93654/is-there-a-net-c-wrapper-for-sqlite –

+0

@ Martin Buberl, đó không phải là cùng một câu hỏi ... OP không tìm kiếm nhà cung cấp ADO.NET , anh ta hỏi làm thế nào để truy cập siêu dữ liệu cơ sở dữ liệu –

Trả lời

16

Bạn có thể sử dụng phương pháp GetSchema:

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SQLite"); 
using (DbConnection connection = factory.CreateConnection()) 
{ 
    connection.ConnectionString = @"Data Source=D:\tmp\test.db"; 
    connection.Open(); 
    DataTable tables = connection.GetSchema("Tables"); 
    DataTable columns = connection.GetSchema("Columns"); 
    tables.Dump(); 
    columns.Dump(); 
} 

GetSchema trả về một DataTable có chứa thông tin về các bảng, cột, hoặc bất cứ điều gì bạn chỉ định. Hợp lệ GetSchema lập luận cho SQLite bao gồm:

  • MetaDataCollections
  • DataSourceInformation
  • kiểu dữ liệu
  • ReservedWords
  • Catalogs
  • Cột
  • Chỉ số
  • IndexColumns
  • Bàn
  • Lần
  • ViewColumns
  • ForeignKeys
  • Triggers
+3

Theo [bài đăng stackoverflow này] [1], getSchema không hoạt động cho SQLite. Tôi đã có cùng một vấn đề và hiện đang sử dụng "SQLiteCommand (" PRAGMA table_info ('tracks') ", DB)" [1]: http://stackoverflow.com/questions/3268986/getting-table-schema- không-dường như-to-làm việc-với-hệ thống-dữ liệu-sqlite –

+0

@ RU-Bn, tôi chỉ cố gắng một lần nữa, nó hoạt động tốt (ít nhất là với các nhà cung cấp System.Data.SQLite chính thức) –

+0

Thx @Thomas nhưng tôi đoán nó cụ thể đối với một số cấu hình (cứng hoặc mềm) mà một số người trong chúng ta có. (Sử dụng nhà cung cấp phiên bản 1.0.65) Và tôi cũng đề cập đến nó như là một bước nhảy lùi/nhanh cho những người dùng tương lai có cùng vấn đề. (Không có discredit có nghĩa là ;-)) –