SQL データベースへの挿入操作を処理する asp.net Gridview があります。一意性の基準を満たす場合にのみ、レコードの挿入が許可されます。この制約は、SQL サーバーの一意のインデックスを使用して適用されます。ユーザーが既に存在するレコードを挿入しようとすると、エラー メッセージが表示されます。
これを実装するためのベストプラクティスは何だろうと思っています。
- IF EXISTS とロック ヒント (updlock、holdlock など) を使用して、SQL 側でレコードが存在するかどうかを確認します。レコードが挿入されたかどうかに応じて、ASP.net にエラー コードを返します。
- SQL サーバーの try/catch ブロック内で INSERT 操作を実行し、一意のインデックスに依存して、レコードが存在する場合に挿入が行われないようにします。例外がスローされたかどうかに応じて、エラー コードを返します。
- SQL 側で INSERT 操作を実行しますが、SQL の try/catch は使用しません。代わりに、ASP.net 内で PK 違反の例外を処理します。
通常、例外を使用して有効な操作を処理することは悪い習慣だと考えています。つまり、何かが壊れていない限り、ソフトウェアは例外をスローすべきではありません。ただし、SQL のテーブルの一意のインデックスが目的の制約を実装する場合、わざわざレコードの存在を手動でチェックする必要があるでしょうか?