C# .NET如何监视数据库连接中断?

C# .NET如何监视数据库连接中断?,c#,.net,database,C#,.net,Database,有没有办法监控数据库连接是否中断?我有一个跨应用程序共享的连接,一些对象应该在连接中断时做出反应 理想情况下,它应该是一个事件。我唯一发现的是一个连接异常,但它是在本地引发的(我正在侦听异常) 我想从DbConnection继承,并监听该对象中的异常(重载其方法),在连接错误异常时发出信号(通过相关代码)。但也许有最简单的方法 谢谢你的建议。共享一个连接从来都不是好的,而且是一种不好的做法。主要原因实际上是你的问题。 我建议您稍微改变一下设计(没什么大不了的),并依赖ADO.NET连接池。如果您

有没有办法监控数据库连接是否中断?我有一个跨应用程序共享的连接,一些对象应该在连接中断时做出反应

理想情况下,它应该是一个事件。我唯一发现的是一个连接异常,但它是在本地引发的(我正在侦听异常)

我想从
DbConnection
继承,并监听该对象中的异常(重载其方法),在连接错误异常时发出信号(通过相关代码)。但也许有最简单的方法


谢谢你的建议。

共享一个连接从来都不是好的,而且是一种不好的做法。主要原因实际上是你的问题。 我建议您稍微改变一下设计(没什么大不了的),并依赖ADO.NET连接池。如果您不想遇到各种瓶颈,尤其是在多线程情况下,这是一个必须具备的功能

这意味着所有连接都是暂时的,只有在需要访问数据库时才创建一个连接

您可以阅读更多关于它的信息,在那里您还可以找到关于如何使用它的示例。主要要知道的是,它使用一次性模式

//Notice the **using ** block
using(SqlConnection conn = new SqlConnection(connString)) 
{
  conn.Open();
  //do something with the connection.
  //as soon as the using block ends, the managed connection is disposed and released in the pool
}

共享一个连接从来都不是好的,这是一个坏习惯。主要原因实际上是你的问题。 我建议您稍微改变一下设计(没什么大不了的),并依赖ADO.NET连接池。如果您不想遇到各种瓶颈,尤其是在多线程情况下,这是一个必须具备的功能

这意味着所有连接都是暂时的,只有在需要访问数据库时才创建一个连接

您可以阅读更多关于它的信息,在那里您还可以找到关于如何使用它的示例。主要要知道的是,它使用一次性模式

//Notice the **using ** block
using(SqlConnection conn = new SqlConnection(connString)) 
{
  conn.Open();
  //do something with the connection.
  //as soon as the using block ends, the managed connection is disposed and released in the pool
}

您试图实现什么?某些进程(对象)应停止其连接中断工作并等待重新连接。您试图实现什么?某些进程(对象)应停止其连接中断工作并等待重新连接。请继续使用@thecoon。您可能会设法编写这样一个东西,但它可能会有点过火或非常脆弱,并且仍然无法解决根本问题,即您不应该在默认情况下保持连接。哎哟。:-)是的,这是有道理的。所以我将不分发连接,而是分发连接字符串。@Fanda:是的,类似这样的东西。您可以将其存储在singleton properties类或类似的东西中。现在我正在考虑如何在连接中断(或无法打开)时停止某些进程。应用程序正在更多线程中运行。我有firebird和sql连接,一些进程应该在其中一个损坏时停止。你有什么想法吗?这完全取决于你的应用程序的设计。一个选项是将异常从
conn.Open()
传播到上层,在上层您可以决定要做什么(停止或暂停一些其他线程)。必须坚持使用@thecoon。您可能会设法编写这样一个东西,但它可能会有点过火或非常脆弱,并且仍然无法解决根本问题,即您不应该在默认情况下保持连接。哎哟。:-)是的,这是有道理的。所以我将不分发连接,而是分发连接字符串。@Fanda:是的,类似这样的东西。您可以将其存储在singleton properties类或类似的东西中。现在我正在考虑如何在连接中断(或无法打开)时停止某些进程。应用程序正在更多线程中运行。我有firebird和sql连接,一些进程应该在其中一个损坏时停止。你有什么想法吗?这完全取决于你的应用程序的设计。一个选项是将异常从
conn.Open()
传播到上层,您可以在上层决定执行什么操作(停止或暂停一些其他线程)。