Чтение и запись из и в единую базу данных Ms Access из многих приложений одновременно

#c# #ms-access #jet

#c# #ms-access #jet

Вопрос:

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

Но безопасно ли это? Должен ли я проявлять особую осторожность или Jet движок позаботится обо всем? Что произойдет, если я одновременно читаю одну таблицу данных и одновременно записываю в одну и ту же таблицу?

Я просто не хочу позже натыкаться на ошибки или сюрпризы.

Ответ №1:

Access, как правило, не является механизмом для одновременной обработки данных. Есть ли причина, по которой вы бы избегали MySQL или Oracle или других соответствующих СУБД?

Некоторые причины:

-Вам не гарантируется согласованное представление для чтения.
-Вы получаете высокую вероятность обновления обновленной записи, не зная.
-Могут возникнуть неразрешимые блокировки
— У вас нет централизованного диспетчера транзакций

Ответ №2:

Access не был предназначен для одновременного использования. Вы должны исследовать использование другой базы данных. Вот отличная статья на эту тему.

Ответ №3:

Для прямого ответа на ваш вопрос What would happen if I'm reading one data table while writing to the same table at the same time?

Зависит от значения по умолчанию IsolationLevel . Вы можете прочитать о том, что такое уровни изоляции и как их указывать при защите целостности данных с помощью транзакций в ADO.Net .

Но, как предлагали другие, пожалуйста, используйте что-нибудь другое. SQL Server 2008 Express является полнофункциональным и в основном бесплатным. Если вы все еще хотите иметь возможность использовать базу данных без установки серверного программного обеспечения, я бы даже рекомендовал SQL Server Compact Edition через Access.

Ответ №4:

По моему личному опыту, для 5-10 пользователей (каждый с 1 подключением) с «не большим количеством данных, которые пользователь может ввести, введя некоторые данные в форму», используемых в локальной сети, Access в порядке в качестве серверной части. Эта статья отражает мой личный опыт:

http://www.tek-tips.com/faqs.cfm?fid=4462

Реальные ограничения и точка, в которой вы должны искать «настоящую» базу данных клиент / сервер, сильно зависят от деталей вашей среды — если вы хотите знать, вам придется запускать собственные тесты.

Что касается одновременного чтения / записи в таблицу: Access использует возможности блокировки диапазона байтов базовой файловой системы для устранения коллизий (см. Здесь http://en.wikipedia.org/wiki/File_locking для получения дополнительной информации). Этот механизм работает в большинстве современных файловых систем, таких как NTFS, но плохо масштабируется для многих пользователей.