![](/img/trans.png)
[英]Can I use DataTables to import data from one database into another?
[英]How to import data from one database to another
我有一个在 C# 中运行的 SQL 语句,它从 MySQL 的数据库 A中的表中获取数据,并将其插入到数据库 B 中的表中。
我正在一个 SQL 语句中执行选择和插入,因为数据太多而无法保存在内存中。 我的问题是,如何指定目标数据库(数据库 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();
}
}
现在的事情是,这是完美的工作。 但是两个数据库都在同一台服务器上并且具有相同的凭据。 如果数据库放在其他地方,我将如何处理?
我引用了 Mahmoud Gamal 的帖子,他在另一篇帖子中提出了这个答案:
将 SELECT ... INTO ... 与完全限定的表名 database.schema.object_name 一起使用,如下所示:
USE DatabaseName;
SELECT * FROM DatabaseName.schemaname.Tablename INSERT INTO
AnotherDatabase.schemaname.AnotherTablename;
然后您可以使用 ADO.net 或其他 API 从 C# 执行此查询。
我已经通过使用 OUTFILE 语法解决了这个问题。 这是我能想到的不使用链接服务器解决这个问题的唯一方法,这对我的情况来说是不切实际的,因为我无法访问数据库,只能接受来自用户的连接字符串。
我的解决方案首先执行SELECT语句并将数据写入文件。 接下来我的INSERT语句从文件中提取,并插入到另一个表中。
因此,这种方法避免了将数百万条记录放入内存中,并且由于它们是两个单独的语句,因此我能够将每个语句与不同的连接字符串绑定 - 因此问题解决了 :)
代码类似于:
statement1 = SELECT myFields INTO OUTFILE @file;
statement2 = LOAD DATA LOCAL INFILE @file INTO TABLE myTable;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.