【问题标题】:sharing a database connection between applications in c#在 C# 中的应用程序之间共享数据库连接
【发布时间】:2010-07-29 12:30:30
【问题描述】:
我想知道是否有人知道是否可以让多个应用程序共享同一个数据库连接
例如,如果我有一个打开与数据库的连接的应用程序
然后我启动另一个需要连接到同一个数据库的应用程序 - 所以我没有打开 2 个连接,而是使用来自第一个应用程序的连接,该应用程序已经打开
因此只有一个连接打开
我问这个的原因是因为我正在开发一个系统,它是由单独的 exe 而不是一个大的 exe 构建的 - 但它们都访问同一个数据库
任何帮助将不胜感激
谢谢
【问题讨论】:
标签:
c#
database-connection
【解决方案1】:
恕我直言,您可以共享相同的连接字符串,但在不知道彼此的 2 个应用程序之间共享相同的物理数据库连接并不是一个好主意。您将如何处理锁定、并发、事务边界等?
如果这样做的原因是为了降低数据库许可成本或连接限制,那么考虑缩短连接生命周期可能是值得的(即应用程序根据需要与数据库连接和断开连接,而不是在生命周期内保持连接打开)应用程序)
如果您真的想要共享连接,您可能会考虑将您的应用拆分为拥有一个管理单例数据库连接的通用后端(例如 Windows 或 WCF 服务)。
【解决方案2】:
您可能希望创建一个单独的程序集,其中包含连接到数据库的逻辑(通过可配置的连接字符串),并为需要使用它的每个项目引用该程序集。请注意,它们不会“共享”相同的物理数据库连接,而是您将在两个应用程序之间共享代码和逻辑,它仍然是两个独立的数据库连接,您无法绕过,但也不是一件坏事,这就是它必须的方式:)你可以共享相同连接的唯一方法是如果两个应用程序实际上在同一个应用程序中,我认为这不是你在谈论的,因为你提到它有两个可执行文件,所以是两个独立的程序。
【解决方案3】:
Connection pooling 应该适合你。如果多个 exe 同时需要一个数据库连接,您将需要多个连接,但是一旦这些连接被释放回池中,另一个 exe 可以提取它们并重新使用它们。
我认为这通常包含在 ODBC/数据库驱动程序中,您无需付出任何额外的努力,但这对我来说从来没有成为问题,所以我不确定。
【解决方案4】:
您不应该(也不能)在两个应用程序之间共享连接。您可以共享相同的连接字符串,并打开连接池,它可能会为您重复使用连接,但您不应该依赖它。
正如 Capital G 所说,您应该将所有数据库访问逻辑放在单独的程序集/层,甚至是 WCF 服务/Web 服务中。