2012-05-10 9 views
0

質問があり、問題はありません。 データベースには一意の名前(一意でなければならないものの名前を格納する列)としていくつかの制限があります。 dbは挿入または更新するときに、名前を変更していないかどうかを検証し、そうであれば変換可能なエラーコード付きのSqlExceptionに2627SqlExceptionエラーコード

私の質問は何ですか?最終的なユーザーに何をすべきかを示すために私が相談できるテーブルがある場合同じ名前のユーザーが存在する。この場合

... ....

私が思う

答えて

2

、あなたがのSQLException Errors propertyを見て、メッセージ中にあなたを指している必要がありますどのerrors numberを見てみる必要がありますmaster.dbo.sysmessagesテーブル。

0

特定のエラーコードが特定のものを参照していることを想定してください。

select * from master.dbo.sysmessages where description like '%timeout%' 

これはあなたを与える:

タイムアウトのために提供された値が有効ではありません。タイムアウトは、0〜2147483647の有効な整数である必要があります。1033

クラス '%ls'、id%p、タイプ%d、タスク0x%p:%d、待機時間%d秒、フラグ0x%I64x、所有タスク0x%p。引き続き待ちます。 1033

タイムアウトする前に、リモートサーバーインスタンス '%1!'への通信を完了できませんでした。 ALTER DATABASEコマンドが完了していない可能性があります。コマンドを再試行します。 1033

%dが最大値32767 1033 メタデータキャッシュエントリ%dを超える

データベースミラーリングタイムアウト値:データベースIDの%d(%dは)タイムアウトをロックによるコヒーレンシのためにチェックされていません。 1033

マークされたトランザクション "%1!"は失敗しました。マークされたトランザクションをコミットしてログにマークを入れようとしているときに、タイムアウトが発生しました。これは、Microsoft分散トランザクションコーディネーター(MS DTC)トランザクションなどの競合によって発生する可能性があります。1033

SQL Server宛先の一括挿入操作がタイムアウトしました。データフロー内のSQL Server DestinationのTimeoutプロパティの値を増やすことを検討してください。 1033

...多くの言語で多くのエラーがあります。

「1033はタイムアウトを意味する」と考えられます。残念ながら、それは真実ではない:

select description from master.dbo.sysmessages where msglangid=1033 

警告:致命的なエラー%dは%のS_DATEで発生しました。エラーと時間をメモし、システム管理者に連絡してください。

Waitforではクエリが許可されません。

'%。* ls'付近の構文が正しくありません。

'%。* ls'で始まる%S_MSGが長すぎます。最大長は%dです。 ステートメントにUNION、INTERSECTまたはEXCEPT演算子が含まれている場合、ORDER BY項目は選択リストに表示される必要があります。

ORDER BYの位置番号%ldが選択リスト内の項目数の範囲外です。

他にもタイムアウト以外の多くのエラーがあります。

だから私はにこだわっています:だから、実際にあなたの質問に答えるために

IsSqlTimeout = ((ex as SqlException).Message.ToUpper().Contains("TIMEOUT"); 

- それは、ユーザーが実際に理解できるかについて語られるべきかに依存します。

ある期間にわたってすべてのエラーをログに記録し、最も一般的なものをグループ化し、それぞれを1つずつ処理することをお勧めします。