2010-03-10 44 views
0

有没有办法检查数据库连接是否打开?我试图检查connectionState,但它显示ConnectionState为Open,即使数据库关闭。如何检查数据库连接是否仍在Ado.Net中打开?

private bool IsValidConnection(IDbConnection connection) 
     { 
      return (connection != null && connection.State == ConnectionState.Open); 
     } 

回答

0

这看起来像正确的代码来检查您的数据库连接是否仍然打开。

我希望在数据库关闭时看到connection.Open()上抛出的异常。打开连接之前数据库是否关闭,或打开后是否关闭?

+0

我没有调用connection.Open()。即使在db关闭的情况下,我也检查显示ConnectionState.Open的连接的ConnectionState。 – Amitabh 2010-03-10 14:12:14

2

虽然我没有答案,但我可以告诉你为什么会发生这种情况 它基本上发生在TCP上面的任何不发送定期心跳的协议上。

TCP没有办法检测到远端是关闭的,没有发送任何数据,即使如此也需要相当长的时间来检测远端的故障。

理想情况下,服务器在发生故障时会发送一个TCP FIN数据包,但如果有人拔出网线,服务器崩溃或中间NAT网关/防火墙静默地断开连接,则不会发生这种情况。这会导致客户端不知道服务器已经消失,并且您必须发送一些消息并假定服务器已经消失,您没有在合理的时间内收到响应,或者发生错误(通常是前几个发送()服务器静默后不会出错)。

所以,如果你想确保数据库连接好,请发出select 1;查询。一些较低级别的DB API可能具有可用于相同目的的ping()/ isAlive()或similer方法。

0

一个简单的方法是使用查询来编写一个按钮,从数据库的某个表中检索某些数据,如果返回一个错误,则会捕获它。

这将显示是否有连接。

相关问题