2013-05-02 21 views
11

Normalde, C# kullanarak bir veritabanına bağlanmam gerektiğinde, aşağıdaki komut rutinlerini kullanacağım:
- bir mysql bağlantısı tanımlayın.
- bir mysql bağlantısı açın.
- bir sql deyimi/sorgu tanımlayın.
- Sorguyu yürütmek için MySqlCommand kullanın.C# 'da bir bağlantı dizesinde iki veritabanına nasıl bağlanır?

Numune kodları:

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

Sorunum yukarıda şimdi hangi veritabanı sevmeye sorgulamak için böylece bir veritabanı bağlantısı gösterilir çünkü gerçek bu MySqlCommand komutunu kullanın kısmında ise

Sql bir sql ifadesidir ve con sorgu için kullanılacak bir bağlantıdır.
MySqlCommand com = new MySqlCommand(sql, con); 

İki veritabanını bir sql deyiminde nasıl sorgularım?
aşağıdaki düşünün:? (MySQL 'i kullanıyorum)

- 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)" 

Veya sorun bu tür başka bir yolu var ...

+3

Bu, veritabanı sunucusu düzeyinde C# içinde değil, kurulması gereken bir şey olduğuna inanıyorum. Bağlantılı Sunucular bunu yapmanın bir yoludur. Alternatif olarak, sonuçları iki sunucudan da (iki bağlantı dizesi üzerinden) alabilir ve ardından verilerinizi programınızda istediğiniz gibi değiştirebilirsiniz. Eminim başka seçenekler de vardır, bunlar hemen akla gelen sadece iki tanesidir. – Tim

+0

İki bağlantıyı kullanın ve Linq'i kullanarak katılın. Bkz. Http://stackoverflow.com/questions/4278993/is-it-possible-to-perform-joins-across-different-databases-using-linq – Morten

cevap

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 deyimi:

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

Bir seferde birden çok veritabanı sorgulayabilirsiniz.


Güncelleme Ben tek seçenek C# üzerinden 2 sunucu arasındaki veri aynı anda 2 bağlantılarını oluşturmak ve pas olduğunu düşünüyorum.

+2

Kodunuzu denedim ve işe yaradı, ancak yalnızca denemeniz durumunda uygulanabilir. bağlantı dizesinde belirtilen aynı sunucuda birden çok veritabanı sorgulamak için ... Ya db1 ve db2 farklı konumda ise? (ör. db1 sunucusu =

ve db2's server =
chad

+0

Tek seçenek aynı anda 2 bağlantı oluşturmak ve verileri C# ile aralarında el ile geçmek olduğunu düşünüyorum. – mjb

İlgili konular