我想从OdbcConnection获取所有“表”名称,对于所有“表”名称,我想收到所有列名。
所以我遇到了OdbcConnection.GetSchema()
功能。我只需使用connection.GetSchema("Tables")
即可获取所有表名。但现在我想获取这些表的列信息。我注意到connection.GetSchema("Columns")
会给我列信息,但这只是从数据源中的随机/第一个(?)“表”(使用Windows CSV驱动程序)中提供它,这无助于发送。
最具挑战性的部分是,必须与任何(大多数)ODBC驱动程序一起使用。我不知道将使用哪个基础数据源。
有什么想法吗?
答案 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表并为每个列创建一个类,并将列名作为字符串字段。您可以使用这些类来组成字符串查询。