Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将datarow从一个表复制到不同数据库c中的另一个类似表_C#_Sql Server 2008 - Fatal编程技术网

C# 将datarow从一个表复制到不同数据库c中的另一个类似表

C# 将datarow从一个表复制到不同数据库c中的另一个类似表,c#,sql-server-2008,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"); conn

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


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

您可以改用此查询

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

您可以改为使用此查询

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

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

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

如果两个数据库在同一台服务器上,您甚至不必链接;只需在远程数据库上的表前面加上DB名称和模式所有者,或者如果它是默认的dbo,则在DB名称和表名称之间加上两个点。

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

INSERT INTO TableA --in database1
{
   /*columns*/
}
SELECT /*columns*/ from remoteServer.database2.dbo.TableB
WHERE /*dupe-checking, other conditions*/
        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);
        }


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

您可以设置复制,但这取决于复制数据的频率。这是一次性的,还是两个数据库应该同步?您可以设置复制,但这取决于您希望复制数据的频率。这是一次性的,还是两个数据库应该同步?正确的语法应该是database..table或database.schema.table,其中schema可能是dbo。@Muthukumar-所以我需要在顶部创建两个连接字符串?我可以同时连接到两个数据库吗?你能给我看一下代码吗?@Muthukumar-两个数据库都在不同的服务器上。我先在Sql中尝试了上面的查询,以确保它能正常工作。但它不起作用?@NeyerMe:如果它们在不同的服务器上,一种解决方案是,您需要在一台服务器中创建指向另一台服务器的链接服务器。@Muthukumar-我无法操作数据库有没有办法从C查询它?另一个解决方案是什么?要打开两个不同的连接?正确的语法应该是database..table或database.schema.table,其中schema可能是dbo。@Muthukumar-所以我需要在顶部创建两个连接字符串?我可以同时连接到两个数据库吗?你能给我看一下代码吗?@Muthukumar-两个数据库都在不同的服务器上。我先在Sql中尝试了上面的查询,以确保它能正常工作。但它不起作用?@NeyerMe:如果它们在不同的服务器上,一种解决方案是,您需要在一台服务器中创建指向另一台服务器的链接服务器。@Muthukumar-我无法操作数据库有没有办法从C查询它?另一个解决方案是什么?要打开2个不同的连接?在这种情况下,我将如何编写连接字符串?连接到两台服务器?您不会;您只需要连接到一个数据库。该数据库连接到远程数据库所需的信息由服务器知道,连接到它的任何人都不必知道;只需链接服务器,然后编写语句将select从一个表插入另一个表,并使用SQL Management Studio或SQLCMD运行它。问题是我不想在SQL中执行此操作,我们正在创建一个windows实用程序来完成此操作。所以必须是C代码。你能建议解决这个问题的方法吗?因此,在这种情况下,我将只连接到一台服务器?只需使用链接到另一台服务器的服务器的连接字符串。链接是单向的,尽管您可以在每台服务器上创建一个引用另一台服务器的链接,因此如果带有表a的数据库a链接到带有表B的数据库B,请从程序连接到数据库a。然后将SQL语句构造为字符串,并使用SqlCommand执行它。在这种情况下,如何编写连接字符串?连接到两台服务器?您不会;您只需要连接到一个数据库。该数据库连接到远程数据库所需的信息由服务器知道,连接到它的任何人都不必知道;只需链接服务器,然后编写sta
        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);
        }

将select从一个表插入到另一个表并使用SQL Management Studio或SQLCMD运行。问题是我不想在SQL中执行此操作,我们正在创建一个windows实用程序来完成此操作。所以必须是C代码。你能建议解决这个问题的方法吗?因此,在这种情况下,我将只连接到一台服务器?只需使用链接到另一台服务器的服务器的连接字符串。链接是单向的,尽管您可以在每台服务器上创建一个引用另一台服务器的链接,因此如果带有表a的数据库a链接到带有表B的数据库B,请从程序连接到数据库a。然后将SQL语句构造为字符串,并使用SqlCommand执行它。