7

OdbcConnectionからすべての「テーブル」名を取得したいのですが、すべての「テーブル」名について、すべての列名を受け取りたいのです。

それで私は機能性に出くわしましたOdbcConnection.GetSchema()。を使用するだけで、すべてのテーブル名を取得するように管理しますconnection.GetSchema("Tables")。しかし、ここで、これらのテーブルの列情報を取得したいと思います。列情報が表示されることに気付きconnection.GetSchema("Columns")ましたが、これはデータソースのランダム/最初の(?)「テーブル」からのみ表示されます(Windows CSVドライバーを使用)。これはあまり役に立ちません。

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

何か案は?

4

2 に答える 2

10

列スキーマはすべてのテーブルを返します

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

または単一のテーブルの場合

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

同様に、

columns = cn.GetSchema("Columns");

すべてのテーブルのすべての列を返します。

詳細:スキーマの制限

コメントを編集する

    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();
于 2012-08-30T13:09:39.937 に答える