catch メソッド内に 1 つの if-else ブロックを記述しようとしていますが、「すべてのコード パスが int 型を返すわけではありません」というエラーが表示されます。
基本的に、UserName と Password を Sql CE データベースに保存するメソッドを作成しており、1 つの特定のエラーをテストしたいと考えています。(UserName は既に存在します。) UserName 列は一意であるため、NativeError = 25016 で確実に SqlCeException をスローします。それをエラー メッセージと共に表示するか、他の例外をより一般的な方法で処理します。
私のコードは次のとおりです。
try
{
//insert command (This is where the duplicate column error is thrown)
//Select @@Identity & Return it
}
catch (SqlCeException ex)
{
if (ex.NativeError == 25016)
MessageBox.Show("Username already in use.");
else
//whatever
}
別のより一般的なメッセージを表示しようとしましたが、ノーリターンエラーが発生しました。新しい例外をスローして、別のブロックでキャッチしようとしました。同じエラー。-1 を返そうとしました (一種のフラグ値として)。同じエラー。
この特定のケースでは、SqlCeException よりも具体的なエラーはないようです (ただし、debug-fu に失敗した可能性があります)。
クリエイティブな回避策はありますか? 最悪の場合、このメソッドを呼び出す前に DB でユーザー名の重複をチェックするメソッドを作成します。