Извините, если мой английский не очень хорош, я постараюсь объяснить проблему.
Мне нужно скопировать все данные из таблицы mdb таблицы Acces (связанной с OleDB) в таблицу базы данных MySql (связанной с ODBC)
Я сделал рабочее решение, но оно очень медленное, и поэтому я хочу попробовать другие решения, чтобы проверить, могут ли они дать мне больше производительности.
Решение, соединяющееся с mdb, используя DataReader, затем для каждой строки в Datareader я делаю INSERT в таблицу Mysql (перед копированием я обрезаю таблицу, чтобы она стала пустой)
Записи более 10 КБ, и эта операция очень медленная, и, действительно, мне нужно сделать то же самое для двух других таблиц, также очень больших, как эта.
Я не могу сделать прямую вставку SQL (как INSERT INTO A in ..... SELECT * FROM B
), потому что 1 DB имеет соединение OleDB, а другое - ODBC.
Поэтому я подумал, чтобы попытаться выполнить эту операцию, используя TableAdapters
и DataSet
, но я не могу заставить ее работать.
Проблема в том, что HasChanges
набора данных false
Если вам нужен код, который я могу опубликовать, но я делаю следующее:
- Подключение к MDb
- Создать OleDbTableAdapter
- Создать набор данных
- Заполнить набор данных с помощью TableAdapter
- Подключение к MySqlDB
- Создать ODBCTableAdapter
- Использование команды обновления ODBCTableAdapter с первым набором данных.
Но DS не передал никаких изменений, поэтому он ничего не записывает в БД, поэтому я решил использовать другой набор данных и скопировать данные из DS1 в DS2, чтобы добавить строки, посмотреть, было ли has.changes верно, и сделать команду Update для ODBCTableadapter используя DS2.
Я попытался скопировать данные между наборами данных:
ds2 = ds1.copy
Я также пытался использовать функцию импорта набора данных, циклически обрабатывая DS1
datarows и импортируя все строки от DS1
до DS2
.
В обоих случаях строки добавляются в DS2, но все равно HasChanges
имеет значение false, что я могу сделать?
Просто чтобы прояснить возможные вопросы, которые я не использовал DS.Acceptchanges
, PrimaryKey определен, UpdateCommand
определен, DS имеет данные (я заполняю 2 DataGrids, чтобы проверить это).
Нет ошибок, просто нет данных, записанных в БД.
Есть предложения? Спасибо за совет.