如何刷新SqlConnection的状态

本文关键字:SqlConnection 状态 刷新 何刷新 | 更新日期: 2023-09-27 18:00:44

我有这个代码:

if (  con.SqlConnection.State == System.Data.ConnectionState.Broken ||
      con.SqlConnection.State == System.Data.ConnectionState.Closed      
){
    con.SqlConnection.Open();
}

我失去了与网络的连接。当我来到我的if时,我的SqlConnection.State仍然说打开。

如何刷新SqlConnection 的状态

如何刷新SqlConnection的状态

这是您应该依赖异常的少数情况之一。

Microsoft实际上建议您对异常做出反应,而不是检查状态变量。想象一下这样的情况:检查变量,然后在一纳秒后连接断开。

我相信会被抛出的两个是InvalidOperationExceptionSqlException

在TCP连接上,只有一种方法可以保证了解连接是否仍然有效,那就是向打开的套接字发送新的数据包。

因此,只要我们假设您通过TCP连接连接到Sql Server,此规则也适用于它。因此,如果出现异常,您需要发送数据并等待。

    public bool IsConnected()
    {
        if (db == null) //db here is an Entity
            return false;
        //in my case Connection is an sqlconnection object so you can 
        //apply the same to your connection
        if (db.Database.Connection.State == ConnectionState.Closed)
            return false;
        try
        {
            var cmd = db.Database.Connection.CreateCommand();
            cmd.CommandText = "SELECT 0";
            cmd.ExecuteNonQuery();
        }
        catch
        {
            return false;
        }
        return true;
    }

您可以始终使用SqlConnection.StateChange Event 来监控SqlConnection的状态

懒惰的方式:"SELECT 0"。如果命令失败,连接状态将更新为"关闭"

if (DBConn.State == ConnectionState.Open)
{
   try
   {
      using(SqlCommand cmd = new SqlCommand(DBConn))
      {
         cmd.CommandText = "SELECT 0";
         cmd.ExecuteNonQuery();
      }
   }
   Catch
   {
      DBConn.Close(); ''Declare the connection dead.
   }
}