c# - 如何检查数据库可用性

标签 c# .net sql sql-server connection

我有以下代码来测试数据库连接,它会定期运行以测试数据库可用性:

private bool CheckDbConn()
{
   SqlConnection conn = null;
   bool result = true;

   try
   {
       conn = DBConnection.getNewCon();
       ConnectionState conState = conn.State;

       if (conState == ConnectionState.Closed || conState == ConnectionState.Broken)
       {
          logger.Warn(LogTopicEnum.Agent, "Connection failed in DB connection test on CheckDBConnection");
          return false;
       }             
   }
   catch (Exception ex)
   {
      logger.Warn(LogTopicEnum.Agent, "Error in DB connection test on CheckDBConnection", ex);
      return false; // any error is considered as db connection error for now
   }
   finally
   {
      try
      {
         if (conn != null)
         {
            conn.Close();
         }
      }
      catch (Exception ex)
      {
         logger.Warn(LogTopicEnum.Agent, "Error closing connection on CheckDBConnection", ex);
         result = false;
      }
   }
   return result;
}

和:

static public SqlConnection getNewCon()
{
    SqlConnection newCon = new SqlConnection();
    newCon.ConnectionString = DBConnection.ConnectionString; // m_con.ConnectionString;
    newCon.Open();
    return newCon;
}

我的问题是:这会按预期工作吗?

具体来说,我关心的是 ConnectionState 的测试。状态是否有可能是:正在连接(因为 Open() 是同步的)?

遇到这种情况我该怎么办?

最佳答案

你可以这样试试。

    public bool IsServerConnected()
    {
        using (var l_oConnection = new SqlConnection(DBConnection.ConnectionString))
        {
            try
            {
                l_oConnection.Open();
                return true;
            }
            catch (SqlException)
            {
                return false;
            }
        }
    }

关于c# - 如何检查数据库可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171144/

相关文章:

c# - 如果单元格的内容大于其宽度,如何在 DataGrid 中显示省略号?

c# - 带有数据网格和 TabControl 的 WPF MVVM Master 详细信息 View

mysql - 带有 ORDER BY 子句的 MySQL 中的累计和

php - 缓慢的 sql 选择。两张 table

c# - WCF 数据服务中的自定义路由

c# - Managedwifi : Occasionally, WlanConnectionNotification 没有被解雇

c# - .NETStandard 1.1 库中的接口(interface)在 .NET 4.61 中没有实现

c# - 将 P/Invokes 移动到 NativeMethods 类 因为它是 P/Invoke 方法消息

javascript - 为什么我只从 HttpContext 中获取部分 URL?

php - 在Mysql中创建两个表之间的结果集差异