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 回答
0

我知道现在帮助原始海报为时已晚,但如果它可以帮助其他任何人,我制作了一个迷你项目,它遍历所有 ODBC 表并为每个表创建一个类,其中列名作为字符串字段。您可以使用这些类来编写字符串查询。

链接到项目

于 2019-08-04T15:36:36.160 回答