Ho il seguente codice per verificare la connessione DB, viene eseguito periodicamente per verificare DB disponibilità:Come controllare la disponibilità del database
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;
}
E:
static public SqlConnection getNewCon()
{
SqlConnection newCon = new SqlConnection();
newCon.ConnectionString = DBConnection.ConnectionString; // m_con.ConnectionString;
newCon.Open();
return newCon;
}
la mia domanda è: sarà questo funziona come previsto?
In particolare, sono interessato aobut il test dello ConnectionState
. È possibile che lo stato sia: connessione (dal momento che Open()
è sincrono)?
Cosa devo fare in questo caso?
Grazie in anticipo, Omer
cosa succede se l_oConnection.Close(); getterà un'eccezione nel blocco finale? –
usando ... chiudi e getta la connessione, non è necessario chiudere quindi – Steve
Io stavo usando questo, ma ho trovato restituito true alla prima chiamata dopo che il database è stato portato offline. Questo stava usando .Net 3.5 contro un db sql server 2012. – monty