2012-08-30 42 views
6

Deseo obtener todos los nombres de "tabla" de una OdbcConnection, y para todos los nombres de "tabla" deseo recibir todos los nombres de columna.Obtenga todas las tablas y todas las columnas de una base de datos odbc

Me encontré con la función OdbcConnection.GetSchema(). Logré obtener todos los nombres de las tablas simplemente usando connection.GetSchema("Tables"). Pero ahora quiero obtener la información de la columna para esas tablas. Me di cuenta de connection.GetSchema("Columns") me dará información de columnas, pero esto solo lo da de una "tabla" aleatoria/primera (?) En la fuente de datos (utilizando el controlador de Windows CSV), que no ayuda mucho mutch.

La parte más difícil es que debería funcionar con la mayoría de los controladores ODBC. No sabré qué fuente de datos subyacente se utilizará.

¿Alguna idea?

Respuesta

7

El esquema de columna devolverá todas las tablas

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

O para una sola tabla

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

Del mismo modo,

columns = cn.GetSchema("Columns"); 

devuelve todas las columnas de todas las tablas.

Más información: Schema Restrictions

Editar re comenta

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

puedo obtener las columnas de mis dos "tablas" de prueba, es decir, archivos de texto. Ver ejemplo adicional. – Fionnuala

+0

@Fionualla: ¿Es posible devolver las tablas de que su nombre contiene una palabra específica? – Saeid

Cuestiones relacionadas