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

时间:2011-11-11 21:10:32

标签: c# sql-server ms-access relationship

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

有没有办法使用C#和.NET 3.0 / 3.5 / 4.0做到这一点?

感谢您的时间。

谢谢, 马赫什

2 个答案:

答案 0 :(得分:4)

这是我用来检索外键约束的代码(如果你愿意,可以使用关系)。 TableSchemaForeignKeyForeignKeyColumn是我自己的类,我存储结果。关键是要使用GetOleDbSchemaTable

OleDbConnection方法
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);
        }
    }
}

答案 1 :(得分:2)

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

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