2009-10-09 14 views
5

Byłoby wspaniale, gdyby spróbowałem użyć sqlite do mojej aplikacji WinForms, którą buduję w VS2008.Korzystanie z SQLite z aplikacją C# winforms - kilka podstawowych pytań?

  1. Instalacja - jest to po prostu upuść „System.Data.SQLite.DLL” plik do jakiegoś folderu w moim projekcie VS2008 (np utworzyć folder dla niego), a następnie utworzyć „odniesienie” do niego? Zrobiłem właściwość odwołania CopyGlobal = TRUE. Czy pomysł, że podczas wdrażania mojej aplikacji to powinno działać (np. Wdrożyć DLL dla aplikacji)?

  2. Początkowa baza danych - Czy muszę utworzyć wstępną bazę danych, czy nie? Widzę poniższy kod w pliku pomocy, ale czym jest DB, do którego faktycznie się łączy i gdzie powinien znajdować się plik DB?

    DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite"); 
    using (DbConnection cnn = fact.CreateConnection()) 
    { 
        cnn.ConnectionString = "Data Source=test.db3"; 
        cnn.Open(); 
    } 
    
  3. Jakie metody należy użyć - Czy to zazwyczaj używam/wykonuję połączenia?

    DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite"); 
    using (DbConnection myconnection = fact.CreateConnection()) 
    { 
        myconnection.ConnectionString = "Data Source=test.db3"; 
        myconnection.Open(); 
        SQLiteTransaction mytransaction = SQLiteTransaction)myconnection.BeginTransaction(); 
        SQLiteCommand mycommand = new SQLiteCommand((SQLiteConnection)myconnection); 
        mycommand.CommandText = "SELECT * FROM SYSTEM"; 
        mycommand.ExecuteNonQuery(); 
        mytransaction.Commit(); 
        myconnection.Close(); 
    } 
    
  4. Jak skonfigurować tabele bazy danych? Czy zrobiłbym to i zapisałem w moim projekcie VS2008 jako szablon? A może chciałbym automatycznie utworzyć bazę danych w kodzie, jeśli jej tam nie było?

  5. Jeśli pomysł z 4 polega na wcześniejszej konfiguracji tabel, gdzie powinienem przechowywać ten początkowy plik bazy danych? tak, że gdy uruchomię projekt, aby przetestować go, a następnie używam pliku bazy danych, ten, który testuję, zostanie później złomowany. Chyba pytam, jak zapewnić, że mam oddzielną pustą, ale skonfigurowaną (z tabelami) bazę danych jako "źródło" w moim projekcie VS2008, ale wtedy kiedy uruchomię/debuguję, potrzebowałbym kopii tego do użycia w testowaniu ?

Dzięki

+0

uwaga pewien dlaczego - ale nie można uzyskać kod Q3 do wyświetlania ładnie – Greg

Odpowiedz

4
  1. Tak. SQLite jest bazą danych wdrażania xcopy; nie ma rejestracji, a twoja aplikacja potrzebuje tylko biblioteki dll, aby z niej skorzystać.

  2. Baza danych jest określona w ciągu połączenia. W tym konkretnym przypadku znajduje się on w pliku test.db3 w folderze roboczym aplikacji.

  3. Możesz chcieć buforować połączenie z bazą danych, aby uniknąć kosztownej operacji otwierania go za każdym razem, gdy potrzebujesz do niego dostępu. Ponadto, nie jestem pewien, dlaczego potrzebujesz transakcji, ponieważ wszystko, co robisz, to po prostu odczytanie z bazy danych.

  4. Masz dwie możliwości - albo zapisz pustą bazę danych z wcześniej utworzonym schematem i skopiuj go do wyjściowego katalogu podczas procesu kompilacji; lub utwórz zestaw skryptów SQL do wykonania w bazie danych z twojego kodu przy pierwszym połączeniu z bazą danych. Wybór zależy od tego, czy aplikacja ma być odpowiedzialna za stworzenie schematu czy procesu kompilacji.

  5. Jeśli utworzysz pustą bazę danych ze wstępnie utworzonym schematem, możesz dodać ją jako plik wzdłuż źródeł i poinstruować VS, aby skopiował go do katalogu wyjściowego (jak już wspomniałem).

+0

Thansk Franci - czy jesteś w stanie dać mi szybki wskaźnik do miejsca, gdzie w VS2008 chciałbym zorganizować „pouczać VS skopiuj go do katalogu wyjściowego "? – Greg

+1

W VS2005 możesz to zrobić, wybierając plik w "Eksploratorze rozwiązań" iw "Właściwościach" zmieniając właściwość "Kopiuj na katalog wyjściowy" na "Kopiuj zawsze" lub "Kopiuj, jeśli jest nowsza". W VS2008 powinno być to samo. – Agg

+0

Tak, jak powiedział @Agg, robisz to poprzez właściwości pliku w eksploratorze rozwiązań. –

2

I prawie zawsze używać stosując tak:

using (DbConnection conn = new SQLiteConnection(...)) { 
    using (DbTransaction tran = conn.BeginTransaction()) { 
     using (DbCommand comm = conn.CreateCommand()) { 
      ... 
     } 
     tran.Commit(); 
    } 
    conn.Close(); 
} 

Aby wykonać SQLite trzeba użyć transakcji dla wstawiania, aktualizacji i usuwania i trzeba użyć paramaterized zapytań. Łączone zapytania są dużo wolniejsze: How do I get around the "'" problem in sqlite and c#?

Powiązane problemy