对Datatable的EnforceConstraint

Glu*_*uip 2 c# datatable constraints strongly-typed-dataset

在数据集上是EnforceConstraints属性,指示是否应启用约束.虽然数据表也可以有约束我不能禁用数据表的约束.

我的情况是我有一个数据表,我在内存中使用其中一列的唯一约束.有时我想暂时禁用唯一约束.我怎样才能做到这一点?我想出的唯一一件事就是删除并重新添加约束.有没有更好的办法?

Sir*_*Lot 8

没有公共EnforceConstraints财产DataTable.我建议使用以下方法之一来禁用约束:

  • 要暂时禁用约束使用方法DataTable.BeginLoadData(),然后DataTable.EndLoadData()再次重新启用它们.
  • 将该DataTable添加到(虚拟)DataSet并将property设置DataSet.EnforceConstraints为false.

注意:禁用检查约束也会禁用检查有关DataColumn.AllowDBNull和的值DataColumn.MaxLength.


Fer*_*ano 6

我的解决方案是这个

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;
            }
Run Code Online (Sandbox Code Playgroud)