/// <summary> /// Encapsula uma exceção em uma <see cref="ConnectorException"/>. /// Se possível, faz a interpretação da mensagem e preenche o campo /// <see cref="Type"/>. /// </summary> /// <param name="ex">A exceção a ser encapsulada</param> /// <returns>A nova ConnectorException.</returns> public static ConnectorException FromDatabaseException(Exception ex) { string s = ex.Message; string msg = s; ConnectorExceptionType t = ConnectorExceptionType.Other; Match m; if ((m = rxDelete.Match(s)).Success) { t = ConnectorExceptionType.ForeignKeyViolation; msg = Strings.FormatString("Data.Connector.Exception.FKViolation", "(null)"); } else if ((m = rxInsert.Match(s)).Success) { t = ConnectorExceptionType.ForeignKeyViolation; } else if ((m = rxPrimaryKey.Match(s)).Success) { t = ConnectorExceptionType.PrimaryKeyViolation; msg = Strings.FormatString("Data.Connector.Exception.PKViolation", m.Groups["t"]); } else if ((m = rxUnique.Match(s)).Success) { t = ConnectorExceptionType.UniqueConstraintViolation; msg = Strings.FormatString("Data.Connector.Exception.UniqueViolation", m.Groups["t"]); } return(new ConnectorException(t, msg, ex)); }
/// <summary> /// Utilizado no suporte a serialização. /// </summary> protected ConnectorException(SerializationInfo info, StreamingContext context) : base(info, context) { string p = GetType().FullName; this.type = (ConnectorExceptionType)info.GetInt32(p + ".type"); this.sqlQuery = info.GetString(p + ".sql"); }
private static string FormatMessage(ConnectorExceptionType t, string msg) { if (t == ConnectorExceptionType.Other) { return(msg); } else { return(String.Format("[{0}] {1}", t, msg)); } }
/// <summary> /// Utilizado no suporte a serialização. /// </summary> protected ConnectorException(SerializationInfo info, StreamingContext context) : base(info, context) { string p = GetType().FullName; this.type = (ConnectorExceptionType) info.GetInt32(p + ".type"); this.sqlQuery = info.GetString(p + ".sql"); }
/// <summary> /// Cria uma nova exceção do <see cref="IConnector"/>. /// </summary> /// <param name="type">O tipo de exceção, caso seja de um tipo específico</param> /// <param name="innerException">A exceção que é causa desta</param> public ConnectorException(ConnectorExceptionType type, Exception innerException) : this(type, innerException.Message, innerException) { }
/// <summary> /// Cria uma nova exceção do <see cref="IConnector"/>. /// </summary> /// <param name="type">O tipo de exceção, caso seja de um tipo específico</param> /// <param name="msg">A mensagem de erro</param> /// <param name="innerException">A exceção que é causa desta</param> public ConnectorException(ConnectorExceptionType type, string msg, Exception innerException) : base(FormatMessage(type, msg), innerException) { this.type = type; }
private static string FormatMessage(ConnectorExceptionType t, string msg) { if (t == ConnectorExceptionType.Other) return msg; else return String.Format("[{0}] {1}", t, msg); }