C# 在c中创建与access数据库的一对一关系时出现问题#
我正在尝试使用c#在Microsoft Access数据库中创建一对一关系。到目前为止,我有以下代码(据我所知)可以创建一对一的关系:C# 在c中创建与access数据库的一对一关系时出现问题#,c#,ms-access,relationship,one-to-one,C#,Ms Access,Relationship,One To One,我正在尝试使用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;
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();
这将创建两个表并在它们之间创建一个关系,但当我在Access中查看MSysRelationship表时,它给我的grbit是4096(一对多),而不是4097(一对一):
(来源:) 当我在“关系”窗口中查看关系时,它在关系图上显示它是一对多关系,但在“编辑关系”窗口中,它表示它是一对一关系:
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();
(来源:)
我真的被困在这里,因为在Access中,如果我编辑关系并更改其中一个设置,然后单击“确定”,它会立即在窗口中变成一对一关系,grbit将更改为4097。最初将关系设置为grbit为4097的一对一关系时,我的代码中缺少了什么?正如我对一个类似问题的回答所建议的,这似乎是使用DDL创建关系时,关系选项卡中显示关系的方式出现了问题。在前面的回答中,我甚至没有在“编辑关系”对话框中更改某些内容,并查看“关系”选项卡中的小行是否实际更改,但您的发现表明确实更改了 我不认为您做错了什么,“修复”将是调整
MSysRelationships.grbit
值,但无论如何,您无法从OleDb连接获取[MSys…]表。所以,这可能只是我们必须接受的小怪癖之一
实际上,如果关系实际上表现为一对一,那么关系选项卡中的小行看起来是什么并不重要。运行两个测试以确保关系和引用完整性规则按其应有的方式运行,如果它们按应有的方式运行,则只需继续进行其他操作。+1以获得良好的研究和对问题的清晰描述。