将datarow从一个表复制到另一个表中的另一个类似表c#

时间:2012-09-05 15:59:41

标签: c# sql-server-2008

我在database1中有tableA,而database2中的tableA都有相似数量的列和名称基本相同的表。但两者都有不同的数据。我试图从database1 / tableA获取一行并将其插入database2 / tableA。

我正在考虑这样做:

SqlConnection conn = new SqlConnection("database1")
SqlCommand cmd = new SqlCommand("Select * from tableA where id = 1");
connection.Open()
SqlDataReader reader = cmd.ExecuteReader();

if(reader !=null )
var data = reader;

connection.Close();

然后我做同样的上述步骤打开一个新连接,并尝试将数据变量值插入到database2中的tableA。

这是正确的做法吗?有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

我会使用数据库间查询来完成此操作。在MSS 2005/2008中,只要可以看到彼此,就可以将两个服务器“链接”在一起。完成后,您可以通过以点表示法指定链接服务器名称,数据库,架构所有者和表来引用链接数据库的表。这将允许INSERT SELECT:

INSERT INTO TableA --in database1
{
   /*columns*/
}
SELECT /*columns*/ from remoteServer.database2.dbo.TableB
WHERE /*dupe-checking, other conditions*/

如果两个数据库在同一台服务器上,您甚至不必链接;只使用数据库名称和架构所有者(或者如果它是默认的“dbo”)在远程数据库上作为前缀,在数据库名称和表名之间使用两个点。

答案 1 :(得分:1)

您可以使用此查询

INSERT INTO DATABASE2.dbo.TABLEA T1
SELECT * FROM DATABASE1.dbo.TABLEA T2
WHERE T2.ID = 1

以下c#代码应该可以工作,前提是两个数据库都在同一台服务器上。

SqlConnection conn = new SqlConnection("Enter Connection String of DB, in which you insert the records.(in ur example it is,DATABASE2)");
            string cmdText=@"INSERT INTO DATABASE2.dbo.TABLEA T2
                             SELECT * FROM DATABASE1.dbo.TABLEA T1
                             WHERE T1.ID = 1";
            SqlCommand cmd = new SqlCommand(cmdText, conn);
            cmd.ExecuteNonQuery();

答案 2 :(得分:0)

        string connection_String = @""; //your connection string
        try
        {
            using (SqlConnection con = new SqlConnection(connection_String))
            {
                string sql = "INSERT INTO table_copy_to " +
                    "(column1, column2, column3 ... columnn) " +
                "SELECT column1, column2, column3 ... column FROM table_copy_from";
                con.Open();
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    int rowEffected = cmd.ExecuteNonQuery();
                    if (rowEffected > 0)
                    {
                        Console.WriteLine("Excuted Successfully ...");
                    }
                    else
                    {
                        Console.WriteLine("Some problem occur");
                    }
                } 
            }
        }

        catch (Exception ex)
        {
            Console.WriteLine("Exception : " + ex);
        }