Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中创建与access数据库的一对一关系时出现问题#_C#_Ms Access_Relationship_One To One - Fatal编程技术网

C# 在c中创建与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;

我正在尝试使用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();
这将创建两个表并在它们之间创建一个关系,但当我在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以获得良好的研究和对问题的清晰描述。