/// <summary> /// function to translate sql exceptions to readable messages. /// It also captures cases where sql server is not available and guards against /// database connection details being leaked /// </summary> /// <param name = "exc"></param> /// <returns></returns> /// <remarks> /// </remarks> public static string TranslateSQLException(SqlException exc) { int i = 0; var errorMessages = new StringBuilder(); for (i = 0; i <= exc.Errors.Count - 1; i++) { SqlError sqlError = exc.Errors[i]; string filteredMessage = string.Empty; switch (sqlError.Number) { case 17: filteredMessage = "Sql server does not exist or access denied"; break; case 4060: filteredMessage = "Invalid Database"; break; case 18456: filteredMessage = "Sql login failed"; break; case 1205: filteredMessage = "Sql deadlock victim"; break; default: filteredMessage = exc.ToString(); break; } errorMessages.Append("<b>Index #:</b> " + i + "<br/>" + "<b>Source:</b> " + sqlError.Source + "<br/>" + "<b>Class:</b> " + sqlError.Class + "<br/>" + "<b>Number:</b> " + sqlError.Number + "<br/>" + "<b>Procedure:</b> " + sqlError.Procedure + "<br/>" + "<b>Message:</b> " + filteredMessage + "<br/>"); } return errorMessages.ToString(); }
private static bool CheckErrorCanRetry(System.Data.SqlClient.SqlException e) { bool CanRetry = false; string TempMsg = e.ToString().ToLower(); if (e.Number == 11) //general network error { CanRetry = true; } else if (e.Number == 17) //sql server does not exist or access denied { CanRetry = true; } else if (e.Number == -2) //timeout expired { CanRetry = true; } else if (e.Number == 1205) //deadlocked on lock { CanRetry = true; } else if (TempMsg.IndexOf("逾時") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("timeout expired") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("一般性網路") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("一般網路") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("general network error") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("不存在或拒絕存取") > 0) { CanRetry = true; } else if (TempMsg.IndexOf("sql server does not exist") > 0) { CanRetry = true; } return(CanRetry); }
private void WriteToEventLog(SqlException e, string action) { EventLog log = new EventLog(); log.Source = eventSource; log.Log = eventLog; string message = exceptionMessage + "\n\n"; message += "Action: " + action + "\n\n"; message += "Exception: " + e.ToString(); log.WriteEntry(message); }
public static void LogException(SqlException exception) { if (exception != null) { Debug.Print(exception.ToString()); Logger.Error(exception.ToString()); try { /* All SQL errors must be logged */ var error = new VLogServerSideSqlError(exception); if (VLog.OnCommitExceptionToServerRepository != null) { VLog.OnCommitExceptionToServerRepository(error); } } catch (Exception ex) { // IMPORTANT! We swallow any exception raised during the // logging and send them out to the trace . The idea // here is that logging of exceptions by itself should not // be critical to the overall operation of the application. // The bad thing is that we catch ANY kind of exception, // even system ones and potentially let them slip by. Logger.Error(ex.ToString()); Debug.Print(ex.Message); } } }
/// <summary> /// Internals the handle. /// </summary> /// <param name="ex">The executable.</param> /// <returns></returns> private ErrorAction InternalHandle(SqlException ex) { return new ErrorAction(ErrorActionType.Retry, -2147220970, ex.ToString()); }