2014-06-12 21 views
12

Tôi đang cố tạo một sqlite db theo lập trình nếu nó không tồn tại. Tôi đã viết đoạn mã sau nhưng tôi nhận được một ngoại lệ ở dòng cuối cùng.Lập trình tạo sqlite db nếu nó không tồn tại?

if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
{ 
    Console.WriteLine("Just entered to create Sync DB"); 
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 
    string sql = "create table highscores (name varchar(20), score int)"; 
    SQLiteCommand command = new SQLiteCommand(sql, sqlite2); 
    command.ExecuteNonQuery(); 
} 
sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 

Tôi nhận ngoại lệ tại dòng command.ExecuteNonQuery(); Ngoại lệ là Invalid operation exception was unhandled. Có cách nào khác để thêm một tập tin sqlite vào dự án của bạn? Tôi có thể làm điều đó theo cách thủ công không? Nếu không thì làm thế nào tôi có thể giải quyết vấn đề trên?

+2

Giá trị của 'sqlite2' tại thời điểm đó là gì? –

+0

giá trị của nó là null – zzzzz

Trả lời

22

Để thực thi bất kỳ loại lệnh xác định dữ liệu nào trên cơ sở dữ liệu, bạn cần kết nối mở để chuyển lệnh. Trong mã của bạn, bạn tạo kết nối SAU KHI thực hiện truy vấn.

Tất nhiên, sau khi tạo đó, bạn cần phải mở kết nối

if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
{ 
    Console.WriteLine("Just entered to create Sync DB"); 
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 

    using(sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
    { 
     sqlite2.Open(); 
     string sql = "create table highscores (name varchar(20), score int)"; 
     SQLiteCommand command = new SQLiteCommand(sql, sqlite2); 
     command.ExecuteNonQuery(); 
    } 
} 

Tuy nhiên, nếu bạn sử dụng phiên bản 3 của nhà cung cấp, bạn không cần phải kiểm tra sự tồn tại của tập tin. Chỉ cần mở kết nối sẽ tạo tệp nếu nó không tồn tại.

+0

Bây giờ Iam nhận được ngoại lệ này "Unable to load DLL 'SQLite.Interop.dll': Các module quy định không thể tìm được (ngoại lệ từ HRESULT: 0x8007007E)." Ở dòng nơi tôi mở kết nối – zzzzz

+0

Hope điều này giúp http://stackoverflow.com/questions/13028069/unable-to-load-dll-sqlite-interop-dll – Steve

+0

Tôi vẫn nhận được lỗi tương tự – zzzzz

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