2012-08-30 5 views
6

Ich möchte alle "Tabelle" Namen von einer OdbcConnection, und für alle "Tabelle" Namen möchte ich alle Spaltennamen erhalten.Holen Sie sich alle Tabellen und Spalten aus einer ODBC-Datenbank

So stieß ich auf die OdbcConnection.GetSchema() Funktionalität. Ich versorge alle Tabellennamen einfach mit connection.GetSchema("Tables"). Aber jetzt möchte ich die Spalteninformationen für diese Tabellen abrufen. Ich habe bemerkt, connection.GetSchema("Columns") wird mir Spalten Informationen geben, aber dies gibt es nur aus einer zufälligen/ersten (?) "Tabelle" in der Datenquelle (mit Windows-CSV-Treiber), die nicht sehr Mutch hilft.

Der schwierigste Teil ist, dass mit (fast) allen ODBC-Treibern arbeiten müsste. Ich werde nicht wissen, welche zugrunde liegende Datenquelle verwendet wird.

Irgendwelche Ideen?

Antwort

7

Das Spaltenschema kehrt alle Tabellen

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

Oder für eine einzelne Tabelle

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

ähnlich

columns = cn.GetSchema("Columns"); 

Gibt alle Spalten in allen Tabellen.

Weitere Informationen: Schema Restrictions

bearbeiten re kommentiert

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

ich die Spalten von meinen beiden Test "Tabellen" erhalten, das heißt, Textdateien. Siehe zusätzliches Beispiel. – Fionnuala

+0

@Fionualla: Ist es möglich, die Tabellen zurückzugeben, deren Name ein bestimmtes Wort enthält? – Saeid

Verwandte Themen