Пропустите изменения, которые уже существуют

#.net #ado.net

Вопрос:

Существует ли какой-либо рекомендуемый способ заставить DbDataAdapter.Update(DataTable table) метод игнорировать вставки в объект DataTable, которые уже вставлены в базовую базу данных (и имеют одинаковые значения во всех столбцах)?

Комментарии:

1. Методы удаления медленнее, чем простое разрешение сбоя базовой базы данных при дублировании ключевых значений.

2. @Strom он не должен потерпеть неудачу. Ему просто нужно пропустить эти строки, вместо того чтобы пытаться вставить то, что уже вставлено.

Ответ №1:

Три способа сделать это.

1 — Вы можете добавить массив столбцов PrimaryKey в таблицу данных, которую вы не хотите дублировать.

 DataTable table = GetDataTable();

DataColumn [] pKey = new DataColumn[2];
pKey[0]  = table.Columns["a"];
pKey[1] = table.Columns["b"];

table.PrimayKey = pKey;
 

Это предотвратит вставку повторяющихся строк путем добавления a System.Data.ConstraintException . Вы можете предотвратить возникновение ограничения, используя .Find метод DataTable . Это приведет к поиску primary keys . Если он вернется null , вы можете безопасно вставить строку, в противном случае он вернет строку, которая уже существует в таблице.

2 — Или вы можете зациклить таблицу, чтобы проверить, существует ли дублирующая строка.

3 — Или вы могли бы использовать .Выберите метод DataTable, чтобы вернуть любые строки, которые могут соответствовать вашему ограничению.

 DataTable table = GetDataTable();

DataRow [] rows = table.Select( "dex_row_id = '5'" );

if ( rows.Length == 0 )
    //it is safe to insert the row
else
    //display your message to the user.