Q: SqlExceptionsを処理するためのより良い方法はありますか?
以下の例は、メッセージ内のテキストの解釈に依存しています。
例1:テーブルが存在しない場合に処理する既存のtrycatchがあります。
そもそもテーブルが存在するかどうかを確認できたという事実は無視してください。
try
{
//code
}
catch(SqlException sqlEx)
{
if (sqlEx.Message.StartsWith("Invalid object name"))
{
//code
}
else
throw;
}
例2:重複キー例外を示すtrycatchなし
if (sqlEx.Message.StartsWith("Cannot insert duplicate key row in object"))
解決策:SqlExceptionHelperの開始
//-- to see list of error messages: select * from sys.messages where language_id = 1033 order by message_id
public static class SqlExceptionHelper
{
//-- rule: Add error messages in numeric order and prefix the number above the method
//-- 208: Invalid object name '%.*ls'.
public static bool IsInvalidObjectName(SqlException sex)
{ return (sex.Number == 208); }
//-- 2601: Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'. The duplicate key value is %ls.
public static bool IsDuplicateKey(SqlException sex)
{ return (sex.Number == 2601); }
}