Я пытаюсь загрузить базу данных SQLite, которая будет встроена в мой исполняемый файл в качестве ресурса. Для тех, кто интересуется, это потому, что я использую небольшую базу данных SQLite для хранения данных конфигурации, и я хотел бы отправить конфигурацию по умолчанию, встроенную в исполняемый файл (я ненавижу иметь при себе файлы вместе с программой).
Это будет просто конфигурация по умолчанию. То есть мне не нужно изменять эту конфигурацию. Он статичен и не может быть изменен после сборки моей программы.
Я использую оболочку System.Data.SQLite для SQLite.
Я могу получить доступ к потоку байтов следующим образом:
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
// use of "stream" here.
}
Однако я в растерянности относительно создания SQLiteConnection
объекта из этого потока.
Самый простой выход - просто создавать новый файл конфигурации каждый раз при загрузке программы, а затем указывать SQLite читать из этого файла. Это, вероятно, сработает, но я бы хотел избежать этого метода - я планирую повторно использовать свое решение этой проблемы, чтобы также включить поддержку интернационализации (где каждый язык представляет собой [сжатую] базу данных SQLite, а язык по умолчанию встроен в исполняемый файл - пользователь может добавить другие языки, просто скопировав другие языковые базы данных в рабочий каталог программы).
Меня не интересует стоимость памяти для хранения этой базы данных в памяти. Это будет очень мало (вероятно, менее 50 КиБ), так что это не беспокоит меня. Очевидно, что если бы это была большая база данных, это могло бы быть проблемой.
Наконец, я знаю, что это может рассматриваться как плохой способ сохранить конфигурацию. Хотя я согласен с тем, что решение на основе открытого текста подходит для случаев, когда пользователь вводит все свои настройки вручную, оно в основном будет использоваться для настроек, которые пользователь явно не определяет. Например, для хранения позиций различных стыковочных окон в приложении или для хранения данных о том, где могут быть найдены внутренние ресурсы.
Спасибо за вашу помощь.