使用c#从MS Access DB检索表关系

本文关键字:检索 关系 DB Access MS 使用 | 更新日期: 2023-09-27 18:14:08

我使用c#和MS Access 2010。我需要从数据库中检索表关系,以便确定实体之间的关系,并在c#代码中使用它们。我需要同样的功能为SQL Server数据库也。

是否有办法使用c#和。net 3.0/3.5/4.0来做到这一点?

感谢您的宝贵时间。

谢谢,Mahesh

使用c#从MS Access DB检索表关系

这是我用来检索外键约束(如果您愿意,也可以是关系)的代码。TableSchema, ForeignKeyForeignKeyColumn是我自己的类,我在其中存储结果。关键是使用OleDbConnectionGetOleDbSchemaTable方法:

private static void RetrieveForeignKeyInfo(OleDbConnection cnn, TableSchema tableSchema, Func<string, string> prepareColumnNameForMapping)
{
    string[] fkRestrictions = new string[] { null, null, null, null, null, tableSchema.TableName };
    using (DataTable dtForeignKeys = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, fkRestrictions)) {
        ForeignKey foreignKey = null;
        string constraintName = "";
        foreach (DataRow row in dtForeignKeys.Rows) {
            string newConstraintName = (string)row["FK_NAME"];
            if (newConstraintName != constraintName) {
                constraintName = newConstraintName;
                foreignKey = new ForeignKey();
                foreignKey.MasterTableName = (string)row["PK_TABLE_NAME"];
                tableSchema.ForeignKeys.Add(foreignKey);
            }
            var foreignKeyColumn = new ForeignKeyColumn();
            foreignKeyColumn.DetailColumnName = (string)row["FK_COLUMN_NAME"];
            foreignKeyColumn.MasterColumnName = (string)row["PK_COLUMN_NAME"];
            foreignKeyColumn.DetailColumnNameForMapping = prepareColumnNameForMapping(foreignKeyColumn.DetailColumnName);
            foreignKeyColumn.MasterColumnNameForMapping = prepareColumnNameForMapping(foreignKeyColumn.MasterColumnName);
            foreignKey.Columns.Add(foreignKeyColumn);
        }
    }
}

我将使用DAO,在这种情况下,关系在一个集合中,您可以从Database对象的Relationships属性中检索。

ADO。. NET中,使用DataSet类的Relations属性。