2014-10-17 48 views
2

得到了一個SQL語句在C#中運行,這從表中數據庫MySQL中的獲取數據,並將其插入到在數據庫B表。我如何從一個數據庫導入數據到另一個

我正在執行選擇並插入到一條SQL語句中,因爲數據太多而無法保存在內存中。我的問題是,我將如何指定目標數據庫(數據庫B)的連接字符串。

我的SQL語句,像這樣:

sql = INSERT INTO Database_B.Table (SELECT * FROM Database_B.Table); 

因爲它是現在,我只指定數據庫A的連接字符串:

sourceDatabaseConnectionString = "Server=localhost;Port=3306;Database=Database_A;Uid=root;Pwd=root;"; 

using (MySqlConnection connection = new MySqlConnection(sourceDatabaseConnectionString)) 
{ 
    connection.Open(); 

    using (MySqlCommand command = new MySqlCommand(sql, connection)) 
    { 
     command.CommandTimeout = 0; 
     command.ExecuteNonQuery(); 
    } 
} 

現在的事情是,這是工作完美。但是這兩個數據庫都在同一臺服務器上,並具有相同的憑據。如果數據庫放置在其他地方,我將如何處理它?

+2

我認爲你唯一的選擇是鏈接服務器。 – artm 2014-10-17 07:49:35

回答

0

我以OUTFILE語法解決了這個問題。這是我可以考慮解決這個問題的唯一方法,而不使用鏈接服務器,這對我的情況並不實用,因爲我無法訪問數據庫,只接受來自用戶的連接字符串。

我的解決方案首先執行SELECT語句並將數據寫入文件。接下來,我的INSERT語句從文件中提取,並插入到另一個表中。

因此,這種方法避免了把數以百萬計的記錄在內存中,因爲它們是兩個獨立的語句,我能結合每一個不同的連接字符串 - 因此,問題解決了:)

的代碼與此類似:

statement1 = SELECT myFields INTO OUTFILE @file; 

statement2 = LOAD DATA LOCAL INFILE @file INTO TABLE myTable; 
1

我引用馬哈茂德·賈邁勒的帖子誰提出這個答案在另一篇文章:

使用SELECT ... INTO ...有一個完全合格的表名 database.schema.object_name,就像這樣:

USE DatabaseName;  
SELECT * FROM DatabaseName.schemaname.Tablename INSERT INTO 
AnotherDatabase.schemaname.AnotherTablename; 

然後你可以使用ADO.net或其他API執行從C#此查詢。

來源:Inserting result of a SQL query from one database to another in C#

+0

這在技術上是我現在正在做的。我需要的是根據源和目標數據庫的連接字符串以編程方式完成它。 – 2014-10-17 07:58:44

+0

你知道2個數據庫的信息是什麼? – 2014-10-17 08:00:27

+0

我不知道太多遺憾。我想將數據從一個數據庫(任何位置的任何數據庫)複製到另一個數據庫(任何位置的任何數據庫)。如果我將它分成兩個單獨的查詢,這是可能的,但是我無法在內存中存儲任何數據,因爲我正在處理數百萬條記錄。 – 2014-10-17 08:02:13

相關問題