2014-10-17 4 views
2

У меня есть инструкции SQL работает в C#, который извлекает данные из таблицы в базе данных A в MySQL, и вставляет его в таблицу в базе данных B.Как импортировать данные из одной базы данных в другую

Я выполняю выбор и вставляю в один оператор SQL, так как данных слишком много для хранения в памяти. Мой вопрос в том, как указать строку соединения базы данных назначения (база данных B).

My SQL заявление так:

sql = INSERT INTO Database_B.Table (SELECT * FROM Database_B.Table); 

Как это прямо сейчас, я указать строку подключения только базы данных A:

sourceDatabaseConnectionString = "Server=localhost;Port=3306;Database=Database_A;Uid=root;Pwd=root;"; 

using (MySqlConnection connection = new MySqlConnection(sourceDatabaseConnectionString)) 
{ 
    connection.Open(); 

    using (MySqlCommand command = new MySqlCommand(sql, connection)) 
    { 
     command.CommandTimeout = 0; 
     command.ExecuteNonQuery(); 
    } 
} 

Теперь дело в том, что это работает в совершенстве. Но обе базы данных находятся на одном сервере и имеют одинаковые учетные данные. Как я могу обработать его, если база данных будет размещена в другом месте?

+2

Я думаю, что ваш единственный вариант связан с серверами. – artm

ответ

0

Я решил эту проблему с помощью Outfile синтаксиса. Это был единственный способ решить это без использования связанных серверов, что не подходит для моей ситуации, поскольку у меня нет доступа к базам данных и просто принимайте строки подключения от пользователей.

Что мое решение делает, сначала выполнить оператор SELECT и записать данные в файл. Следующий мой Оператор INSERT извлекает из файла и вставляет в другую таблицу.

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

код похож на этот :

statement1 = SELECT myFields INTO OUTFILE @file; 

statement2 = LOAD DATA LOCAL INFILE @file INTO TABLE myTable; 
1

Цитирую пост Махмуда Гамаля, который предложил этот ответ в другом посте:

Использование SELECT ... INTO ... с полностью квалифицированными именами таблиц database.schema.object_name, как это:

USE DatabaseName;  
SELECT * FROM DatabaseName.schemaname.Tablename INSERT INTO 
AnotherDatabase.schemaname.AnotherTablename; 

Затем вы можете использовать ADO.NET или другой API, чтобы выполнить этот запрос из C#.

Источник: Inserting result of a SQL query from one database to another in C#

+0

Это технически то, что я делаю прямо сейчас. Мне нужно, чтобы это было сделано программно на основе строк подключения исходной и целевой базы данных. –

+0

Какая информация вы знаете о 2 базах данных? –

+0

Я бы не знал многого, к сожалению. Я хотел бы скопировать данные из одной базы данных (любой базы данных в любом месте) в другую базу данных (любая база данных в любом месте). Это возможно, если я разделил его на два отдельных запроса, однако я не могу хранить данные в памяти, поскольку я имею дело с миллионами записей. –

Смежные вопросы