Копирование таблицы из одной базы данных в базу данных по другому соединению (ADO.NET) - PullRequest
1 голос
/ 17 июня 2011

Я пытаюсь скопировать таблицу в базе данных в другую базу данных на другом соединении в VB.NET, используя OleDb.Если бы они были в одном соединении, я бы просто использовал SELECT INTO, но это не так.У меня есть два разных OleDbConnection, и я не вижу простого способа сделать это.

Сейчас я пытаюсь просто скопировать базу данных в DataTable, используя OleDbDataAdapter, а затем перебрать DataTable и вставить каждую запись вцелевая база данных по одному за раз.Очевидно, это занимает кучу времени для большой БД, с которой я потенциально мог бы иметь дело, и мне приходится иметь дело с экранированием строк, нулевых значений и т. Д.

Есть ли более простой способ сделать это?

Спасибо, Logan

edit - просто чтобы прояснить это: у меня есть два объекта OleDbConnection, один из которых напрямую связан с локальным файлом .mdb на моем компьютере (JET).Другой связан с базой данных на наших серверах (SQLOLEDB).Я хочу сделать это:

"SELECT * FROM fromDB INTO toDB"

Но я не могу, потому что fromDB и toDB находятся на разных соединениях, а объект OleDbCommand привязан только к одному.Единственный способ понять, как это сделать, - это подключиться к fromDB, скопировать его в DataTable, подключиться к toDB и скопировать все данные в DataTable строка за строкой в ​​toDB.Мне было интересно, есть ли более простой способ сделать это.

Ответы [ 2 ]

0 голосов
/ 18 июня 2011

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

Это также дает преимущество в ускорении соединения с сервером с высокой задержкой.

Кроме того, если вы используете параметризованные операторы, вы можете избежать экранирования строк и т. Д.

0 голосов
/ 17 июня 2011

Если вы просто копируете из одного в другое, почему бы вам не сделать это в SQL?

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

http://www.developer.com/db/article.php/3613301/Using-Synonyms-in-SQL-Server-2005.htm

...