我想从 OdbcConnection 中获取所有“表”名称,对于所有“表”名称,我想接收所有列名。
所以我遇到了OdbcConnection.GetSchema()
功能性。我设法通过简单地使用 connection.GetSchema("Tables")
来获取所有表名.但是现在我想获取这些表的列信息。我注意到 connection.GetSchema("Columns")
将为我提供列信息,但这仅从数据源中的随机/第一个(?)“表”中提供(使用 Windows CSV 驱动程序),这并没有帮助。
最具挑战性的部分是,它必须适用于任何(大多数)ODBC 驱动程序。我不知道将使用哪个底层数据源。
有任何想法吗?
最佳答案
列模式将返回所有表
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();
关于.net - 从 odbc 数据库中获取所有表和所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197532/