Как я могу узнать ошибку _exact_ от SQL Server - PullRequest
2 голосов
/ 23 марта 2011

У меня есть приложение в .NET.Он обновляет базу данных SQL Server.
Исключение.Как мне узнать, точно что случилось?

Понимание того, что это, например, нарушение внешнего ключа, не является проблемой.Но который является внешним ключом.


Объясняющий текст (исключение. Сообщение) мне достаточно как человеку, так как он содержит (полу) свободный текст.Но компьютер не должен опускаться до болтовни человека.

Тем более что сообщение об ошибке может меняться между версиями SQL Server и абсолютно между установленными языками.«... исключение внешнего ключа FK_Cust ...» или «... främmande nyckel undantag FK_Cust ...»

Существует число (остатки от расцвета COM?), которое отображается на определенный классиз-за ошибки, но я не нашел тот самый внешний ключ, или индекс, или ограничение, которое вышло из строя понятным для компьютера способом.

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

Вы смотрите на коллекцию SqlException.Errors . Каждый SqlError в коллекции имеет Number . Это число будет вашей точной ошибкой.

0 голосов
/ 24 марта 2011

Просто передайте исключение SQL, вызванное этой функцией, которую я написал, и вы также можете выполнить запрос, чтобы увидеть коды ошибок SQL

select * from sys.sysmessages

public string getSQLExceptionMessage(SqlException ex)
{
    string message = " Default SQL Exception. ";

    switch (ex.Number)
    {
            case 4060:
                message = "Invalid Database.Check Database Name";
                break;
            case 18456:
                message = "Login Failed.Check Database Credentials";
                break;
            case 547:
                message = "Foreign Key violation.Check Database Schema";
                break;
            case 10054:
                message = "Connection To Database Refused";
                break;
            case 214:
                message = ex.Message.ToString(); ;
                break;
            case 20:
                message = ex.Message.ToString(); ;
                break;
            case 229:
                message = "Permission Denied On Object. Contact DBA";
                break;
            case 230:
                message = "Permission denied On A Column. Check permissions";
                break;
            case 235:
                message = "Cannot Convert A Char Value To Money. The Char Value Has Incorrect Syntax.";
                break;
            case 236:
                message = "The Conversion From Char Data Type To Money Resulted In A Money Overflow Error.";
                break;
            case 241:
                message = "Conversion Failed When Converting Datetime From Character String.";
                break;
            case 262:
                message = "Permission Denied In Database.";
                break;
            case 297:
                message = "User Does Not Have Permissions To Perform This Action";
                break;
            case 313:
                message = ex.Message.ToString();
                break;
            case 8144:
                message = ex.Message.ToString();//"To Many Arguments Supplied For Procedure/Function ";
                break;
            case 8146:
                message = ex.Message.ToString();//"Procedure Has No Parameters And Arguments Were Supplied ";
                break;
            case 10004:
                message = "One Or More Invalid Arguments ";
                break;
            case 18452:
                message = "Login Failed For User. User Not Associated With A Trusted SQL Server Connection";
                break;
            case 21670:
                message = "Connection To Server Failed.";
                break;
            case 2812:
                message = "Could Not Find Stored Procedure. Check Name Of Stored Procedure";
                break;
            case 14043:
                message = ex.Message.ToString();//Null Parameter Passed To Procedure
                break;
            case 15003:
                message = ex.Message.ToString();//Role Specific SP
                break;
            case 16903:
                message = ex.Message.ToString();//Incorrect Number Of Parameters
                break;
            case 16914:
                message = ex.Message.ToString();//To Many Parameters
                break;
            case 18751:
                message = ex.Message.ToString();//Wrong Number Of Parameters
                break;
            case 20587:
                message = ex.Message.ToString();//Invalid Value For Procedure
                break;
            case 20624:
                message = ex.Message.ToString();//User Not In Database
                break;
            case 21234:
                message = ex.Message.ToString();//Cannot Insert as Table Has Identity Column
                break;
            case 21343:
                message = ex.Message.ToString();//Cannot Find Stored Procedure
                break;
            default:
                message = ex.Message.ToString() + Environment.NewLine + "SQL ERROR CODE : " + ex.Number + Environment.NewLine + "Run Query For SysMessages To Check Error Details";
                break;

        }

        return message;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...