我正在尝试通过从数据库读取的信息来填充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模式表中。
我想知道我在哪里可以得到所需的信息。请告诉我去的路线。
发布于 2012-06-16 11:31:14
不可能使用Ado.Net在MSAccess中获取与关系相关的附加属性。只有在使用DAO的VBA中才有可能。
在每个版本的ms-access中,所有的关系及其附加属性都存储在MSysRelationships表中。字段grbit具有关系的所有可能属性的值,即强制引用完整性、级联删除、级联更新。此表中的其他字段是自解释的,与GetOleDbSchemaTable方法返回的字段相同。
Grbit的一些有用的计算:
<代码>F211
在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中获取与关系相关的额外信息。ADO.net只是数据库上的一个包装器,而Oledb不会将信息暴露给外部世界,因此不可能以直接的方式使用Oledb来获取信息。
因此,为了解决这个问题,您只需要访问和操作MSysRelationships表的grbit列信息。
发布于 2013-01-24 02:09:57
检查一下:http://support.microsoft.com/kb/309681看起来很简单,但我在处理DataTable时也遇到了问题:(
https://stackoverflow.com/questions/9659593
复制相似问题