У меня есть блок try \ catch, который обрабатывает открытие соединения и вставляет данные в базу данных.Как обрабатывать массив SQL Коды ошибок
catch (SqlException ex)
{
string sqlError = null;
for (int i = 0; i < ex.Errors.Count; i++)
{
sqlError += "Error Message " + ex.Errors[i].Message + "\n" + "Stored Procedure " + ex.Errors[i].Procedure + " \n " + "Line Number " + ex.Errors[i].LineNumber;
}
LogTools.WriteLog("Sql Server error " + sqlError);
Variables.InstallStatusDetail = "Database connection failed";
if (!sqlError.Contains("connection to SQL Server"))
{
if (Variables.WriteToDatabase)
{ HostedDataBase.InsertRunStatusIntoInstallStatus('E', sqlError, null); }
}
}
Я хочу записать sqlexceptions в базу данных, которые не будут мешать подключению и протоколированию в базе данных. Проблема возникает, когда база данных не может быть найдена, или логин не имеет надлежащих разрешений и т. Д. Исключение возникает, и он пытается войти в базу данных, поэтому, когда он это делает, он вызывает функцию, которая записывает в базы данных и пытается получить доступ еще раз, но снова возникает одно и то же исключение, в результате чего возникает цикл неудачных попыток записи в базу данных (либо из-за того, что DSN не может быть найден, либо у пользователя нет соответствующих разрешений).
Как я могу обрабатывать SQL-ошибки, которые мешали бы мне иметь возможность доступа и записи в базу данных и в то же время все же могли бы писать SQL-ошибки, которые не вызвали бы этот цикл?
Извините за смутный вопрос. Я хочу регистрировать все ошибки (включая некоторые ошибки sql) в базе данных. Проблема заключается в том, что исключение связано с тем, что программа не может найти dsn или у нее нет разрешений. Код выполняет себя снова и приводит к циклу попыток вставки к чему-то, что невозможно найти или не имеет соответствующих разрешений. Я хочу прагматичный способ проверить, что прежде чем мы попытаемся вставить ошибку, это ошибка sql, которая не мешает записи в базу данных (например, плохое соединение или пользователь с неправильными разрешениями). – Mattaceten
Похоже, ваш лучший маршрут состоял бы в том, чтобы создать какой-то счетчик, который отслеживает попытки подключения и разбивает ваш цикл, если, например, ваш уровень 5. Если он провалился 5 раз, скорее всего, он не сработает. Поэтому просто создайте INT и увеличивайте его при каждой попытке подключения. –
Ваш пример имеет смысл, но есть ли способ CheckError определить, является ли ошибка sql плохим соединением или плохими разрешениями? Или целый список неизвестных ошибок, которые могут препятствовать доступу к базе данных? Очевидно, если доступ к базе данных невозможен, не должно быть попытки вставить что-либо – Mattaceten