Загрузка базы данных SQLite из байта поток в .NET

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

Это будет просто конфигурация по умолчанию. То есть мне не нужно изменять эту конфигурацию. Он статичен и не может быть изменен после того, как моя программа была построена.

Я использую оболочку System.Data.SQLite для SQLite.

Я могу получить доступ к байтовому потоку следующим образом:

using (var stream =
          Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
    // use of "stream" here.
}

Однако я Я не понимаю, как создать объект SQLiteConnection из этого потока.

Простым выходом было бы просто создавать новый файл конфигурации каждый раз при загрузке программы, а затем сообщать SQLite о необходимости чтения из этот файл. Это, вероятно, сработает, но я бы хотел избежать этого метода - я планирую повторно использовать свое решение этой проблемы, чтобы также включить поддержку интернационализации (где каждый язык представляет собой [сжатую] базу данных SQLite, а язык по умолчанию встроен в исполняемый файл - a Пользователь мог бы добавить другие языки, просто скопировав базы данных на других языках в рабочий каталог программы.)

Меня не волнует стоимость памяти для хранения этой базы данных в памяти. Он будет очень маленьким (вероятно, менее 50 КБ), поэтому меня это не беспокоит. Очевидно, что если бы это была база данных большего размера, это могло бы быть проблемой.

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

Спасибо за вашу помощь.

10
задан Ethan 21 June 2011 в 02:54
поделиться