Возможно много увеличить этот вид операции.
Чтобы сделать эту операцию полезной (я имею в виду быстрый и довольно безопасный), вы можете использовать CE DataAdapter.
По образцу, не заботясь о клавишах, перечисленные ниже шаги могут помочь вам:
- Убедитесь, что таблицы sorce и target имеют одинаковую структуру полей;
- Клонирование виртуального источника данных с источником данных из исходной базы данных (ваш выбор);
- Создать команду CE с именем таблицы в виде commandtext (TableDirect в качестве типа команды);
- Создание адаптера данных CE из команды CE;
- Создание компоновщика команд CE из CE dataatapter;
- Передать команду вставки из построителя команд CE в адаптер данных CE;
Скопируйте "n" строк пакета из вашего источника данных в целевой объект данных (клон), сделав что-то вроде этого:
'... previous codes
For Each currentRow In sourceTable.Rows
'u can do RaiseEvent Processing(currentRow, totalRows) here with DoEvents
If targetTable.Rows.Count < 100 Then
targetTable.InportRow(currentRow)
targetTable.Rows(targetTable.Rows.Count - 1).SetAdded
Else
'...Here you wll call the CE DataAdapter's Update method (da.Update(targetTable))
'...and then be sure you clone the targetTable again, erasing all previous rows.
'...Do a clone again, don't do just a "clear" in the Rows collection.
'...If u have an Autoincrement it will break all Foreign Keys.
End If
Next
'... next codes
Таким образом, вы можете обновить несколько строк без особого времени.
У меня есть несколько приложений, использующих этот метод, и средняя скорость составляет около 1500 строк в секунду в таблице с 5 полями NTEXT (медленно) и 800000 строк.
Конечно, все зависит от структуры вашего стола. IMAGE и NTEXT оба являются медленными типами данных.
P.S .: Как я уже сказал, этот метод не имеет большого значения для ключей, поэтому будьте осторожны.