如何在不同的数据库中将表记录从一个表复制到另一个表

时间:2015-12-01 11:23:00

标签: c# asp.net sql-server

我想将数据记录从数据库中的一个表复制到另一个数据库中的另一个表。

我使用两个不同的连接字符串进行源和目标连接。

SQL = "Select * from Employee";
DT = dbCommServer.GetDataTable(SQL);  // DT stores records from one Table.

// Query to insert Records from Source Table to destination Table in different Database.
SQL = "INSERT INTO [EmployeeLocal] ( [EmpID],[EmpName], [Salary]) ";
        SQL += "VALUES ('Select [EmpID],[EmpName], [Salary] from [DT]')";
        dbCommLocal.ExecuteCommand(SQL);

此代码不会将任何记录插入目标表。

请建议以任何合适的方式将DT中存储的表记录插​​入另一个数据库的另一个表中。

最好的问候。

2 个答案:

答案 0 :(得分:0)

你的INSERT不正确,你已经指定了一个VALUES子句,它需要行构造函数,你要指定你的表:

    SQL = "INSERT INTO [EmployeeLocal] ( [EmpID],[EmpName], [Salary]) ";
    SQL += "Select [EmpID],[EmpName], [Salary] from [DT]";
    dbCommLocal.ExecuteCommand(SQL);

更新:

问题是SQL变量已将T-SQL语句作为语句传递,而不是将表DT传递出去。 SQL Server期望数据库中有一个名为DT的表。

退房:Insert entire DataTable into database at once instead of row by row?

答案 1 :(得分:0)

在你的第二个语句中,你从表DT中插入,但DT只存在于你的c#代码中,它在你的sql数据库中不存在,这就是它无法工作的原因。

您需要逐行浏览c#table dt,并为每一行运行一个insert语句。 以下只是伪代码 - 您应该使用参数化查询。但是,我不知道dbCommLocal是什么,以及如何使用参数。

foreach ( DataRow row in DT ) 
{ 
    // first create the insert statement with parameters:
    SQL="INSERT INTO [EmployeeLocal] ( [EmpID],[EmpName], [Salary]) ";
    SQL += "VALUES (" + Row.Item["EmpID"] + ",'" +
                      + Row.Item["EmpName"] + "'," +
                      + Row.Item["Salary"] + ");"

    // Then run it
    dbCommLocal.ExecuteCommand(SQL);
}