2012-08-30 4 views
6

Je veux obtenir tous les noms "table" d'un OdbcConnection, et pour tous les noms "table" je veux recevoir tous les noms de colonnes. J'ai rencontré la fonctionnalité OdbcConnection.GetSchema(). Je me débrouille pour obtenir tous les noms de table en utilisant simplement connection.GetSchema("Tables"). Mais maintenant je veux obtenir les informations de colonne pour ces tables. J'ai remarqué connection.GetSchema("Columns") va me donner des informations sur les colonnes, mais cela ne le donne que d'une "table" aléatoire/premier (?) Dans la source de données (en utilisant Windows CSV driver), ce qui ne m'aide pas beaucoup.Récupère toutes les tables et toutes les colonnes d'une base de données ODBC

La partie la plus difficile est, qui devrait fonctionner avec n'importe quel (le plus) pilote ODBC. Je ne saurai pas quelle source de données sous-jacente sera utilisée.

Des idées?

Répondre

7

Le schéma de la colonne retournera toutes les tables

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

Ou pour une seule table

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

De même,

columns = cn.GetSchema("Columns"); 

Retours toutes les colonnes de toutes les tables.

Plus d'info: Schema Restrictions

Modifier les commentaires re

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

je reçois les colonnes de mes deux tests "tables", qui est, des fichiers texte. Voir l'exemple supplémentaire. – Fionnuala

+0

@Fionualla: Est-il possible de retourner les tables que leur nom contient un mot spécifique? – Saeid

Questions connexes