2012-08-30 23 views
6

OdbcConnectionからすべての "テーブル"名を取得し、すべての "テーブル"名に対してすべてのカラム名を取得したいと思います。odbcデータベースからすべてのテーブルとすべてのカラムを取得

私はOdbcConnection.GetSchema()機能を見つけました。私は単にconnection.GetSchema("Tables")を使ってすべてのテーブル名を取得します。しかし、今私はそれらのテーブルの列情報を取得したい。私はconnection.GetSchema("Columns")が私に列の情報を与えることに気がついたが、これはデータソースのランダム/最初の( ")"テーブル "(WindowsのCSVドライバを使用している)からしか得られない。

最も困難な部分は、(ほとんどの)ODBCドライバで動作する必要があることです。どの基礎データソースが使用されるのかわかりません。

アイデア?

答えて

7

列スキーマは、同様にすべてのテーブルで

columns = cn.GetSchema("Columns"); 

戻り、すべての列をすべてのテーブル

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

または単一のテーブルの

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

を返します。

さらに詳しい情報:Schema Restrictions

編集私は、テキストファイルで、私の2つのテスト "テーブル" から列を取得

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

関連する問題