2008-08-25 76 views
37

Tôi đã làm điều này trước đây trong C++ bằng cách bao gồm sqlite.h nhưng có cách tương tự dễ dàng trong C# không?Cách tốt nhất để kết nối và sử dụng cơ sở dữ liệu sqlite từ C#

+3

Đây là bản sao của câu hỏi này: http://stackoverflow.com/questions/93654/is-there-a-netc-wrapper-for-sqlite và có câu trả lời khác. –

+0

Bản sao có thể có của [Có một trình bao bọc .NET/C# cho SQLite không?] (Https://stackoverflow.com/questions/93654/is-there-a-net-c-wrapper-for-sqlite) – Flimzy

Trả lời

12

Tôi đã sử dụng điều này với thành công rực rỡ:

http://system.data.sqlite.org/

miễn phí không có giới hạn.

(Lưu ý từ xem xét lại: trang web gốc không còn tồn tại Liên kết ở trên có một liên kết trỏ các trang 404 và có tất cả các thông tin của bản gốc.)

--Bruce

60

Tôi đồng ý, Bruce. Tôi đang sử dụng http://system.data.sqlite.org/ với thành công lớn. Dưới đây là một ví dụ đơn giản mà tôi đã tạo:

using System; 
using System.Text; 
using System.Data; 
using System.Data.SQLite; 

namespace MySqlLite 
{ 
     class DataClass 
     { 
     private SQLiteConnection sqlite; 

     public DataClass() 
     { 
       //This part killed me in the beginning. I was specifying "DataSource" 
       //instead of "Data Source" 
       sqlite = new SQLiteConnection("Data Source=/path/to/file.db"); 

     } 

     public DataTable selectQuery(string query) 
     { 
       SQLiteDataAdapter ad; 
       DataTable dt = new DataTable(); 

       try 
       { 
        SQLiteCommand cmd; 
        sqlite.Open(); //Initiate connection to the db 
        cmd = sqlite.CreateCommand(); 
        cmd.CommandText = query; //set the passed query 
        ad = new SQLiteDataAdapter(cmd); 
        ad.Fill(dt); //fill the datasource 
       } 
       catch(SQLiteException ex) 
       { 
        //Add your exception code here. 
       } 
       sqlite.Close(); 
       return dt; 
    } 
} 

Ngoài ra còn có NuGet package: System.Data.SQLite.

+1

"Nguồn dữ liệu =/path/to/file.db; New = False; " *** nếu bạn không muốn mất tất cả dữ liệu và bảng của bạn mỗi lần ***. – Fil

+0

không hoạt động trong VS 2017.Nó cho thấy lỗi sau: Ngoại lệ không đúng: System.BadImageFormatException: Không thể tải tệp hoặc lắp ráp 'System.Data.SQLite, Version = 1.0.79.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139'. Một nỗ lực đã được thực hiện để tải một chương trình với một định dạng không chính xác. tại ConsoleApp1_del2.Program.Main (String [] args) –

1

Mono đi kèm với trình bao bọc, sử dụng thẻ của họ!

https://github.com/mono/mono/tree/master/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0 cung cấp mã để bọc tệp SQLite thực tế (http://www.sqlite.org/sqlite-shell-win32-x86-3071300.zip được tìm thấy trên trang tải xuống http://www.sqlite.org/download.html/) theo cách thân thiện .net. Nó hoạt động trên Linux hoặc Windows.

Điều này có vẻ mỏng nhất trong tất cả các thế giới, giảm thiểu sự phụ thuộc của bạn vào thư viện của bên thứ ba. Nếu tôi phải làm dự án này từ đầu, đây là cách tôi sẽ làm.

3

Một cách khác để sử dụng cơ sở dữ liệu SQLite trong NET Framework là sử dụng Fluent-NHibernate.
[Đây là mô-đun NET kết thúc tốt đẹp xung quanh NHibernate (mô-đun ORM - Ánh xạ quan hệ đối tượng) và cho phép cấu hình NHibernate lập trình (không có tệp XML) với mẫu thông thạo.]

Đây là mô tả ngắn gọn 'Bắt ​​đầu' để làm điều này trong C# từng bước:

https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started

Nó bao gồm một mã nguồn như một dự án Visual Studio.

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