2012-08-30 12 views
6

Voglio ottenere tutti i nomi di "tabella" da un OdbcConnection e per tutti i nomi di "tabella" Voglio ricevere tutti i nomi di colonna.Ottieni tutte le tabelle e tutte le colonne da un database odbc

Quindi mi sono imbattuto nella funzionalità OdbcConnection.GetSchema(). Mi permetto di ottenere tutti i nomi dei tavoli semplicemente usando connection.GetSchema("Tables"). Ma ora voglio ottenere le informazioni sulla colonna per quelle tabelle. Ho notato che connection.GetSchema("Columns") mi darà informazioni sulle colonne, ma questo le dà solo da una/prima (?) "Tabella" casuale nell'origine dati (utilizzando il driver CSV di Windows), che non aiuta molto il muting.

La parte più difficile è che dovrebbe funzionare con qualsiasi (più) driver ODBC. Non saprò quale origine dati sottostante verrà utilizzata.

Qualche idea?

risposta

7

Lo schema colonna restituirà tutte le tabelle

cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, 
     new Object[] { null, null, null, null }); 

O per una singola tabella

cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, 
     new Object[] { null, null, "table1", null }); 

Allo stesso modo,

columns = cn.GetSchema("Columns"); 

restituisce tutte le colonne in tutte le tabelle.

Maggiori informazioni: Schema Restrictions

Modifica re commenta

string cs = @"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=z:\docs;"; 
    OdbcConnection cn = new OdbcConnection(cs); 
    cn.Open(); 

    DataTable tables = cn.GetSchema("Tables"); 
    DataTable columns = cn.GetSchema("Columns"); 

    foreach (DataRow row in columns.Rows) 
    { 
     Console.WriteLine(row["COLUMN_NAME"].ToString()); 
     Console.WriteLine(row["TABLE_NAME"].ToString()); 
    } 
    Console.Read(); 
+0

ricevo le colonne dei miei due "tavoli" di prova, cioè, i file di testo. Vedi un altro esempio. – Fionnuala

+0

@Fionualla: è possibile restituire alle tabelle che il loro nome contiene una parola specifica? – Saeid

Problemi correlati