0

私には4つのテーブル、、aがありb、から、へc、およびへのd参照があります(外部キーを介して)。このテーブルをロードするためにグリッドビューを使用しています。参照を持つ値を削除しようとすると、例外が発生します。abbccd

DELETEステートメントがREFERENCE制約'FK__b__sc__0519C6AF'と競合しました。データベース'dbs'、テーブル'dbo.b'、列'id'で競合が発生しました。
ステートメントは終了されました。

関連付けられたキーがある場合、値を削除したくありません。助けることができ GridViewSim_RowDeleting()ますか?

更新しても同じ問題が発生します。グリッドビューが提供する標準リンクを使用して更新および削除しています。

何か助けはありますか?

4

1 に答える 1

0

RowDeleted/イベントで execption を処理できるRowUpdatedため、アプリケーションにスローされません。例えば

void GridViewSim_RowDeleted(Object sender, GridViewDeletedEventArgs e)
{
    if(e.Exception == null)
    {
        //Delete was successful - Do Something
    }
    else
    {
      // Delete was not successful - Do something else
      e.ExceptionHandled = true;   
    }
}

あなたが言ったように、RowDeletingイベントでこれを行うこともできますが、これには、主キーが子テーブルに存在するかどうかを確認するためのカスタム検証が必要です。より簡単で高速であり、私の意見では、外部キーに実行させるのはそれほど面倒ではありませんチェックを実行してエラーを先取りするのではなく、ジョブを実行して例外をキャッチします。

于 2013-02-19T12:52:03.840 に答える