按顺序位置获取Access数据库中的所有表

时间:2011-11-29 18:23:43

标签: c# ms-access

我正在使用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.

有没有办法做到这一点?
我是否需要以某种方式检查主键和外键并自己弄清楚这些信息?

2 个答案:

答案 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)

如果您希望根据他们的关系订购表格,那么,是的,您必须自己实施(或找到第三方工具;我不知道)。

请注意,您需要一些策略来处理关系中的周期。

相关问题