Импортировать данные таблицы в базу данных, которая была предоставлена ​​ранее - PullRequest
0 голосов
/ 25 августа 2009

Я работаю над пером, которое экспортирует некоторые таблицы (~ 50) в файл на диске и импортирует файл обратно в базу данных. Экспортировать довольно просто, сериализовать набор данных в файловый поток. Но при импорте: структуру таблицы нужно определять динамически. Что я сейчас делаю:

foreach table in dataset
   (compare table schemas that in db and imported dataset)
   define a batch command
   foreach row in table
      contruct a single insert sqlcommand,add it to batch command
   execute batch insert command

это очень неэффективно, и я также сталкиваюсь с некоторой проблемой, связанной с преобразованием типа данных из набора данных в базу данных. Итак, я хочу знать, есть ли хороший способ сделать это?

Edit:

Фактически, импорт и экспорт - это 2 функции (кнопки) в программе. В пользовательском интерфейсе есть сетка, в которой перечисляется множество таблиц, что мне нужно реализовать, чтобы экспортировать данные выбранных таблиц в файл диска и импортировать данные обратно. в базу данных позже

Ответы [ 4 ]

2 голосов
/ 25 августа 2009

Почему бы не использовать встроенную функцию резервного копирования и восстановления SQL Server? Вы можете делать постепенное восстановление данных, и это самый быстрый способ экспорта, а затем импорта данных снова.

Существует множество очень сложных опций, позволяющих учесть некоторые дополнительные случаи, но в основе его лежат две команды: Backup Database и Restore Database.

backup database mydb to disk = 'c:\my\path\to\backup.bak'

restore database mydb from disk = 'c:\my\path\to\backup.bak'

При работе с базами данных размером с ТБ, по моему опыту, это занимает от 45 минут до часа. Намного быстрее, чем пытаться пройти каждый ряд!

0 голосов
/ 27 августа 2009

Я наконец выбрал SqlCommandBuilder для автоматической сборки команды вставки

См Класс SqlCommandBuilder

0 голосов
/ 25 августа 2009

Вы можете использовать сериализацию XML, но вам понадобится хороший инструмент ORML, такой как NHibernation и т. Д., Чтобы помочь вам в этом. Сериализация XML сохранит свой тип данных и будет работать без сбоев.

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

0 голосов
/ 25 августа 2009

Я предполагаю, что вы используете сервер SQL? если так, то я бы

а) убедитесь, что имена таблиц отображаются в экспорте б) загляните в команду BulkCopy. это позволит вам вставить всю таблицу внутрь. Таким образом, вы сможете просматривать циклы данных и массово копировать каждую из них.

using (SqlBulkCopy copy = new SqlBulkCopy(MySQLExpConn))
{
    copy.ColumnMappings.Add(0, 0);
    copy.ColumnMappings.Add(1, 1);
    copy.ColumnMappings.Add(2, 2);
    copy.ColumnMappings.Add(3, 3);
    copy.ColumnMappings.Add(4, 4);
    copy.ColumnMappings.Add(5, 5);
    copy.ColumnMappings.Add(6, 6);
    copy.DestinationTableName = ds.Tables[i].TableName;
    copy.WriteToServer(ds.Tables[i]);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...