Как мы можем сделать так, чтобы ms access db встраивался в приложение winform, чтобы сделать его переносимым

Кто-нибудь может объяснить, как мы можем встроить ms access db в наше приложение winform, чтобы его можно было легко запускать на других машинах с помощью всего одного файла .EXE . Я много искал, но до сих пор не смог найти подходящего решения. Заранее спасибо.


person user2927881    schedule 01.11.2013    source источник
comment
Правильно ли я предполагаю, что вы хотите встроить приложение базы данных Access в свой .exe, чтобы формы, отчеты и т. д., созданные в Access, были легко интегрированы в ваше приложение Winforms?   -  person Gord Thompson    schedule 01.11.2013
comment
Извините, совершенно не связанно, но мне пришлось посмеяться над названием этого вопроса, когда я увидел его в списке без ответа. Увидев MS, Access и WinForm в одной строке, оканчивающейся на слово Portable, я выстрелил газировкой из носа. Я знаю, что это не было предполагаемым относительным значением, но на первый взгляд это было слишком забавно.   -  person WhozCraig    schedule 01.11.2013
comment
Горд, я просто хочу, чтобы мое приложение не требовало установки при запуске на других машинах... если у меня есть .exe приложения, то оно должно работать везде... мне не нужно устанавливать какие-либо СУБД( т.е. мс доступ)..   -  person user2927881    schedule 01.11.2013
comment
То есть вы используете ms access только как хранилище данных? Затем просто поместите файл .mdb или .accdb вместе с .exe.   -  person 4dmonster    schedule 01.11.2013
comment
мы не можем встроить его в проект, а не помещать отдельно в папку.   -  person user2927881    schedule 01.11.2013
comment
Должна быть возможность создать пустую базу данных с кодом, а затем добавить в нее таблицы. Это интересный вопрос.   -  person HelloW    schedule 01.11.2013
comment
Но эксперты думают, что я задал здесь какой-то неопределенный вопрос...   -  person user2927881    schedule 01.11.2013


Ответы (1)


Если вы используете MDB, то (32-разрядная) база данных (JET) является частью Windows. Таким образом, для этого не должно быть никаких требований к настройке. Если база данных только читается, а не записывается, то вы можете добавить ее как ресурс в EXE, а при запуске приложения извлечь ресурс либо в каталог TEMP, либо, если он большой, и вы не против оставить кеширует во вложенную папку в данных локального приложения (CSIDL_LOCAL_APPDATA). Если вы сделаете последнее, то при следующем запуске приложение может проверить, существует ли уже действующий извлеченный MDB, и использовать его, если он существует. Вы можете сделать то же самое, если в базу данных будет производиться запись, но только для локального хранилища, и в этом случае связанная MDB будет служить в качестве «шаблона» базы данных.

Если вы используете Delphi или C++, я бы также предложил исследовать SQLite как возможную альтернативу JET, хотя, поскольку я предполагаю, что это C# (тег 'c' немного сбивает с толку), вы не сможете статически связать SQLite код, который не соответствует требованию автономного EXE.

person Chris Rolliston    schedule 01.11.2013
comment
@user2927881 user2927881 Это хороший ответ, основанный на том, что вы нам сказали (и, что более важно, на том, что вы нам не сказали). Хоть бы спасибо сказали. - person Gord Thompson; 01.11.2013
comment
Крис: Поздравляю с достижением 1000 повторений. Вы делаете очень хороший вклад, и мы ценим его (ну, во всяком случае, большинство из нас...). - person Gord Thompson; 01.11.2013