如何刷新SqlConnection的状态?

时间:2011-06-29 13:04:21

标签: c# state sqlconnection

我有这段代码:

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

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

如何刷新SqlConnection

的状态

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

在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;
    }

答案 2 :(得分:2)

您始终可以使用SqlConnection.StateChange Event

监控SqlConnection的状态

答案 3 :(得分:1)

懒惰的方式:“ 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.
   }
}