ADO.NET GetOleDbSchemaTable



我正试图通过从数据库读取的信息来填充DataRelation集合。

DataTable schemaTable =
    oleconnection.GetOleDbSchemaTable(
        OleDbSchemaGuid.Foreign_Keys,
        new object[] { null, null, tablename });

但这些信息并没有说明它是真正的外键约束还是关系,因此,我不知道该为DataRelation构造函数(createConstraints)的第四个参数设置什么值。

public DataRelation(
    string relationName,
    DataColumn[] parentColumns,
    DataColumn[] childColumns,
    bool createConstraints
)

特别地,在MS Access中,可以连接具有关系的两个表,但不强制执行数据完整性检查。一些额外的研究表明,这种非强制关系也出现在OleDbSchemaGuid.Referential_Constraints模式表中。

我想知道在哪里可以获得所需的信息。请给我指路。

使用Ado.Net无法在MSAccess中获取与关系相关的附加属性。只能在使用DAO的VBA中获取。

在ms访问的每个版本中,所有关系及其附加属性都存储在MSysRelationships表中。字段grbit具有关系的所有可能属性的值,即强制引用亲密关系、级联删除、级联更新。该表的其他字段是不言自明的,它们与GetOleDbSchemaTable方法返回的字段相同。

Grbit:的一些有用计算

  • 这意味着,如果存在一对一关系,并且"强制引用亲密关系"处于启用状态,则Grbit将为0
  • 这意味着,如果存在一对一关系,并且强制引用亲密关系为OFF,则Grbit将为3
  • 这意味着,如果存在一对多关系,并且强制引用亲密关系为OFF,则Grbit将为2
  • 这意味着,如果存在一对多关系,并且"强制引用亲密关系"为ON,则Grbit将为0

访问c#:中表格的示例代码

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mydb.mdb;");
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter("Select * From MSysRelationships", con);
DataSet ds = new DataSet();
da.Fill(ds);

另请参阅:

  • 参考GrBit字段的可能值及其含义
  • GrBit的计算方法

注意:无法通过GetOleDbSchemaTable获取MS Access中与关系相关的额外信息。Oledb只是数据库上的一个包装器,而Access不会将这些信息暴露给外部世界,因此不可能用ADO.net直接获取信息。

因此,为了解决此问题,您只需要访问和操作MSysRelationships表的grbit列信息。

检查此项:http://support.microsoft.com/kb/309681看起来很容易,但我在处理DataTable时也遇到了问题:(

相关内容

  • 没有找到相关文章

最新更新