如何将数据从一个数据库导入另一个数据库

时间:2014-10-17 07:47:49

标签: c# mysql sql .net database

我有一个在C#中运行的SQL语句,它从MySQL中的数据库A 中的表中获取数据,并将其插入到数据库B 中的表中。

我在一个SQL语句中执行select和insert,因为数据太多而无法保存在内存中。我的问题是,如何指定目标数据库(数据库B)的连接字符串。

我的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 个答案:

答案 0 :(得分:1)

我引用Mahmoud Gamal的帖子,他在另一篇文章中提出了这个答案:

  

使用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#

答案 1 :(得分:0)

我已使用OUTFILE语法解决了这个问题。这是我在没有使用链接服务器的情况下解决这个问题的唯一方法,这对我的情况来说不实用,因为我无法访问数据库,只接受用户的连接字符串。

我的解决方案首先执行 SELECT 语句并将数据写入文件。接下来,我的 INSERT 语句从文件中获取,并插入到另一个表中。

这种方法因此避免了将数百万条记录存储在内存中,并且因为它们是两个独立的语句,所以我能够使用不同的连接字符串绑定每个记录 - 因此解决了问题:)

代码与此类似:

statement1 = SELECT myFields INTO OUTFILE @file;

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