2012-09-05 27 views
1

我有tableA在database1和tableA在database2都有相似的列數和名稱基本相同的表。但是它們都有不同的數據。我試圖從database1/tableA中獲取一行並將其插入到database2/tableA中。將datarow從一個表複製到另一個類似的表在不同的數據庫c#

我這是怎麼想這樣做的:

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的。

這是正確的做法嗎?有一個更好的方法嗎?

+0

你可以設置複製,但它取決於你想多長時間複製一次數據,是一次性事件,還是兩個數據庫應該同步? – Patrick

回答

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 [email protected]"INSERT INTO DATABASE2.dbo.TABLEA T2 
          SELECT * FROM DATABASE1.dbo.TABLEA T1 
          WHERE T1.ID = 1"; 
      SqlCommand cmd = new SqlCommand(cmdText, conn); 
      cmd.ExecuteNonQuery(); 
+0

正確的語法可以是'database..table'或'database.schema.table',其中schema是可能是'dbo'。 –

+0

@ OlivierJacot-Descombes:謝謝。編輯。 – Muthukumar

+0

@Muthukumar - 所以我需要在頂部創建兩個連接字符串?我可以同時連接兩個數據庫嗎?請給我看代碼? – NoviceMe

3

我會用一個DB間查詢來做到這一點。在MSS 2005/2008中,只要可以看到對方,就可以將兩臺服務器「連接」在一起。完成後,可以通過以點表示方式指定鏈接服務器名稱,數據庫,模式所有者和表格來引用鏈接數據庫的表格。這將使一個INSERT SELECT:

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

如果兩個數據庫在同一臺服務器上,你甚至不必鏈接;只是前面加上數據庫名稱和架構所有者的遠程數據庫中的表(或者如果它是默認的「DBO」,使用數據庫名和表名之間的兩個點。

+0

如何在這種情況下寫連接字符串?連接到兩臺服務器? – NoviceMe

+0

你不會;你只需要連接到一個數據庫。該數據庫連接到遠程數據庫所需的信息爲服務器所知,連接到該數據庫的任何人都無需知道該信息。 – KeithS

+0

問題是,這個解決方案甚至不需要C#或程序;只需鏈接服務器,然後編寫語句以插入 - 從一個表中選擇到另一個表,然後使用SQL Management Studio或SQLCMD運行它。 – KeithS

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); 
     } 
相關問題