Использование SQLite в C #, как обновить и работать с созданным файлом базы данных? - PullRequest
0 голосов
/ 17 ноября 2010

Я занимаюсь разработкой приложения .NET (C #) с двоичным форматом файлов.План состоит в том, чтобы перейти в двоичный формат в файл базы данных SQLite, который легче поддерживать.

Я никогда не использовал это раньше, поэтому у меня есть несколько вопросов.

  1. Реализация SQLite http://sqlite.phxsoftware.com/ содержит поставщика LINQ.Я играл с ним локально, но мне как-то нужно включить это в то, что команда разработчиков может использовать.Я могу поместить файл базы данных на моем ПК в папку, которая включена в исходный репозиторий, но в конечном итоге он должен оказаться в папке AppData клиентов.Как я могу добиться этого с помощью созданного файла базы данных?Когда я создаю файл базы данных вручную, я могу легко указать приложению, где его хранить.

  2. Я достаточно хорошо знаю запросы SQL, поэтому я изначально планировал создать библиотеку, которая будетпорт DataModel для базы данных с использованием SQL-запросов.Недостатком этого является то, что при изменении или добавлении поля мне приходится обновлять много вещей: запрос создания базы данных, обновление базы данных или изменение запросов, модель данных.Исходя из того, что я собрал, я могу создать базу данных с помощью дизайнера, но когда мое приложение обновится до версии 2 в следующем месяце, и моя база данных изменится, я хочу перенести существующую базу данных пользователя в новую версию.Делая это вручную, я могу писать запросы на обновление и работать с неким инкрементным счетчиком базы данных, чтобы проверить это, но как это работает с использованием сгенерированной базы данных?

Так лучше, проще ибезопаснее использовать запросы SQL напрямую, или кто-то может указать мне на приемлемый вариант использования сгенерированной базы данных?

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Во-первых, System.Data.SQLite в первую очередь реализует ADO.NET-провайдера.Источник данных вашей строки подключения - это файл, которым вы хотите манипулировать, однако вы столкнетесь с проблемами с SQLite, если попытаетесь получить к нему доступ из разных мест.Однако есть документированные обходные пути, связанные с уровнями журналирования и блокировки.

Чтобы «создать» базу данных на компьютере пользователя, вы можете либо сохранить пустую базу данных в ресурсе и скопировать ее в папку, либо открытьnew db и запустите скрипт create для создания таблиц / etc

Во-вторых, STOP.Если вы собираетесь пойти дальше и дальше вызова ADO.NET для абстрагирования вашего уровня данных, просто используйте существующую абстракцию БД, не создавайте свою собственную.

Я предлагаю NHibernate есть драйвер для SQLite!

0 голосов
/ 17 ноября 2010

По первому вопросу я могу предложить вам подать заявку в ASP.Net или воспользоваться веб-сервисом (второй больше подходит для ваших целей). Для веб-сервисов я думаю, что вы должны кодировать сеанс при вызове метода, подобного этому:

...
[WebMethod]
public DataSet GetData(object id, string sessionId)
{
   try
   {
      DataSet ds = null;
      CUser user = Global.GetSession(sessionId);

      lock
      {
         //Your code to get data from the database
      }
      return ds;
   }
   catch(Exception ex)
   {
       throw;
   }
}

Для вашего второго вопроса я предлагаю использовать FluentNhibernate. Я использовал FluentNhibernate и очень легко моделировать вашу базу данных и даже генерировать ее. Это только проблеск кода, используемого для настройки реализации SQLite;

private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{
  // delete the existing db on each run
  if (File.Exists(DbFile))
    File.Delete(DbFile);

  // this NHibernate tool takes a configuration (with mapping info in)
  // and exports a database schema from it
  new SchemaExport(config)
    .Create(false, true);
}

Вы можете увидеть страницу вики FluentNhibernate , и есть вводная реализация этой платформы. Наконец, для администрирования вашей базы данных SQLite я предлагаю вам использовать SQLite Administrator .

alt text

0 голосов
/ 17 ноября 2010

Я не уверен, что понимаю вопрос 1. Нужно ли, чтобы ваша программа взяла предварительно сгенерированный файл базы данных и поместил его в папку AppData клиента, или ваша программа должна сгенерировать новый файл базы данных при запуске для в первый раз на клиентском компьютере, а затем сохраните вновь созданный файл базы данных в папке AppData.

Что касается второго вопроса, я не понимаю, что вы пытаетесь сделать. Не могли бы вы уточнить и / или привести пример ситуации?

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