Пакетное обновление с использованием DataAdapter - PullRequest
0 голосов
/ 22 ноября 2008

У меня есть ситуация, когда у меня есть куча команд SQL Update, которые необходимо выполнить. Я знаю, что DataSets может выполнять пакетные обновления, но единственный способ, которым я смог это сделать, - это сначала загрузить всю таблицу в набор данных. Что если я хочу обновить только подмножество записей в таблице?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2008

Самый простой способ - загрузить таблицу с необходимыми строками (строками, которые вы хотите обновить). Дважды проверьте, что RowState "Вставлено". Присвойте свойство InsertCommand адаптера вашей хранимой процедуре (обернутой в SqlCommand), которая выполняет «обновление», эта подстройка обеспечит обновление всех строк, присутствующих в таблице.

Основополагающим здесь является следующее: DataAdapter запускает команду UpdateCommand для строк, состояние которых обновлено, запускает InsertCommand для строк, состояние которых вставлено, и, наконец, DeleteCommand для строк, состояние которых удалено.

1 голос
/ 22 ноября 2008

РЕДАКТИРОВАНИЕ: Исходя из вашего комментария, я бы рекомендовал использовать метод массового копирования, чтобы сначала перейти к промежуточной таблице. Затем вы можете сделать одно обновление вашей реальной таблицы на основе промежуточной таблицы.

=========

Один из способов - создать команду SQL самостоятельно; Тем не менее, я бы рекомендовал прочитать о возможностях SQL-инъекций, чтобы защитить себя. В зависимости от вашей ситуации и вашей платформы возможны другие варианты.

Например, если вы имеете дело с большим количеством данных, вы можете выполнить массовый импорт в таблицу хранения, для которой вы затем выполните одну команду обновления. Я также добился большого успеха, передавая записи в формате XML (в моей среде я обнаружил, что мне нужно не менее 50 строк, чтобы компенсировать затраты на загрузку DOM, и я знал, что проблемы масштабируемости не были в моем случае).

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

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

  • Josh

Остерегайтесь преждевременной оптимизации, это может быть убийственно!

...