Как скопировать заполненную MYSQL-таблицу в другую базу данных в C # - PullRequest
0 голосов
/ 19 августа 2011

Я использую C #, .net 3.5 и MySQL-Database.У меня есть заполненная таблица на сервере 1, которую я хочу скопировать на сервер 2. На сервере 2 у меня такая же структура таблицы, но таблица пуста.Теперь я хочу скопировать данные с Сервера 1 на Сервер 2. Я подключаюсь к Серверу 1 и заполняю информацию в DataSet - без проблем.Затем я открываю второе соединение с другим сервером.Моя проблема в том, как я могу сохранить этот набор данных на втором сервере?Команда Update () - не имеет никакого эффекта, даже если я установил тот же UpdateCommand и InsertCommand-CommandText, что и для Сервера 1. Я не получаю сообщение об ошибке при использовании Update (DataSet, «TableName»), но таблица все еще пуста.Для баз данных MSSQL BulkCopy был бы вариантом, но кажется, что нет никаких эквивалентов для баз данных MySQL!?

Я не хочу использовать mysqldump, я хочу сделать это программно в C # на клиенте.

Есть идеи?

РЕДАКТИРОВАТЬ:

        MySqlConnection conn_DB1 = new MySqlConnection(connString_DB1);
        MySqlDataAdapter adp_DB1 = new MySqlDataAdapter("select * from myDB", conn_DB1);

        DataSet theDataSet_DB1 = new DataSet();
        adp_DB1.Fill(theDataSet_DB1, "myDB"); //everything is fine, the Data is there


        MySqlConnection conn_DB2 = new MySqlConnection(connString_DB2);
        MySqlDataAdapter adp_DB2 = new MySqlDataAdapter("select * from myDB", conn_DB2);

        DataSet theDataSet_DB2 = new DataSet();
        adp_DB1.Fill(theDataSet_DB2, "myDB"); //this DataSet is empty, of course

        theDataSet_DB2 = theDataSet_DB2.Copy(); //the data is updated, the second DataSet has all the rows as expected

        adp_DB2.Update(theDataSet_DB2, "myDB"); //no error on execution, but the table is still empty on the second server

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Строки в DataSet_DB2.Tables «неизменны», поэтому происходит любое. Вы должны пометить строки как «добавленные», прежде чем обновлять их.

foreach (DataTable table in theDataSet_DB2.Tables)
  foreach (DataRow row in table.Rows)
    row.SetAdded ();

Необходимо создать MySqlCommandBuilder, связанный с dataAdapter:

new MySqlCommandBuilder (dataAdapter);
0 голосов
/ 19 августа 2011

Я не уверен, какую библиотеку вы используете для доступа к БД MySQL ...

"Чистый ADO.NET" с оригинальным провайдером ADO.NET из MySQL см. В этой статье http://www.codeproject.com/KB/database/GenericCopyTableDataFcn.aspx

Если вы используете коннектор MySQL .NET, существует класс с именем MySqlBulkLoader, см. http://dev.mysql.com/doc/refman/5.1/en/connector-net-programming-bulk-loader.html.этот класс принимает AFAIK файл - поэтому для его использования сначала нужно создать файл из исходной таблицы ...

ЕСЛИ вы используете компоненты Devart MySQL, вы можете:

MySqlLoader ML = new MySqlLoader("myDB", conn_DB2);
ML.CreateColumns();
ML.LoadTable(theDataSet_DB1.Tables[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...