Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Перенос данных из одной базы в другую


Автор: frodo17 5.11.2007, 18:00
Есть две базы с одинаковой структорой( на разных компах, access 97 ). Необходимо переносить "объект" с одной БД в другую ( информация об объекте в 3 таблицах ). Это мой первый проект на 
c#(читаю книги и пока что путаюсь в терминах smile ). На данный момент алгоритм следующий: выбираю с исходной бд данные в dataset через dataadapter ( создаю в dataset 3 таблицы ), и записываю их в xml на носитель ( сети между компами нет ). На другом компе нахожу нужные значения id таблиц в которые буду добавлять инфу... Подскажите оптимальный способ вставки данных из xml в базу. В таблицах много полей и не хочется делать вставку новой строки + вставки значений по полям( в коде ). Всетаки структура баз одинаковая, помогите этим воспользоваться smile.
 Как я понимаю приблизительный алгоритм 

da1.Fill(ds1)
ds1.WriteXml()
ds2.ReadXml()
da2.Update(ds2)

Создаю пустой ds2 считываю Xml. Создаю da2 связываю его с базой, задаю SelectCommand. Для da2.Update( ) необходим InsertCommand, как в нем указать sql запрос на добавление для трех таблиц ? Через inner join? Поправте пож. если я ошибаюсь ( а мне кажется что ошибаюсь smile) . Т.е. если можно чуть поподробнее этот момент

ds2.ReadXml()
da2.Update(ds2)

Заранее спасибо.

Автор: thomas 5.11.2007, 18:13
frodo17, 
Приветствую на форуме.  smile 
В принципе подход правильный.
Единственное что посоветовал бы
это вместо 
Цитата
Создаю пустой ds2
 я бы сначала создал da2 и выполнил запрос к базе с ложным условием(select * from myTable where id=-1), что бы получить в ДатаСет готовые таблицы(наименования полей, типы данных) но пустые.
Тогда после этого можно считать данные из xml и выполнить Insert данных в бд2. Для формирования команды можно воспользоваться следующим
Код

cmdBuild = new SqlCommandBuilder(dbDa);
dbDa.InsertCommand = cmdBuild.GetInsertCommand();
dbDa.Update(ds.Tables[tableName]);

он сам тебе сгенерит нужную команду.
Удачи.

Автор: frodo17 7.11.2007, 12:14
Продолжаю копать дальше  smile .

при использовании CommandBuilder, в InsertCommand.ComandText запрос вида 
Цитата

INSERT INTO Table ( id,f1,f2... )
VALUES ( ?,?,?.. )


в моем dataset 3 таблицы, по одной записи в каждой. id обновляю до update. Подскажите как можно вставить запись из таблицы dataset в таблицу базы,  что бы не заморачиваться с параметрами ( полей в таблицах довольно много ).  

Автор: thomas 7.11.2007, 18:04
frodo17, 
Цитата

Подскажите как можно вставить запись из таблицы dataset в таблицу базы,  что бы не заморачиваться с параметрами 

Выполнить команду
Код

dbDa.Update(ds.Tables[tableName]);

тебе ж не надо писать команду в ручную и подставлять в нее значения.

Автор: alik_voodoo 8.11.2007, 17:21
Для переноса данных из одной базы в другую, если данных много, есть специальный объект BulkCopy называется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)