繁体   English   中英

在C#中与访问数据库创建一对一关系时遇到问题

[英]Problems creating a one-to-one relationship with an access database in c#

我正在尝试使用c#在Microsoft Access数据库中创建一对一关系。 到目前为止,我有以下代码(据我所知)应该创建一对一关系:

OleDbConnection dbCon = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = d:\\Test.mdb; Jet OLEDB:System Database=c:\\secure.mdw; User Id=321; Password=123;");
dbCon.Open();
String szTable1 = "CREATE TABLE Table1 (Field1 int UNIQUE NOT NULL PRIMARY KEY)";
OleDbCommand table1Cmd = new OleDbCommand(szTable1, dbCon);
table1Cmd.ExecuteNonQuery();    
String szTable2 = "CREATE TABLE Tablea (Fielda int UNIQUE NOT NULL PRIMARY KEY)";
OleDbCommand table2Cmd = new OleDbCommand(szTable2, dbCon);
table2Cmd.ExecuteNonQuery();
String szRelationship1 = "ALTER TABLE Table1 ADD CONSTRAINT TableLink FOREIGN KEY (Field1) REFERENCES Tablea(Fielda) ON DELETE CASCADE";
OleDbCommand relationship1Cmd = new OleDbCommand(szRelationship1, dbCon);
relationship1Cmd.ExecuteNonQuery();
dbCon.Close();

这将创建2个表并在它们之间建立关系,但是当我查看Access中的MSysRelationship表时,它给了我4096(这是一对多)的grbit,而不是4097(一对一)的grbit。一:

该图显示了MSysRelationships表,其grbit为4096
(来源: richardn.co.uk

当我在“关系”窗口中查看该关系时,在关系图上向我显示这是一对多关系,但是在“编辑关系”窗口中却说这是一对一关系:

该图显示了来自Microsoft Access的冲突信息
(来源: richardn.co.uk

我真的停留在这里,因为在Access中如果我编辑关系并更改设置之一并单击“确定”,它会立即在窗口中变成一对一的关系,并且grbit变为4097。我的代码最初将关系设置为4097的一对一关系吗?

正如我对此处类似问题的回答所暗示的那样,当使用DDL创建关系时,这似乎是关系在“关系”选项卡中显示方式的故障。 在先前的答案中,我没有做过任何更改,只是在“编辑关系”对话框中进行了更改,并查看“关系”选项卡中的小行是否确实发生了变化,但是您的发现表明确实如此。

我不相信,你正在做什么错事 ,而“修复”将是调整的MSysRelationships.grbit值,但你不能在[... MSys的来自一个OLEDB连接表得到反正。 因此,这可能只是我们必须接受的那些小怪癖之一。

实际上,如果关系实际上是一对一的行为 ,那么“关系”选项卡中的小写线看起来是什么并不重要。 运行一些测试,以确保关系和“引用完整性”规则按其应有的方式运行,如果可以,则继续进行其他操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM