Utwórz bazę danych i tabelę SQLite [zamknięte]

150

W kodzie aplikacji C # chciałbym utworzyć jedną lub więcej baz danych SQLite, a następnie współdziałać z nimi.

Jak zainicjować nowy plik bazy danych SQLite i otworzyć go do odczytu i zapisu?

Po utworzeniu bazy danych, jak wykonać instrukcję DDL w celu utworzenia tabeli?

Dzwoneczek
źródło

Odpowiedzi:

290

Następny link prowadzi do świetnego samouczka, który bardzo mi pomógł!

Jak SQLITE w C #

Prawie wykorzystałem wszystko z tego artykułu do stworzenia bazy danych SQLite dla mojej własnej aplikacji C #.

Nie zapomnij pobrać pliku SQLite.dll i dodać go jako odniesienie do swojego projektu. Można to zrobić za pomocą NuGet i ręcznie dodając bibliotekę dll.

Po dodaniu odwołania odwołaj się do biblioteki dll z kodu, używając następującego wiersza na górze klasy:

using System.Data.SQLite;

Bibliotekę dll można znaleźć tutaj:

Biblioteki DLL SQLite

Możesz znaleźć sposób NuGet tutaj:

NuGet

Następny jest skrypt tworzenia. Tworzenie pliku bazy danych:

SQLiteConnection.CreateFile("MyDatabase.sqlite");

SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Open();

string sql = "create table highscores (name varchar(20), score int)";

SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

sql = "insert into highscores (name, score) values ('Me', 9001)";

command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

m_dbConnection.Close();

Po utworzeniu skryptu tworzenia w C #, myślę, że możesz chcieć dodać transakcje wycofywania, jest to bezpieczniejsze i uchroni twoją bazę danych przed awarią, ponieważ dane zostaną zatwierdzone na końcu w jednym dużym kawałku jako niepodzielna operacja do bazy danych, a nie w małych kawałkach, gdzie może zawieść na przykład przy 5 z 10 zapytań.

Przykład wykorzystania transakcji:

 using (TransactionScope tran = new TransactionScope())
 {
     //Insert create script here.

     //Indicates that creating the SQLiteDatabase went succesfully, so the database can be committed.
     tran.Complete();
 }
Maks
źródło
5
Ładna, jasna odpowiedź. +1 od. Oto kolejny przykład, który pokazuje, jak szybko SQLite może wstawiać i pobierać rekordy: technical-recipes.com/2016/using-sqlite-in-c-net-environments
AndyUK
W moim teście użycie System.Transactions.TransactionScopenie działa zgodnie z oczekiwaniami, będzie wykonywane ExecuteNonQuerynatychmiast, a nie wszystkie razem, jak SQLiteTransaction. Dlaczego używać TransactionScope?
MrCalvin
1
Wolę SQLiteTransaction tr = m_dbConnection.BeginTransaction(); SQLiteCommand command = new SQLiteCommand(...); command.Transaction = tr;TransactionScope
zamiast