2

2 つの SQL テーブルがあり、それぞれに 3 つの異なる整数フィールドで構成される複合キーがあります。Table1 にレコードを追加するために、次のコードを追加しました。

try
{
    Table1 newRow = new Table1
    {
        DomainID = domainID,
        ConfigurationID = configID,
        ReasonID = reasonID
    };

    data.Table1.InsertOnSubmit(newRow);
    data.SubmitChanges();
}
catch(DuplicateKeyException)
{
    // Message to user about no duplicates allowed.
}

これは私が計画したとおりに機能し、ユーザーが重複行を追加しようとしている場合に例外をキャッチし、メッセージなどを表示できます。すべて問題ありません。ただし、Table2 に挿入するためのコード (ただし、別の DataContext を使用する別のページでほぼ同じです)、

try
{
    Table2 newRow = new Table2
    {
        DomainID = domainID,
        ConfigurationID = configID,
        DirectionID = directionID
    };

    data.Table2.InsertOnSubmit(newRow);
    data.SubmitChanges();
}
catch(DuplicateKeyException)
{
    // Message to user about no duplicates allowed.
}    

DuplicateKeyException ではなく SqlException をスローします。私はまだテストできるので、大したことではありません

e.Number = 2627

キャッチされた SqlException についてですが、なぜ動作が異なるのか混乱しています!?

4

1 に答える 1

0

テーブル 2 の定義に問題があるはずです。具体的には、その主キー列に問題があります。一意の制約があり、それが例外をスローする理由かもしれませんが、それが主キーであるとは限りません。

于 2012-09-13T15:06:40.653 に答える