2013-05-02 10 views
11

Normalnie, gdy potrzebuję połączyć się z bazą danych przy użyciu C#, użyłbym następujących procedur poleceń poniżej:
- zdefiniuj połączenie mysql.
- otwórz połączenie mysql.
- zdefiniuj instrukcję SQL/zapytanie.
- użyj MySqlCommand do wykonania zapytania.Jak połączyć się z dwiema bazami danych w jednym ciągu połączenia w języku C#?

kody Próbka:

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

powyżej Mój problem polega na części, w której używam komendy MySqlCommand bo to jest, gdy połączenie z bazą danych jest oznaczona tak, że będzie teraz których baza danych kwerendy lubić

MySqlCommand com = new MySqlCommand(sql, con); 

gdzie sql to instrukcja sql, a con to połączenie, które ma być użyte w zapytaniu.

Jak wysłać zapytanie do dwóch baz danych w jednym słowie sql?
Rozważmy następujący: (używam 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)" 

Czy jest jakiś inny sposób na tego rodzaju problemu ...

+3

Jest to coś, co należy skonfigurować na poziomie serwera bazy danych, a nie w C#, jak sądzę. Połączone serwery to jeden sposób na zrobienie tego. Możesz również uzyskać wyniki z obu serwerów (za pośrednictwem dwóch ciągów połączenia), a następnie manipulować danymi zgodnie z wymaganiami programu. Jestem pewien, że są też inne opcje, to tylko dwa, które natychmiast przyszły mi na myśl. – Tim

+0

Użyj dwóch połączeń i połącz za pomocą Linq. Zobacz http://stackoverflow.com/questions/4278993/is-it-possible-to-perform-joins-ross-different-databases-using-linq – Morten

Odpowiedz

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) 

Możesz wysyłać zapytania do wielu baz danych naraz.


Aktualizacja

Myślę, że jedynym rozwiązaniem jest stworzenie 2 połączeń w tym samym czasie i przekazywać dane między serwerem 2 do C#.

+2

Wypróbowałem twój kod i zadziałało, ale ma zastosowanie tylko wtedy, gdy próbujesz zapytać wiele baz danych na tym samym serwerze wskazanym w łańcuchu połączenia ... Co jeśli db1 i db2 znajdują się w innej lokalizacji? (np. serwer db1 =

i serwer db2 =
chad

+0

Myślę, że jedyną opcją jest utworzenie 2 połączeń w tym samym czasie i ręczne przekazywanie danych między nimi za pośrednictwem C# – mjb

Powiązane problemy