В коде приложения С# я хотел бы создать и затем взаимодействовать с одной или несколькими базами данных SQLite.
Каков предпочтительный метод для инициализации нового файла базы данных SQLite и открытия его для чтения и записи?
После создания базы данных, как я могу выполнить оператор DDL для создания таблицы?
Следующая ссылка предоставит вам отличный учебник, который мне очень помог!
Я почти использовал все в этой статье для создания базы данных SQLite для своего собственного приложения С#.
Не забудьте загрузить SQLite.dll и добавить его в качестве ссылки на ваш проект. Это можно сделать с помощью NuGet и путем добавления dll вручную.
После того, как вы добавили ссылку, обратитесь к DLL из вашего кода, используя следующую строку поверх своего класса:
using System.Data.SQLite;
Здесь вы можете найти dll:
Здесь вы можете найти способ NuGet:
Далее следует создать script. Создание файла базы данных:
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();
После того, как вы создали create script на С#, я думаю, вы можете добавить транзакции отката, это безопаснее, и это приведет к сбою вашей базы данных, потому что данные будут зафиксированы в конце в одной большой части как атомарная операция с базой данных, а не небольшими частями, где она может выйти из строя на 5 из 10 запросов, например.
Пример использования транзакций:
using (TransactionScope tran = new TransactionScope())
{
//Insert create script here.
//Indicates that creating the SQLiteDatabase went succesfully, so the database can be committed.
tran.Complete();
}
System.Transactions.TransactionScope
работает не так, как ожидалось, он будет выполнять каждыйExecuteNonQuery
немедленно, а не все вместе, какSQLiteTransaction
. Зачем использоватьTransactionScope
?