我有以下代码来测试数据库连接,它会定期运行以测试数据库可用性:
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()是同步的)?
ConnectionState
Open()
在这种情况下我该怎么办?
您可以这样尝试。
public bool IsServerConnected() { using (var l_oConnection = new SqlConnection(DBConnection.ConnectionString)) { try { l_oConnection.Open(); return true; } catch (SqlException) { return false; } } }