2016-07-12 9 views
-1

Ich habe ein Programm in C# erstellt, das es dem Benutzer ermöglichen würde, seine Abfrage für eine Tabelle auszuführen, die in einer bestimmten Datenbank vorhanden ist. Außerdem möchte ich, dass der Benutzer eine Tabelle aus dem Kombinationsfeld auswählt, auf der er seine Abfrage ausführen möchte. Allerdings kann ich die Tabellennamen aus der Datenbank nicht in das Kombinationsfeld abrufen. Dies ist der Code, den ich verwende:Wie bekomme ich die Tabellennamen in einer Datenbank in eine Combobox?

public partial class AddQuery : Form 
    { 
     public AddQuery() 
     { 
      InitializeComponent(); 
      fill_combo(); 
     } 
     void fill_combo() 
     { 
      string cmdstr = "Use Dev_Server"; 
      SqlConnection con = new SqlConnection(@"Data Source=INPDDBA027\NGEP;Initial Catalog=Dev_Server;Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand(cmdstr,con); 

      DataSet ds = new DataSet(); 
      try 
      { 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       //comboBox1.Items.Add(dr); 
       foreach (DataTable dt in ds.Tables) 
       { 
        comboBox1.Items.Add(dt.TableName[0]); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 



    } 
} 

Bitte um Hilfe.

+3

Bitte addieren ** für alle DB-Fragen ! ** das RDBMS, das Sie verwenden. Name ** und Version **! Dies macht es viel einfacher zu beantworten ... Verwenden Sie die Bearbeitungsoption, die richtigen Tags zu setzen ... – Shnugo

+0

Es ist eher eine SQL-Frage ... – Alex

Antwort

-1

glaube ich Ihnen etwas misconceptual falsch in Ihrem Code getan

bitte versuchen Sie es dieses

public partial class AddQuery : Form 
{ 
    public AddQuery() 
    { 
     InitializeComponent(); 
     fill_combo(); 
    } 
    void fill_combo() 
    { 
     string cmdstr = "select * from sys.tables"; 
     string conStr = @"Data Source=INPDDBA027\NGEP;Initial Catalog=Dev_Server;Integrated Security=True"; 
     DataTable dt = new DataTable(); 
     SqlDataAdapter sda = new SqlDataAdapter(cmdstr,conStr); 
     try 
     { 
      sda.Fill(dt); 
      foreach (DataRow row in dt.Rows) 
      { 
       comboBox1.Items.Add(row["name"]); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 



} 
} 
+0

Danke. Das hat funktioniert. :) –

1

Wenn diese MS SQL Server ist, dann können Sie unter Abfrage verwenden:

select * from sys.tables where type = 'U' 
+0

Dies ist möglich, aber wird es schwieriger zu Seiten Daten wie die Tabelle finden ' SCHEMA'. Sie müssten sich mit 'sys.objects' und mit' sys.schemas' verbinden. Ich würde "INFORMATION_SCHEMA" bevorzugen, was nichts anderes ist, aber viele nützliche Daten werden implizit abgerufen. – Shnugo

0

ersetzen string cmdstr = "Use Dev_Server";

mit string cmdstr ="select * from sys.tables where type = 'U'";

oder besser als von @shungo angegeben

string cmdstr ="select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"; 

Wie von @AbdullahNeir in seiner Antwort darauf erwähnt ist eine Abfrage, um alle Tabellen in der gegebenen Datenbank zu erhalten.

+0

Ich würde es vorziehen 'INFORMATION_SCHEMA', legte einige Erklärungen unter Abdullah Antwort ... – Shnugo

+0

@Shnugo bearbeitet Antwort. Danke –

2

Wenn diese SQL-Server war dies könnte Ihnen helfen:

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 

nur versuchen, diese die anderen Informationen zu sehen, mit SELECT * rufen Sie bekommen würde.

Wie auch immer, mit INFORMATION_SCHEMA.XYZ können Sie eine Menge von Meta-Daten aus Ihrer Datenbank erhalten. Gerade die XYZ ersetzen mit COLUMNS oder ROUTINES oder read about the details here