我正在使用C#对Access数据库进行编码......
我能够使用以下内容获取访问数据库中的所有表:
DataTable dataTbl;
DataView dvCols;
DataRowView drvCols;
...
dataTbl = m_connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] { null, null, null, "TABLE" });
dvCols = new DataView(dataTbl);
for (int j = 0; j < dvCols.Count; j++)
{
drvCols = dvCols[j];
tableName = drvCols.Row["TABLE_NAME"].ToString();
// ...
}
问题是此代码按字母顺序获取表名。现在,如果我正在阅读特定表格中的列,我可以使用
按顺序排序dvCols.Sort = "ORDINAL_POSITION";
然而,对于桌子来说这是不可能的,我猜测确实没有顺序位置。我的表有关系,例如表A与表B有一对多的关系,它与表C有一对多的关系等等......所以我需要按顺序获取表名,例如:然后是B然后是C.
有没有办法做到这一点?
我是否需要以某种方式检查主键和外键并自己弄清楚这些信息?
答案 0 :(得分:1)
好的......把它搞定了。 我最终做的是以下几点:
dataTable_ForeignKeys =
m_connection.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, null);
//Check if a DataTable object is initialized
if (dataTable_ForeignKeys != null)
{
// iterate and get the names
foreach (DataRow row in dataTable_ForeignKeys.Rows)
{
tableName = row["PK_TABLE_NAME"].ToString();
tblNames.Add(tableName);
获取外键关系列表。这按照我需要的顺序返回表格,即首先是“父”表。如果表不是另一个表的“父”,即它没有另一个表中的外键字段,那么它将不会被返回。我通过获取所有数据库表名称来协调这一点,就像我在原始帖子中所做的那样。
答案 1 :(得分:0)
如果您希望根据他们的关系订购表格,那么,是的,您必须自己实施(或找到第三方工具;我不知道)。
请注意,您需要一些策略来处理关系中的周期。