Chciałbym przedstawić wykorzystanie SQLite w połączeniu z ADO.NET przy wykorzystaniu C#.
Wymaga to jednak pewnego uzupełnienia.
SQLite
SQLite jest biblioteką napisaną w języku C, która implementuje silnik relacyjnej bazy danych. Jak głosi główne hasło projektu jest ona “prosta, szybka, niezawodna”. Cała baza znajduje się w pojedynczym pliku, a w przeciwieństwie do innych systemów baz danych, nie występuje tu żaden demon nią zarządzający.
Inne cechy warte wymienienia:
- Mały rozmiar biblioteki (ok. 0.5MB),
- ACID
- Nie wymaga żadnej konfiguracji,
- Obsługa baz do 2TB.
Kody źródłowe udostępnione są jako domena publiczna (ang. public domain), przez co dostępne dla wszystkich i do dowolnych zastosować – także komercyjnych. Ze względu na brak ograniczeń wykorzystują ją m.in.: Mozilla, Google, Adobe, Apple, Symbian. Wbudowana jest także w interpretery języków PHP i Python.
Jeśli chcemy rozpocząć przygodę najłatwiej jest pobrać konsolowy program sqlite3 (np. sqlite-3_6_17.zip), a następnie dodać go do systemowej zmiennej PATH.
Wygodniejszym rozwiązaniem może okazać się skorzystanie z któregoś z dostępnych menedżerów:
Dzięki prostemu, łatwemu do wykorzystania API powstało wiele nakładek, które pozwalają na dostęp do danych z innych języków programowania, niż standardowy C.
SQLite ADO.NET 2.0/3.5 Provider
System.Data.SQLite jest silnikiem relacyjnej bazy danych SQLite wraz z dostawcą danych (Data Provider) dla ADO.NET. Wszystko udostępniane jest jako pojedynczy. Wszystko udostępniane jest jako pojedyncze assembly. To, co wyróżnia podaną bibliotekę, to:
- Dostępność na zasadach public domain,
- Całkowita implementacja ADO.NET 2.0,
- Wsparcie dla wersji Full i Compact .NET Framework,
- Wsparcie dla C/C++,
- Wsparcie dla Mono,
- ADO.NET 3.5 Entity Framework,
- Integracja z Visual Studio 2005/2008.
Po zainstalowaniu biblioteki tworzymy konsolowy projekt (File > New > Project… > Console Application). Następnie dodajemy referencję do System.Data.SQLite (Add Reference… > Zakładka .NET), oraz odpowiednią dyrektywę using, do naszego kodu:
1: using System.Data.SQLite;
Poniższy kod ilustruje podstawowe operacje na bazie:
1: // Utworzenie połączenia z bazą. Jeżeli nie istnieje - utworzona zostanie nowa.
2: var conn = new SQLiteConnection("Data Source = test.db;");
3: conn.Open();
4:
5: // Utworzenie tabeli
6: using(var command = conn.CreateCommand()){
7: command.CommandText = "CREATE TABLE tbl (id integer primary key, col1 int, col2 string)";
8: command.ExecuteNonQuery();
9: }
10:
11: // Wstawienie danych
12: using(var command = conn.CreateCommand()){
13: command.CommandText = "INSERT INTO tbl (col1, col2) Values('1', 'eastgroup.pl')";
14: command.ExecuteNonQuery();
15: }
16:
17: int col1;
18: string col2;
19:
20: // Odczyt danych
21: using(var command = conn.CreateCommand()){
22: command.CommandText = "SELECT * FROM tbl";
23:
24: var reader = command.ExecuteReader();
25: reader.Read();
26:
27: col1 = (int)reader["col1"]; // 1
28: col2 = (string)reader["col2"]; // eastgroup.pl
29: }
30:
31: // Zamykamy połączenie
32: conn.Close();
33:
34: Console.WriteLine("{0} to nr {1}!", col2, col1);
35: Console.ReadKey();
Nie jest to jedyna metoda dostępu. Kolejne przykłady będą wymagały jednak bazy northwindEF.db, która znajduje się w plikach źródłowych naszego providera. Aby ją zdobyć należy przejść na stronę System.Data.SQLite na sourceforge i pobrać plik SQLite-*-source.zip (np. SQLite-1.0.65.0-source.zip). Baza znajduje się w katalogu testlinq. Warto otworzyć plik solucji i przejrzeć jej projekty – znajduje się tu sporo ciekawego kodu.
W pliku SQLite_Eastgroup.pl.zip (126,45 kb) zamieściłem dwa przykłady – jeden pokazuje jak korzystać z LINQ, drugi wyświetla dane jednej z tabel za pomocą kontrolki DataGridView. Oba projekty szukają pliku bazy danych w “D:\northwindEF.db”. Jeżeli chcemy to zmienić musimy wyedytować plik App.Config.

Podsumowanie
SQLite jest wspaniałym narzędziem. System.Data.SQLite ułatwia wykorzystanie bazy danych z wykorzystaniem .NET Framework. Oto kilka sytuacji, kiedy SQLite sprawdza się najlepiej:
- Gotowy standard zapisu, format plików dla aplikacji,
- Urządzenia i aplikacje wbudowane,
- Strony internetowe (do ok. 100K odwiedzin dziennie),
- Wewnętrzne lub tymczasowe bazy,
- Analiza z wiersza poleceń,
- Dema i testowanie,
- Edukacja,
- Nauka pisania rozszerzeń.
A jakie są Wasze doświadczenia z SQLite?