Встроить базу данных MS Access в приложение C # WinForm - PullRequest
8 голосов
/ 05 ноября 2010

У меня есть приложение winform C #, которое получает доступ к данным из базы данных MS Access.Это означает, что моим приложениям требуется как минимум 2 файла: файл .exe и файл .accdb.Можно ли включить базу данных в файл .exe, поэтому мое решение состоит из одного файла (так же, как вы включили бы изображение в ресурсы проекта)?Если это возможно, являются ли они основными причинами, почему это не должно быть сделано, и как бы вы получили доступ к данным из кода?Проект - только маленький для личного использования, поэтому, если производительность поражена, это не имеет большого значения.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2011

Это можно сделать.Просто добавьте его в свой проект, как если бы вы добавили любой другой файл (щелкните правой кнопкой мыши проект -> Добавить -> Существующий элемент), затем отмените все всплывающие диалоговые окна, предлагающие вам его обработать, затем щелкните правой кнопкой мыши базу данных из своего проектаИсследователь, перейдите в свойства и выберите Build Action: Embedded Resource.

Затем используйте метод ниже, чтобы вывести вашу базу данных во временный файл, который вы можете создать, вызвав Path.GetTempFileName.

internal void CreateBlankDatabase(string destFile)
{
    using (Stream source = new MemoryStream(Properties.Resources.MyEmbeddedDatabase))
    using (Stream target = File.Open(destFile, FileMode.Truncate))
    {
        source.CopyTo(target);
    }
}

(Обратите внимание, что MyEmbeddedDatabase будет вашим именем встроенной базы данных).Затем используйте ваше временное имя файла в строке подключения.Убедитесь, что вы удалите временный файл после того, как вы закончите.Также, как говорили другие, вы не сможете изменять и сохранять какие-либо данные.

2 голосов
/ 05 ноября 2010

Нет, это не должно быть сделано. Как бы вы отправили кого-нибудь и обновили файл .exe, не потеряв при этом свои данные? Держите это отдельно.

У вас должен быть способ управлять тем, как ваши приложения устанавливаются, и расположением файла в строке (ах) соединения. В папке вашего приложения может быть подпапка \ Data с файлами .accdb.

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

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

При запуске приложения-оболочки оно извлекает «основное» приложение C #, файл базы данных и приложение обновления (подробнее об этом ниже) в папку временных файлов и запускает основное приложение.

Когда основное приложение закрыто, оно запускает приложение обновления, передавая пути к файлу базы данных и исходному приложению-оболочке.Приложение обновления обновляет файл приложения оболочки с измененным файлом базы данных.Затем он окончательно удаляет основное приложение базы данных и файл базы данных из временной папки.К сожалению, приложение для обновления не может удалить себя, но вы можете обойти это, добавив команду в раздел runonce реестра, чтобы удалить приложение для обновления при следующей перезагрузке.Как извлечь и вставить встроенные ресурсы, рассмотрите возможность использования приложения-оболочки в виде сжатого, самораспаковывающегося исполняемого файла (например, самораспаковывающегося файла zip или rar).Вот статья codeproject , которая описывает, как превратить приложение .Net в сжатый, самораспаковывающийся exe-файл.

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

Для доступа требуется уметь читать и писать в файл. ОС будет блокировать исполняемый файл при запуске, чтобы его нельзя было изменить во время использования. Это приведет к тому, что он не будет работать, не говоря уже о том, что Access simple не сможет прочитать exe, поскольку он ожидает другой формат файла.

...