EnforceConstraint для Datatable - PullRequest
       31

EnforceConstraint для Datatable

2 голосов
/ 22 июня 2011

В наборе данных есть свойство EnforceConstraints, указывающее, следует ли включить ограничения. Хотя таблица данных также может иметь ограничения, я не могу отключить ограничения для таблицы данных.

В моем случае у меня есть таблица данных, которую я использую в памяти с уникальным ограничением на один из столбцов. Иногда я хочу временно отключить уникальное ограничение. Как я могу это сделать? Единственное, что я придумал, это удаление и повторное добавление ограничения. Есть ли лучший способ?

Ответы [ 5 ]

6 голосов
/ 08 января 2015

Нет публичной EnforceConstraints собственности на DataTable.Я предлагаю один из следующих методов для отключения ограничений:

  • Чтобы временно отключить ограничения, используйте метод DataTable.BeginLoadData(), а затем DataTable.EndLoadData() для их повторного включения.
  • Добавьте эту DataTable в(фиктивный) DataSet и установите для свойства DataSet.EnforceConstraints значение false.

Примечание. Отключение проверочных ограничений также отключает проверку значений, касающихся DataColumn.AllowDBNull и DataColumn.MaxLength.

.
5 голосов
/ 30 октября 2015

Мое решение это

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;
            }
1 голос
/ 02 августа 2011

По сути, я перебрал контринты и удалил их.Выполните действие и повторно добавьте ограничения на таблицу

1 голос
/ 22 июня 2011

Вы можете использовать ограничения, чтобы применить ограничения к данным в DataTable, чтобы сохранить целостность данных.Ограничения применяются, когда свойство System.Data.DataSet.EnforceConstraints для DataSet имеет значение true.

В ADO.NET есть два вида ограничений: ForeignKeyConstraint и UniqueConstraint.По умолчанию оба ограничения создаются автоматически при создании отношения между двумя или более таблицами путем добавления DataRelation к DataSet.Однако вы можете отключить это поведение, указав createConstraints = fals при создании отношения.

0 голосов
/ 23 января 2013

Если в таблице данных есть данные при загрузке, может возникнуть исключение. Для безопасной игры удалите данные, прежде чем загружать их следующим образом:

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

Это сработало для меня:)

...