获取odbc数据库中的所有表和所有列

时间:2012-08-30 13:04:52

标签: .net odbc db-schema

我想从OdbcConnection获取所有“表”名称,对于所有“表”名称,我想收到所有列名。

所以我遇到了OdbcConnection.GetSchema()功能。我只需使用connection.GetSchema("Tables")即可获取所有表名。但现在我想获取这些表的列信息。我注意到connection.GetSchema("Columns")会给我列信息,但这只是从数据源中的随机/第一个(?)“表”(使用Windows CSV驱动程序)中提供它,这无助于发送。

最具挑战性的部分是,必须与任何(大多数)ODBC驱动程序一起使用。我不知道将使用哪个基础数据源。

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

列架构将返回所有表

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

编辑重新评论

    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();

答案 1 :(得分:0)

我知道为原始海报提供帮助已经为时已晚,但是如果有帮助的话,我创建了一个微型项目,该项目将遍历所有ODBC表并为每个列创建一个类,并将列名作为字符串字段。您可以使用这些类来组成字符串查询。

Link to project