Beispiel #1
0
 protected override bool TryProvideErrorContext(int errorCode, string errorMessage, SqlExceptionInfo info)
 {
     return(false);
 }
Beispiel #2
0
        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);
        }