我正在尝试通过信息填充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模式表中。
我想知道在哪里可以获得所需信息。请告诉我。
答案 0 :(得分:3)
使用Ado.Net无法获取与MSAccess中的关系相关的其他属性。只有在使用DAO的VBA中才有可能。
所有关系及其附加属性都存储在每个ms-access版本的MSysRelationships
表中。字段grbit
具有关系的所有可能属性的值,即Enforce Referential Intigrity,Cascade Delete,Cascadde Update。该表的其他字段是自解释的,与GetOleDbSchemaTable方法返回的字段相同。
Grbit的一些有用的计算:
用于访问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);
另见:
注意:无法通过GetOleDbSchemaTable
获取与MS-Access中的关系相关的额外信息。 Oledb只是数据库中的包装器,Access
没有向外界公开信息,因此无法直接获取ADO.net
的信息。
因此,对于变通方法,您只需要访问和操作grbit
表的MSysRelationships
列信息。
答案 1 :(得分:0)
检查一下:http://support.microsoft.com/kb/309681 看起来很简单但我在处理DataTable时遇到了问题:(