0

SQL データベースへの挿入操作を処理する asp.net Gridview があります。一意性の基準を満たす場合にのみ、レコードの挿入が許可されます。この制約は、SQL サーバーの一意のインデックスを使用して適用されます。ユーザーが既に存在するレコードを挿入しようとすると、エラー メッセージが表示されます。

これを実装するためのベストプラクティスは何だろうと思っています。

  1. IF EXISTS とロック ヒント (updlock、holdlock など) を使用して、SQL 側でレコードが存在するかどうかを確認します。レコードが挿入されたかどうかに応じて、ASP.net にエラー コードを返します。
  2. SQL サーバーの try/catch ブロック内で INSERT 操作を実行し、一意のインデックスに依存して、レコードが存在する場合に挿入が行われないようにします。例外がスローされたかどうかに応じて、エラー コードを返します。
  3. SQL 側で INSERT 操作を実行しますが、SQL の try/catch は使用しません。代わりに、ASP.net 内で PK 違反の例外を処理します。

通常、例外を使用して有効な操作を処理することは悪い習慣だと考えています。つまり、何かが壊れていない限り、ソフトウェアは例外をスローすべきではありません。ただし、SQL のテーブルの一意のインデックスが目的の制約を実装する場合、わざわざレコードの存在を手動でチェックする必要があるでしょうか?

4

1 に答える 1

0

レコードが既に存在するかどうかを確認するために、別の呼び出しを行います。はいの場合はユーザーにメッセージを表示し、ない場合は挿入を行います。このようにする理由は、すべてのビジネス ロジックをアプリケーションに保持することを好むからです。

ストアド プロシージャの呼び出しを 1 回だけ行いたい場合は、次のようにします。

挿入する前に確認します。また、挿入が失敗した場合にメッセージを返す出力パラメーターをストアド プロシージャに追加します。私のアプリケーションでは、出力パラメーターにメッセージが表示された場合、それをユーザーに表示します。

于 2012-10-09T21:30:17.540 に答える