2017-06-11 7 views
1

Ich möchte eine Verbindung mit mehreren Datenbanken herstellen und eine Abfrage über diese Verbindungen ausführen, aber es funktioniert nicht.Öffnen von Verbindungen zu mehreren Datenbanken

  string source = "10.0.0.0"; 
      string user = "abc"; 
      string password="abc"; 

      DataTable dt = new DataTable(); 

      for (int i = 0; i < dt.Rows.Count; i++) 
      { 


       string source = dt.Rows[i][2].ToString(); 
       string user = dt.Rows[i][1].ToString(); 
       int password = Convert.ToInt32(user) + 111; 

       OracleConnection conn = new OracleConnection("Data Source = " + source + ": 1521/rms; User id = " + user + "; Password=" + password + ";"); 
       conn.Open(); 

       OracleCommand cmd = new OracleCommand(" SELECT SUM(AI_TRN) FROM tr_rtl where DC_DY_BSN = '06-04-2016'and mall like '%" + Mallname.Text + "%' ", conn); 
       cmd.ExecuteNonQuery(); 
       OracleDataAdapter oda = new OracleDataAdapter(cmd); 
       oda.Fill(dt); 
       dataGridView1.DataSource = dt; 
       conn.Close(); 


       label1.Text = source; 



      } 

     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 

sorry ich habe den falschen Code geschrieben

+1

Eine neue DataTable hat keine Zeilen mehr zu durchlaufen. – Crowcoder

+0

Angesichts der Aktualisierung stimme ich jetzt Crowcoder zu. Wenn Sie nicht eine andere Datentabelle mit Verbindungsinformationen verwenden, entfernen Sie die Schleife "For" und führen Sie den Code aus. Dies sollte Ihre Datentabelle auffüllen. –

Antwort

0

Was werden Sie wahrscheinlich tun müssen, um durch eine Liste der Verbindungen durchlaufen und eine Datentabelle mit allen Ergebnissen füllen. Hier ein Beispiel:

List<OracleConnections> Connections = new List<OracleConnections>(); 
DataTable FinalResults = new DataTable(); 

foreach (var Connection in Connections) 
{ 
    using (Connection) 
    { 
     DataTable TemporaryTable = new DataTable(); 
     Connection.Open(); 
     OracleCommand Command = new OracleCommand("SomeCommandText", Connection); 
     OracleDataAdapter Adapter = new OracleDataAdapter(Command); 
     Adapter.Fill(TemporaryTable); 
     FinalResults.Merge(TemporaryTable); 
    } 
} 

Dies sollte Ihnen alle Ergebnisse der einzelnen Datenbank/Verbindung in einem Finaltisch (Ergebnisse) oder Sie können einen Datensatz tun, wenn es anders ist Spalten/Daten innerhalb jeder Verbindung.

Aktualisiert, um die oben aufgeführten Kommentare zu erläutern.

string Source = "10.0.0.0"; 
string User = "abc"; 
string Password = "abc"; 

DataTable dt = new DataTable(); 
// Remove this or use another reference (different table), you just created the table ^, it has no rows. -> "for (int i = 0; i < dt.Rows.Count; i++)" 
+0

ich bin wirklich sehr entschuldigung.aktuell habe ich den falschen teil von code.please hav einen blick auf sie jetzt. – abid

+0

Siehe meinen Kommentar zu Ihrem Post, aber diese Antwort steht immer noch, dies ist, was Sie tun möchten, wenn Sie mehrere Verbindungen verwenden (und fügen Sie dann die "Endgültige Ergebnisse" an die Datagridview am Ende der "foreach" Schleife statt der aktuellen Einrichtung, die Sie haben .. –

+0

Sir können Sie mich über meinen Code des Teils – abid

Verwandte Themen