Использование SQLite с C # winforms - несколько основных вопросов? - PullRequest
5 голосов
/ 09 октября 2009

Было бы здорово получить какое-то направление, пытаясь использовать sqlite для моего приложения WinForms, которое я создаю в VS2008.

  1. Установка - просто перетащите файл «System.Data.SQLite.DLL» в какую-либо папку в моем проекте VS2008 (например, создайте для него папку), а затем создайте «ссылку» на него? Я сделал свойство ссылки CopyGlobal = TRUE. Идея заключается в том, что при развертывании моего приложения это должно работать (например, развернуть DLL для приложения)

  2. Исходная база данных - нужно ли создавать исходную базу данных или нет? Я вижу приведенный ниже код в файле справки, но к какой БД он подключается и где находится файл БД?

    DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite");
    using (DbConnection cnn = fact.CreateConnection())
    {
      cnn.ConnectionString = "Data Source=test.db3";
      cnn.Open();
    }
    
  3. Какие методы использовать - это обычно, как я буду использовать / делать звонки?

    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. Как мне настроить таблицы базы данных? Буду ли я делать это и хранить его в своем проекте VS2008 в качестве шаблона? Или я бы хотел автоматически создать базу данных в коде, если ее там не было?

  5. Если идея из 4 состоит в том, чтобы предварительно настроить таблицы, где я буду хранить этот исходный файл базы данных? так что когда я запускаю проект, чтобы проверить его, а затем использую файл базы данных, тот, с которым я тестирую, впоследствии удаляется Я предполагаю, что спрашиваю, как убедиться, что у меня есть отдельная пустая, но настроенная (с таблицами) база данных в качестве «источника» в моем проекте VS2008, но затем, когда я ее запускаю / отлаживаю, потребуется его копия для использования в тестировании ?

Спасибо

Ответы [ 2 ]

4 голосов
/ 09 октября 2009
  1. Да. SQLite - это база данных для развертывания xcopy; Там нет регистрации, и ваше приложение нуждается только в DLL, чтобы использовать его.

  2. База данных указана в строке подключения. В данном конкретном случае он находится в файле test.db3 в рабочей папке приложения.

  3. Возможно, вы захотите кэшировать соединение с базой данных, чтобы избежать дорогостоящей операции ее открытия каждый раз, когда вам потребуется доступ к ней. Кроме того, я не уверен, зачем вам нужна транзакция, поскольку все, что вы делаете, это просто читаете из базы данных.

  4. У вас есть два варианта: либо сохранить пустую базу данных с предварительно созданной схемой, либо скопировать ее в выходной каталог во время процесса сборки; или создайте набор SQL-сценариев для выполнения в базе данных из вашего кода при первом подключении к базе данных. Какой из них выбрать, зависит от того, хотите ли вы, чтобы ваше приложение отвечало за создание схемы или процесс сборки.

  5. Если вы создаете пустую базу данных с предварительно созданной схемой, вы можете добавить ее в виде файла вместе со своими источниками и дать VS команду скопировать ее в выходной каталог (как я уже упоминал).

2 голосов
/ 09 октября 2009

Я почти всегда использую так:

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

Чтобы заставить sqlite работать, вы должны использовать транзакции для вставки, обновления и удаления, и вам нужно использовать парамализованные запросы.Связанные запросы выполняются намного медленнее: Как мне обойти проблему "" "в sqlite и c #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...