1

SQL Server 2008 にアクセスするために Linq-to-SQL を使用しています。データベースでは、いくつかの列に UNIQUE インデックスがあります。

その列に重複データを入力すると、LINQ はエラー メッセージと共に SqlException をスローします。例外が UNIQUE インデックスに関連しており、他の SQL エラーではないことを確認する方法はありますか?

私が知っている解決策は、RegExを使用して例外メッセージを解析することですが、よりエレガントなアプローチがあることを知りたいですか?

4

2 に答える 2

3

プロパティを使用できSQLException.Numberます。

詳細については、Errorsそれぞれが独自のコレクションを反復することができますnumber


余談ですが、過去に独自のカスタムシリアライザーを作成しましSqlExceptionたが、4.5ToString()ではオーバーライドされているように見えるため、現在は必要ありません。

于 2012-09-05T12:39:27.100 に答える
1

制約された列に何らかの値を持つ行が既にあるかどうかについて、一意の制約を持つテーブルを確認できます。

            if (linqDataContext.ConstrainedTable.Any(row => row.ConstrainedColumn == somevalue))
            {
                //show a message, saying you've already got this value
                //and it is not applicable    
            }
            else
            {
                //accept your changes with smth like this:
                linqDataContext.SubmitChanges();
            }   

もう 1 つの質問は、このアプローチが適用できるかどうか、つまり、このクエリのコストが例外をキャッチして処理するコストを圧倒するかどうかです。制約された列がインデックス化されている場合、その列に対する単純なリクエストはそれほどコストがかからないようにする必要があります。

于 2012-09-05T23:57:50.870 に答える