Используя Try, предложение Catch часто используется для перехвата исключений базы данных из Недопустимые операции к проблемам с подключением . NLog, кажется, обрабатывает регистрацию исключений довольно эффективно, и я бы регистрировал их на Error Level . Ниже приведен мой производственный код (не совсем), и он, похоже, обрабатывает как ошибки уровня объекта, так и ошибки базы данных.
try
{
//Database Operations...
}
catch (SqlException sqlException)
{
logger.Error(sqlException, "Sql exception caught while Importing.");
}
catch (NullReferenceException nullRefException)
{
try
{
DBConnTxn.ConnectDB();
DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
DBConnTxn.DisconnectDB();
logger.Error(nullRefException, "Null Reference exception caught while Importing.");
}
catch(Exception ex)
{
logger.Error(ex, "DB Roll Back Exception while importing.");
return false;
}
return false;
}
catch (ArgumentException argsException)
{
try
{
DBConnTxn.ConnectDB();
DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
DBConnTxn.DisconnectDB();
}
catch { }
logger.Error(argsException, "Null Reference exception caught while Importing.");
FullAutoMailSendHelper.ProcessErrors.Add("Data Import Error", argsException.Message);
return false;
}
catch (Exception ex)
{
try
{
logger.Fatal(ex, "Unhandled Exception occurred");
DBConnTxn.ConnectDB();
DBConnTxn.ExecuteUpdateQuery("ROLLBACK TRAN");
DBConnTxn.DisconnectDB();
}
catch(Exception innerException) {
}
FullAutoMailSendHelper.ProcessErrors.Add("Data Import Error",ex.Message);
return false;
}