Informix 外部結合での非 null、一意、または外部キー制約の競合の処理
Informix データベースで外部結合を実行すると、「制約を有効にできません。1 つ以上の行に、非 null、一意、または外部キー制約に違反する値が含まれています。」というエラーが発生する場合があります。このエラーは、結果セットに同じ主キーを持つ重複行、または NULL 値を許可しない列に NULL 値を持つ行が含まれていることを示します。
考えられる理由
このエラーの考えられる原因は次のとおりです:
トラブルシューティング
エラーの具体的な原因を特定するには、データベースに対してクエリを直接実行してみてください。結果セット内の制限された列に重複行または null 値がないかチェックします。
Try/Catch と GetErrors を使用する
正確なエラーを特定するには、生成されたコードに Try/Catch ブロックを追加し、例外が発生した時点でブレークします。 C# では、これは、エラーが発生したテーブルで GetErrors を呼び出すことによって実現されます:
<code class="language-c#">try { DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat); } catch (Exception e) { if (e is System.Data.SqlClient.SqlException) { var tableWithErrors = dt.GetErrors()[0]; Console.WriteLine("错误行: " + tableWithErrors.RowError); } }</code>
VB.NET のコードは次のとおりです:
<code class="language-vb.net">Try Dim dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat) Catch e As SqlException If TypeOf e Is SqlException Then Dim tableWithErrors = dt.GetErrors(0) Console.WriteLine("错误行: " + tableWithErrors.RowError) End If End Try</code>
これにより、エラーを含むデータの行が、RowError に保存されている特定のエラー メッセージとともに表示されます。
問題を解決してください
このエラーを解決するには、制約に違反している列を特定し、それに応じてデータを修正します。重複行の場合は、クエリが同じ主キーを持つ複数の行を返さないようにしてください。 NULL 値の場合は、影響を受ける列に NULL 値を許可するようにデータベース スキーマまたはデータセット定義を更新します。
以上がInformix 外部結合での制約違反を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。