2012-08-30 2 views
6

Я хочу получить все имена «таблицы» из OdbcConnection, и для всех имен «таблицы» я хочу получить все имена столбцов.Получить все таблицы и все столбцы из базы данных odbc

Так что я натолкнулся на функциональность OdbcConnection.GetSchema(). Мне нужно получить все имена таблиц, просто используя connection.GetSchema("Tables"). Но теперь я хочу получить информацию о столбцах для этих таблиц. Я заметил, что connection.GetSchema("Columns") предоставит мне информацию о столбцах, но это дает только случайную/первую (?) «Таблицу» в источнике данных (с использованием драйвера Windows CSV), что не очень помогает.

Самая сложная часть, которая должна работать с любыми (большинством) драйверов ODBC. Я не буду знать, какой базовый источник данных будет использоваться.

Любые идеи?

ответ

7

Схема столбец возвращает все таблицы

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

Или для одной таблицы

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

Аналогично,

columns = cn.GetSchema("Columns"); 

Возвращает все столбцы всех таблиц.

Подробнее: Schema Restrictions

Edit повторно комментарии

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

Я получаю столбцы из двух моих испытаний "таблицы", то есть, текстовые файлы. См. Дополнительный пример. – Fionnuala

+0

@Fionualla: Можно ли вернуть таблицы, чтобы их имя содержало конкретное слово? – Saeid

Смежные вопросы