我有一个使用DSN的ODBC连接,我正在尝试从中获取表和列(稍后进行操作),但它在早期阶段失败。如果重要,数据库是FairCom C-tree(v 6.11):
OdbcConnection odbcConn = new OdbcConnection("DSN=Ctree;");
odbcConn.Open();
DataTable tblTables = odbcConn.GetSchema("Tables");
foreach (DataRow row in tblTables.Rows) //displays them one at a time (works)
MessageBox.Show(row["TABLE_NAME"].ToString());
DataTable tblColumns = odbcConn.GetSchema("Columns"); // (why is this empty?)
foreach (DataRow row in tblColumns.Rows) //lists nothing
MessageBox.Show(row["COLUMN_NAME"].ToString() + " : " + row["TABLE_NAME"].ToString());
问题是getSchema(“Tables”)工作正常,所以我知道连接有效,驱动程序状态良好且数据存在。那么为什么getSchema(“Columns”)失败了呢?我也知道数据库中有数据(数百列和数千行)。我很茫然。
思想?
答案 0 :(得分:1)
不确定这是否适用于Faircom C-Tree SQL,但请尝试获取单个表的列架构。
GetSchema()
允许specification of restrictions。
var restrictions = new string[] { null, null, "TableName" };
odbcConn.GetSchema("Columns", restrictions);
您可能还必须指定架构名称(例如Sales.SalesPeople)
var restrictions = new string[] { null, "Sales", "SalesPeople" };
odbcConn.GetSchema("Columns", restrictions);