2013-05-02 4 views
11

Normalerweise, wenn ich mit C# eine Verbindung zu einer Datenbank herstellen möchte, würde ich die folgenden Befehlsroutinen verwenden:
- Definieren Sie eine MySQL-Verbindung.
- Öffnen Sie eine MySQL-Verbindung.
- Definieren Sie eine SQL-Anweisung/Abfrage.
- Verwenden Sie MySqlCommand, um die Abfrage auszuführen.Wie wird eine Verbindung zu zwei Datenbanken in einer Verbindungszeichenfolge in C# hergestellt?

Beispielcode:

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

Mein Problem ist, oben auf dem Teil, wo ich den MySqlCommand Befehl verwenden, weil es ist, wo eine Datenbankverbindung angegeben ist, so dass es jetzt wird die Datenbank abfragen mögen

MySqlCommand com = new MySqlCommand(sql, con); 

wobei SQL eine SQL-Anweisung ist und con eine Verbindung ist, die für die Abfrage verwendet werden soll.

Wie Abfrage ich zwei Datenbanken in einer SQL-Anweisung?
Beachten Sie Folgendes:? (Ich verwende 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)" 

Oder gibt es eine andere Art und Weise für diese Art von Problem ...

+3

Dies ist etwas, das auf der Datenbankserver-Ebene eingerichtet werden muss, nicht in C#, glaube ich. Verknüpfte Server ist eine Möglichkeit, dies zu tun. Alternativ können Sie die Ergebnisse von beiden Servern abrufen (über zwei Verbindungszeichenfolgen) und dann die Daten wie gewünscht in Ihrem Programm bearbeiten. Ich bin sicher, dass es auch andere Möglichkeiten gibt, diese sind nur zwei, die sofort in den Sinn kamen. – Tim

+0

Verwenden Sie zwei Verbindungen und verbinden Sie sich mit Linq. Siehe http://stackoverflow.com/questions/4278993/is-it-possible-to-perform-join-across-different-databases-in-in- – Morten

Antwort

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

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

Sie können mehrere Datenbanken gleichzeitig abfragen.


aktualisiert

Ich denke, die einzige Option 2 Verbindungen gleichzeitig erstellen und die Daten zwischen dem 2-Server über C# übergeben.

+2

Ich habe versucht, Ihren Code und es funktioniert, aber es ist nur anwendbar, wenn Sie es versuchen Abfragen mehrerer Datenbanken auf demselben Server, der in der Verbindungszeichenfolge angegeben ist ... Was passiert, wenn sich db1 und db2 an einem anderen Speicherort befinden? (z. B. db1's server =

und db2's server =
chad

+0

Ich denke, die einzige Option ist, 2 Verbindungen gleichzeitig zu erstellen und die Daten zwischen ihnen manuell über C# zu übergeben. – mjb

Verwandte Themen