2011-01-28 5 views
7

データベースの操作中に異なる問題を扱いたいと思っています。SqlExceptionがスローされたために実際の問題を知るには?

間違ったデータベースの資格情報またはネットワークの問題のため、操作が失敗することがあります。または、クエリが正しくないために失敗する可能性があります(文字列値がint型の列に渡されている場合)

私のC#コードではSqlErrorsのコレクションを持つSqlExceptionしかありません。しかし、多くの重大度があります。

私は簡単にSqlExceptionの原因を特定できますか?接続の問題や認証の失敗、またはクエリの問題のために例外を特定する方法はありますか。

は、私はSQL Serverを使用しています2005年

+0

を私も、汎用的な解決のために達することを試みました。私の目標は、ユーザーフレンドリーなエラーメッセージをエンドユーザーに提示することでした。私は今までのところ実用的な解決策を見出しません –

答えて

9

これを試してください。これは、さまざまな条件の処理に役立ちます。

はこのようにtry catchブロックを使用します。

try  
{ 
    ... 
    ... 
} 
catch (SqlException ex) 
{ 
    switch (ex.Number) 
    { 
     case 4060: // Invalid Database 
        .... 
        break; 

     case 18456: // Login Failed 

        .... 

        break; 

     case 547: // ForeignKey Violation 

        .... 

        break; 

     case 2627: 
       // Unique Index/ Primary key Violation/ Constriant Violation 

        .... 

        break; 

     case 2601: // Unique Index/Constriant Violation 

        .... 

        break; 

     default: 

        .... 

        break;  

     } 
} 
+2

コメントした理由で、これらの特定の番号はどこから取得しましたか?私は、ネットワークの故障者のようないくつかの理由で、このような数字を欲しい。SQLのメッセージのシステムテーブルは、何千ものメッセージを与えるので、私にとってはそれほど便利ではない。 – Learner

+0

@CSharpLearner:ブログやプロジェクトの前のコードなど、さまざまなソースからこのエラーメッセージを受け取りました。データベースからこれらのエラーコードを取得できますか?「SELECT * FROM sysmessages」 – JPReddy

+0

@CSharpLearner:それは本当に私が思う多くの人々を助けるでしょう – JPReddy

1

SQLExceptionはあなたの重大度レベルを与える必要がありますプロパティClassを公開します。

詳細情報here

関連する問題