Mam następujący kod do testowania połączenia DB, działa okresowo do testowania DB Dostępność:Jak sprawdzić dostępność bazy
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;
}
oraz:
static public SqlConnection getNewCon()
{
SqlConnection newCon = new SqlConnection();
newCon.ConnectionString = DBConnection.ConnectionString; // m_con.ConnectionString;
newCon.Open();
return newCon;
}
Moje pytanie brzmi: czy to działać zgodnie z oczekiwaniami?
W szczególności jestem zaniepokojony aobut testu ConnectionState
. Czy to możliwe, że stan będzie: łączenie (od Open()
jest synchroniczne)?
Co należy zrobić w takim przypadku?
Z góry dziękuję, Omer
co jeśli l_oConnection.Close(); rzuci wyjątek w bloku finally? –
używając ... zamknij i wyrzuć połączenie, nie trzeba wtedy zamykać – Steve
Używałem tego, ale stwierdziłem, że zwróciło ono wartość true podczas pierwszego wywołania po tym, jak baza danych została przejęta w trybie offline. To było przy użyciu .NET 3.5 przeciwko dbl serwera db 2012. – monty