#.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.