2013-05-02 54 views
11

通常,當我需要使用C#連接到數據庫時,我會使用下面的命令例程:
- 定義一個mysql連接。
- 打開一個mysql連接。
- 定義一個sql語句/查詢。
- 使用MySqlCommand執行查詢。如何連接到C#中的一個連接字符串中的兩個數據庫?

樣品代碼:

string con1 = "server=<db1 IP>;User Id=user;password=password;Persist Security Info=True;database=db1"; 
string con2 = "server=<db2 IP>;User Id=user;password=password;Persist Security Info=True;database=db2"; 
MySqlConnection cn1 = new MySqlConnection(con1); 
MySqlConnection cn2 = new MySqlConnection(con2); 
MySqlCommand com 

cn1.Open(); 
string sql = "some query"; 
com = new MySqlCommand(sql, cn1); 
com.executeNonQuery(); 
cn1.Close(); 

上面我的問題是在哪裏數據庫連接指示,以便它現在將查詢到喜歡哪個數據庫,在那裏我使用的MySqlCommand命令,因爲它是部分

MySqlCommand com = new MySqlCommand(sql, con); 

其中sql是一個sql語句,con是要用於查詢的連接。

如何在一個sql語句中查詢兩個數據庫?
考慮以下幾點:?(我使用MySQL)

- I have two databases, db1 and db2. 
- db1 is located in City A 
- db1 is located in City B 
- Both databases have one table (tbl) and they both have the same structure. 
- Table structure for tbl: 
    +-------------+--------------+------+-----+---------+-------+ 
    | Field  | Type   | Null | Key | Default | Extra | 
    +-------------+--------------+------+-----+---------+-------+ 
    | id   | int(9)  | NO | PRI |   |  | 
    | ref_no  | int(9)  | NO |  |   |  | 
    | name  | varchar(10) | YES |  | NULL |  | 
    +-------------+--------------+------+-----+---------+-------+ 
- I want to run a query on db1.tbl against db2.tbl 
- Example query: "select ref_no from db1.tbl where ref_no not in (select ref_no from db2.tbl)" 

或者是有這種問題的另一種方式......

+3

這是必須在數據庫服務器級別設置的東西,而不是在C#中,我相信。鏈接服務器是一種方法。或者,您可以從兩臺服務器獲取結果(通過兩個連接字符串),然後根據需要在程序中處理數據。我相信還有其他的選擇,這些只是立即想到的兩個。 – Tim 2013-05-02 07:05:21

+0

使用兩個連接並使用Linq加入。看到http://stackoverflow.com/questions/4278993/is-it-possible-to-perform-joins-across-different-databases-using-linq – Morten 2013-05-02 07:11:26

回答

8
string con = "server=localhost;user=root;pwd=1234;"; 

using (MySqlConnection cn1 = new MySqlConnection(con)) 
{ 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.Connection = cn1; 
    cn1.Open(); 

    cmd.CommandText = sql; 
    MySqlDataAdapter da = new MySqlDataAdapter(); 
    .... 
} 

SQL語句:

select a.ref_no from db1.tbl a where a.ref_no not in (select b.ref_no from db2.tbl b) 

您可以一次查詢多個數據庫。


更新

我認爲唯一的選擇是通過C#創建同時2個連接,並通過2個服務器之間的數據。

+2

我試過你的代碼,它的工作,但它只適用於如果你嘗試查詢連接字符串上指示的同一服務器上的多個數據庫......如果db1和db2位於不同位置,該怎麼辦? (例如,db1的服務器=

和db2的服務器=
chad 2013-05-03 00:34:44

+0

我認爲唯一的選擇是同時創建2個連接並手動通過它們之間的數據通過C# – mjb 2018-01-12 01:30:49

相關問題