общий доступ к базе данных между приложениями в c # - PullRequest
0 голосов
/ 29 июля 2010

Мне было интересно, если кто-нибудь знает, возможно ли иметь несколько приложений, совместно использующих одно и то же соединение с базой данных

например, если у меня есть приложение, которое открывает соединение с базой данных, тогда я запускаю другое приложение, которое должноподключиться к той же базе данных - поэтому вместо того, чтобы иметь 2 открытых соединения, я использую соединение из первого приложения, которое уже открыто, таким образом, только с одним открытым соединением

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

любая помощь будет оценена

спасибо

Ответы [ 4 ]

2 голосов
/ 29 июля 2010

ИМХО, вы можете использовать одну и ту же строку подключения, но совместное использование одного и того же физического соединения с БД между двумя приложениями, не подозревающими друг о друге, не будет такой хорошей идеей.Как бы вы справились с блокировками, параллелизмом, границами транзакций и т. Д.?

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

Если вы действительно хотите использовать общий доступ к соединению, вы можете подумать о том, чтобы разделить ваше приложение на единую общую спинуend (например, служба Windows или WCF), которая управляет одноэлементным соединением БД.

0 голосов
/ 29 июля 2010

Вы не должны (и не можете) использовать соединение между двумя приложениями.Вы можете использовать одну и ту же строку подключения и включить пул подключений, который может повторно использовать подключения для вас, но вы не должны зависеть от этого.

Как сказал Capital G, вам следует предоставить доступ ко всей базе данныхлогика в отдельной сборке / слое или даже в службе WCF / веб-службе.

0 голосов
/ 29 июля 2010

Пул соединений должен работать на вас.Если нескольким exe-файлам требуется одновременное подключение к базе данных, вам потребуется более одного подключения, но как только эти подключения будут возвращены обратно в пул, другой exe-файл может забрать их и повторно использовать.Я думаю, что это часто включается в драйверы ODBC / базы данных без каких-либо дополнительных усилий с вашей стороны, но для меня это никогда не было проблемой, поэтому я не уверен.

0 голосов
/ 29 июля 2010

Возможно, вы захотите создать отдельную сборку, содержащую логику для подключения к базе данных (через настраиваемую строку подключения) и ссылаться на сборку для каждого проекта, который должен ее использовать.Обратите внимание, что они не будут «совместно использовать» одно и то же физическое соединение с базой данных, скорее вы будете делиться кодом и логикой между двумя приложениями, это все равно будут два отдельных соединения с базой данных, которые вы не можете обойти, но это также неПлохая вещь, это просто так, как должно быть :) Единственный способ, которым вы могли бы использовать одно и то же соединение, - это если два приложения фактически были в одном приложении, и я понял, что это не то, о чем вы говорите, поскольку вы упомянули, что у него два исполняемых файла.Итак, две отдельные программы.

...