2010-07-29 2 views
0

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

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

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

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

благодаря

ответ

0

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

0

Connection pooling должен работать на вас. Если нескольким exes требуется соединение с базой данных в одно и то же время, вам понадобится более одного соединения, но после того, как эти соединения будут выпущены обратно в пул, другой exe может забрать их и повторно использовать.

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

2

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

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

Если вы действительно хотите использовать общий доступ к соединению, вы можете рассмотреть возможность разделения вашего приложения на один общий задний конец (например, Windows или WCF-сервис), который управляет соединением singleton db.

0

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

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

Смежные вопросы