2011-06-22 22 views
2

データセットには、制約を有効にする必要があるかどうかを示すEnforceConstraintsプロパティがあります。データテーブルも制約を持つことができますが、データテーブルの制約を無効にすることはできません。DatatableでのEnforceConstraint

私のケースでは、私がメモリ内で使用しているカラムの1つにuniqueconstraintを使用してdatatableを使用しています。時々私は一時的にユニーク制約を無効にしたい。これどうやってするの?私が思いついた唯一のことは、制約を取り除いて再追加することです。より良い方法がありますか?

答えて

1

基本的に私がしたことは、コントラインをループして取り除くことです。テーブルに制約を加えて再入力する

0

データの整合性を維持するために、制約を使用してDataTableのデータに制限を加えることができます。制約は、DataSetSystem.Data.DataSet.EnforceConstraintsプロパティがtrueの場合に適用されます。

ADO.NETには2種類の制約があります:ForeignKeyConstraintとUniqueConstraintです。既定では、にDataRelationを追加して、2つ以上のテーブル間の関係を作成すると、両方の制約が自動的に作成されます。ただし、この動作を無効にするには、関係を作成するときにcreateConstraints = falsを指定します。

+0

ですけれども – Gluip

0

ロード時にデータテーブルにデータがある場合、この例外がスローされることがあります。この問題を解決するには 、このようにそれをロードする前に、あなたのDataTableをクリア:

MyDataTable.Clear(); 
MyDataTable.Load(MyDataReader, LoadOption.OverwriteChanges); 

この

は私のために働いた:) DataTableには公共 EnforceConstraintsプロパティはありません

4

。私は制約を無効にするには、次のいずれかの方法を提案している。

  • 一時的に再びそれらを再度有効にする方法DataTable.BeginLoadData()を使用して、DataTable.EndLoadData()制約を無効にします。
  • DataTableを(ダミー)DataSetに追加し、プロパティDataSet.EnforceConstraintsをfalseに設定します。

注:チェック制約を無効にすると、DataColumn.AllowDBNullおよびDataColumn.MaxLengthに関する値のチェックも無効になります。

2

私のソリューションは...説明のためのおかげで、質問を約一時的制約を無効にして、この

using (IDataReader reader = ExecuteReader(sql)) 
      { 
       DataTable dt = new DataTable(); 
       using (DataSet ds = new DataSet() { EnforceConstraints = false }) 
       { 
        ds.Tables.Add(dt); 
        dt.Load(reader, LoadOption.OverwriteChanges); 
        ds.Tables.Remove(dt); 
       } 
       return dt; 
      }