【问题标题】:Copy datarow from one table to another similar table in different database c#将数据行从一个表复制到不同数据库c#中的另一个类似表
【发布时间】:2015-04-27 14:27:56
【问题描述】:

我在 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。

这是正确的方法吗?有没有更好的方法来做到这一点?

【问题讨论】:

  • 您可以设置复制,但这取决于您想要复制数据的频率。是一次性的,还是两个数据库应该同步?

标签: c# sql-server-2008


【解决方案1】:

我会使用数据库间查询来做到这一点。在 MSS 2005/2008 中,您可以将两个服务器“链接”在一起,只要它们可以互相看到。完成后,您可以通过以点表示法指定链接服务器名称、数据库、模式所有者和表来引用链接数据库的表。这将允许插入选择:

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

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

【讨论】:

  • 在这种情况下我将如何编写连接字符串?要连接到两台服务器?
  • 你不会;您只需要连接到一个数据库。该数据库连接到远程数据库所需的信息是服务器知道的,连接到它的任何人都不必知道。
  • 问题是,这个解决方案甚至不需要 C# 或程序;只需链接服务器,然后编写语句以从一个表插入选择到另一个表并使用 SQL Management Studio 或 SQLCMD 运行它。
  • 问题是我不想在 sql 中执行此操作,我们正在创建一个 Windows 实用程序来完成此操作。所以必须在 C# 代码中。你能建议解决方案吗?那么在这种情况下,我将只连接到一台服务器?
  • 只需使用链接到另一台服务器的连接字符串即可。链接是单向的(尽管您可以在每台服务器上创建一个链接来引用另一个服务器),因此如果带有表 A 的数据库 A 链接到带有表 B 的数据库 B,请从您的程序连接到数据库 A。然后将 SQL 语句构造为字符串并使用 SqlCommand 执行。
【解决方案2】:

您可以改用此查询

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();

【讨论】:

  • 正确的语法是database..tabledatabase.schema.table,其中架构可能是dbo
  • @Muthukumar - 所以我需要在顶部创建两个连接字符串?我可以同时连接到两个数据库吗?能给我看看代码吗?
  • @Muthukumar - 两个数据库都在不同的服务器上。我首先在 Sql 中尝试了上述查询以确保它有效。但它不起作用?
  • @NoviceMe : 如果他们在不同的服务器上,一个解决方案就像,你需要在一个服务器上创建一个指向另一个服务器的链接服务器。
  • @Muthukumar - 我无法操作数据库有没有办法从 C# 查询它?另一种解决方案是什么?要打开 2 个不同的连接?
【解决方案3】:
        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);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多