SQLite i ADO .NET

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.

image 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.

image

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?

Tagi: ,

Comments

trackback
dotnetomaniak.pl
11/28/2009 9:41:38 AM Permalink

SQLite i ADO .NET | Eastgroup.pl

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

Maciej Aniserowicz
Maciej Aniserowicz Poland
11/28/2009 10:35:46 AM Permalink

Warto też podkreślić możliwość tworzenia bazy SQLite w pamięci, bez zapisu pliku na dysk. Daje to wspaniałą możliwość przeprowadzania testów jednostkowych warstwy dostępu do danych, gdzie każdy test otrzymuje własną, czystą instancję bazy - i działa to o wiele szybciej niż jakakolwiek alternatywa.

Sebastian
Sebastian Poland
11/29/2009 11:38:48 AM Permalink

@Maciej bardzo ciekawy sposob, nigdy o tym nie pomyslalem, dzieki

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading