2010-12-10 16 views
1

Visual Studio 2008の.NET 3.5ではC#でプログラムを作成しています.2つのDataTable、AとBを持つDataSetがあります。テーブルAはDataColumn Y表Bでは列Z、さらに両方の表の列が増えています。 Y列とZ列の両方が、一意のAutoIncrementing列に設定されています。ADO.NET DataSet - 異なるテーブルからの列のユニーク制約があります

私は、YとZもそれらの2つの間でユニークであることを希望します。同様に、テーブルAにすでにY列に3の行があり、テーブルBに新しい行を作成していて、その新しい行のZ列に3を入れたい場合は、代わりに3をスキップします私は、アプリケーションを実行し、それがそのコードに取得する場合、私は最初の行に次のエラーを取得し、

myDataSet.Tables["A"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 
myDataSet.Tables["B"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 

しかし:と私はそれが動作するはずのように見える何かを試してみました。4.

に入れます:
メッセージ= "レコード生成することはできません

System.Data.InvalidConstraintExceptionは、未処理でしたe異なるテーブルに属する列のキー。まあ、私はそれがアクティブで作ってそれを置くために他にどこ本当にわからないんだけど、ので、私は両方のテーブルに同じUniqueConstraintを追加
ソース=「System.Data」

理由があります。列YとZ以外には、テーブルを1つにまとめることはできません。

誰でもこれを行う方法はわかりますか? MSDNのドキュメントには複数のテーブルは含まれていません。他に誰もこれを試していないようです。


これで問題は解決しました。私のプログラムでは、私がすでに扱っているテーブルを追跡するために、いくつかの外部キーチェックを使用していました。これから別の方法をとる方が簡単かもしれないと思っていましたが、私の現在のテクニックを維持することに決めました(私のプログラムの他のコンポーネントにもっと詳細なアイデンティティ情報を入れるなど、うまくいくことが判明した。

私がやったことは、私がここに投稿した私の質問を本当に解決するものではありません。私はここに答えを得ることを望んでいるGoogle社員にお詫び申し上げます。

答えて

2

MSDN documentationは、具体的には、単一のデータテーブルに言及:

単一の列または データテーブル(強調鉱山)

の列 の配列のいずれかに割り当てることができるUniqueConstraintオブジェクト

DataTableでこれを実行することはできませんが、手動で動作させる必要があります。

+0

私はそれを読んだときに何とかそれを逃した。うん、私は実際それを手動で行うかもしれない。 DataSetにはこれを強制する方法がないのは珍しいことです。私はそれがよくあることだと思っていました。 私は、自動増分列を持つ唯一の目的のために新しいテーブルを作成し、そこから新しい行を追加するテーブルに反映させることができます。 – pgn674

+0

@ pgn674:これは実際のデータベースでどのように行いますか?それはそれほど一般的ではありません。 –

関連する問題