Извлечение табличных отношений из БД MS Access с использованием C # - PullRequest
2 голосов
/ 12 ноября 2011

Я использую C # с MS Access 2010. Мне нужно извлечь таблицы отношений из БД, чтобы определить отношения между сущностями и использовать их в моем коде C #. Мне также нужна такая же функциональность для базы данных SQL Server.

Есть ли способ сделать это с помощью C # и .NET 3.0 / 3.5 / 4.0?

Цените свое время.

Спасибо, Махеш

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Это код, который я использовал для получения ограничений внешнего ключа (отношения, если вы предпочитаете).TableSchema, ForeignKey и ForeignKeyColumn - мои собственные классы, где я храню результат.Смысл в том, чтобы использовать 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);
        }
    }
}
2 голосов
/ 12 ноября 2011

Я бы использовал DAO, в этом случае отношения находятся в коллекции, которую можно извлечь из свойства Relationships объекта Database.

В ADO.NET вы используете Relations собственность класса DataSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...