Pages

2015/04/16

制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。

主に古い .NET アプリケーションにおいて、突然この意味不明なエラーが出る場合がある。このエラーは、TableAdapter と xsd (データセット)を使用しているアプリケーションで、参照先のデータベース定義を変更した際に出る(古いというのは、よもやこの構成で新規開発をしているところはないと思うため)。
xsd とは、データベース構造の定義ファイルのようなもので、Visual Studio 2003 や 2005 の時代の初心者向けの解説書などによく出てきた(GUI から、ノーコーディングでデータベースアクセスが可能)。

この定義というのが曲者で、アクセス時にはデータベース構造と完全に一致している必要がある。そのため、テーブル変更等を行った場合は、この定義ファイルも再構築しないと突然 落ちてしまう。
最近の Entity Framework だと、クリック一発で更新可能だが、xsd データセットの場合は、削除 → 新規作成 をしないとうまく動かなくなる(たぶん)。
  1. xsd ファイルをデザイナー表示する。
  2. エラーとなっている定義の構成を開く(デザイナーは表示方法を変更するだけでソース管理等で差分になってしまうので注意)。
  3. SQL をコピーしておく。
  4. エラーとなっている定義を削除する。
  5. 定義の再作成。先ほどの SQL を貼り付ける。

xsd データセットは業務ではあまり使われていないかもしれないが、ちょっとしたツールなどだと使っているケースもあるので、テーブルの構造を変えた場合は注意が必要。
Related Posts Plugin for WordPress, Blogger...