在c#中共享应用程序之间的数据库连接

时间:2010-07-29 12:30:31

标签: c# database-connection

我想知道是否有人知道是否有可能让多个应用程序共享相同的数据库连接

例如,如果我有一个打开与数据库连接的应用程序 然后我启动另一个需要连接到同一个数据库的应用程序 - 所以我没有打开2个连接,而是使用已经打开的第一个应用程序的连接 因此只打开一个连接

我问这个的原因是因为我正在开发一个系统,它是从单独的exe而不是一个大的构建的 - 但它们都访问同一个数据库

任何帮助将不胜感激

感谢

4 个答案:

答案 0 :(得分:2)

恕我直言,你可以共享相同的连接字符串,但是在不知道彼此的两个应用程序之间共享相同的物理数据库连接不是一个好主意。您将如何处理锁定,并发,事务边界等?

如果这样做的原因是为了降低数据库许可成本或连接限制,那么可能值得考虑更短的连接生命周期(即应用程序根据需要连接和断开数据库,而不是在生命周期内保持连接打开应用程序)

如果您真的想要分享连接,您可能会考虑将应用分成单个公共后端(例如Windows或WCF服务)来管理单例数据库连接。

答案 1 :(得分:0)

您可能希望创建一个单独的程序集,其中包含连接到数据库的逻辑(通过可配置的连接字符串),并为需要使用它的每个项目引用程序集。注意,它们不会“共享”相同的物理数据库连接,而是你将在两个应用程序之间共享代码和逻辑,它仍然是两个独立的数据库连接,你无法解决但它也不是一个坏事,它只是必须的方式:)你可以共享相同的连接的唯一方法是,如果这两个应用程序实际上在同一个应用程序中,我收集的不是你所说的,因为你提到它有两个可执行文件,所以两个独立的程序。

答案 2 :(得分:0)

Connection pooling应该适合你。如果多个exes同时需要数据库连接,那么您将需要多个连接,但是一旦这些连接被释放回池中,另一个exe就可以接收它们并重新使用它们。

我认为这通常包含在ODBC /数据库驱动程序中而不需要您付出任何额外的努力,但它对我来说从未成为问题所以我不确定。

答案 3 :(得分:0)

您不应该(也不能)共享两个应用程序之间的连接。您可以共享相同的连接字符串,并打开连接池,这可能会为您重新使用连接,但您不应该依赖它。

正如Capital G所说,您应该将所有数据库访问逻辑放在单独的程序集/层中,甚至是WCF服务/ Web服务。