2013-03-31 12 views
5

Mam 2 Część pytanie tutajC# SQLite Connection String Format

1) Pobrałem SQLite stąd: SQLite Website i .NET 4.5 nie było "mieszane" wersja tryb i "tryb non-mieszanym" wersja . Skąd mam wiedzieć, który powinienem użyć?

Po wykonaniu połączenia używam następujące polecenia:

sqlite_conn = new SQLiteConnection ("Data Source = db.db; Version = 3; New = True; Compress = true;");

2) Zakładam, że "Wersja = 3" reprezentuje wersję używanego SQLite. Więc jeśli pobrać z powyższego linku wersja mówi Pakiet System.Data.SQLite 1.0.84.0 (3.7.15.2), to czy powinienem zmienić wersję = 3 na wersję = 3.7.15.2?

Odpowiedz

11
  1. Powinieneś wybrać mieszany.
  2. 1.0.84.0 to najnowsza wersja dostępna dla SQLite DLL. Stworzyłem aplikację z SQLite też w c#, moje połączenie ciąg wygląda jak następuje:

    sqlite_conn = new SQLiteConnection("Data Source=C:\SQLITEDATABASES\SQLITEDB1.sqlite;Version=3;"); 
    

wersji używasz, jest SQLite wersja 3, DLL jest po prostu inna wersja , ale działa z SQLite w wersji 3.

1

SQLite jest napisane w C++. W przypadku systemu Windows jest on dystrybuowany jako skompilowana 32-bitowa (x86) .dll. Nie można z niego korzystać bezpośrednio, ponieważ jest to kod natywny, a programy .NET zazwyczaj nie lubią interakcji z natywnym kodem. Można to zrobić za pomocą czegoś, co nazywa się COM Interop, ale w moich rękach nie jest to łatwe ani ładne.

W swoje pytanie odwołujesz się do strony pobierania dla System.Data.SQLite. Jest to nieco inna implementacja niż zwykły stary SQLite. To wymaga C++ SQLite i opakowuje go z kodem .NET - pozwalając na użycie natywnego kodu C++ przez programy .NET (hooray, ktoś inny wykonał pracę).

Gdy zarówno kod natywny (C++ SQLite), jak i kod .NET (funkcje opakowania) są ze sobą połączone w jednym zestawie, nazywa się to złożeniem mieszanym i początkowo sensownie było umieścić wszystko w jednym pliku. Jeśli pracujesz nad rozwojem lub używasz SQLite na własnej maszynie, to używanie trybu mieszanego jest w porządku.

Jednak rzeczy zmieniły się w 64-bitowym systemie Windows, jeśli chcesz dystrybuować aplikację do klientów. Dzieje się tak, ponieważ zespoły w trybie mieszanym działają tylko na architekturze, dla której zostały skompilowane (białe kłamstwo, ale prawdziwe dla tej odpowiedzi). Począwszy od wersji 1.0.80.0 System.Data.SQLite, zdecydowanie zaleca się rozpowszechnianie: 1.) Wszystkie .NET .dll System.Data.SQLite.dll, które mogą działać na architekturach 32-bitowych lub 64-bitowych) I 2) 32 x 86-bitowy dll \ SQLite.Interop.dll I 3. 64 64 nieco dll \ SQLite.Interop.dll

all NET owijka (pozycja 1) dane z w której architekturze jest uruchomiona i wybiera odpowiednio 32-bitowy lub 64-bitowy plik dll.

Wszystko to jest opisane w System.Data.Strona pobierania SQLite, do której się odwołujesz, ale uznałam, że jest to mylące, dlatego oferuję moje podsumowanie.

Rozbieżność wersji w pytaniu wynika również z różnicy między SQLite i System.Data.SQLite.

+0

[link] (http://stackoverflow.com/questions/93654/ is-there-a-net-c -wrapper-for-sqlite? rq = 1) – VictorEE

+0

System.Data.SQLite jest również implementacją ADO.NET, ale nie wspomniałem o tym aspekcie, ponieważ nie jest on związany z twoim pytaniem. Zobacz [C# wrapper for SQLite] (http://stackoverflow.com/questions/93654/is-there-a-net-c-wrapper-for-sqlite?rq=1) – VictorEE

1

Oto inny rodzaj SQLite ciąg połączenia

Podstawowe

Data Source=c:\mydb.db;Version=3;

wersja 2 nie jest obsługiwane przez tę bibliotekę klas.

w pamięci bazy danych w bazie SQLite jest zazwyczaj przechowywany na dysku, ale baza danych może być również przechowywane w pamięci.

Data Source=:memory:;Version=3;New=True;

Korzystanie UTF16

Data Source=c:\mydb.db;Version=3;UseUTF16Encoding=True;

Z hasłem

Data Source=c:\mydb.db;Version=3;Password=myPassword;