protected override bool TryProvideErrorContext(int errorCode, string errorMessage, SqlExceptionInfo info) { return(false); }
protected virtual bool TryProvideErrorContext(int errorCode, string errorMessage, SqlExceptionInfo info) { Dictionary <int, string> parseResult; string duplicateValue; switch (errorCode) { case 2627: parseResult = errorMessageParser.Parse(errorCode, errorMessage); info.Type = SqlExceptionType.UniqueConstraintViolation; info.Constraint = parseResult[2]; info.Table = ErrorMessageParser.CutSchemaPrefix(parseResult[3]); if (parseResult.TryGetValue(4, out duplicateValue)) { info.Value = duplicateValue; } break; case 2601: parseResult = errorMessageParser.Parse(errorCode, errorMessage); info.Type = SqlExceptionType.UniqueConstraintViolation; info.Table = ErrorMessageParser.CutSchemaPrefix(parseResult[1]); info.Constraint = parseResult[2]; if (parseResult.TryGetValue(3, out duplicateValue)) { info.Value = duplicateValue; } break; case 515: parseResult = errorMessageParser.Parse(errorCode, errorMessage); info.Type = SqlExceptionType.CheckConstraintViolation; info.Column = parseResult[1]; info.Table = ErrorMessageParser.CutDatabaseAndSchemaPrefix(parseResult[2]); break; case 547: parseResult = errorMessageParser.Parse(errorCode, errorMessage); switch (parseResult[2]) { case "FOREIGN KEY": case "REFERENCE": info.Type = SqlExceptionType.ReferentialConstraintViolation; break; case "UNIQUE KEY": case "PRIMARY KEY": info.Type = SqlExceptionType.UniqueConstraintViolation; break; case "CHECK": info.Type = SqlExceptionType.CheckConstraintViolation; break; default: return(false); } info.Constraint = parseResult[3]; info.Database = parseResult[4]; info.Table = ErrorMessageParser.CutSchemaPrefix(parseResult[5]); info.Column = ErrorMessageParser.ExtractQuotedText(parseResult[6]); break; default: return(false); } return(true); }