FbDataReader问题与唯一约束

时间:2016-03-22 16:28:17

标签: c# datatable firebird unique-constraint firebird2.5

我正在为DataTable加载FbDataReader以获取包含以下类型的唯一约束的表(全表DDL)

CREATE TABLE MY_TABLE (
    PK_ID INTEGER NOT NULL,
    STRING_KEY CHAR(50) NOT NULL COLLATE NONE,
    INT_KEY INTEGER,
    CONSTRAINT PK_MY_TABLE PRIMARY KEY (PK_ID));  

ALTER TABLE MY_TABLE ADD CONSTRAINT FK_MY_TABLE_INT_KEY FOREIGN KEY (INT_KEY) REFERENCES MY_OTHER_TABLE (INT_KEY) 
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE MY_TABLE ADD CONSTRAINT U_MY_TABLE UNIQUE (STRING_KEY, INT_KEY);

我想要的是能够为同一个STRING_KEY提供多个条目,前提是它们具有不同的INT_KEY。请注意,我可以将INT_KEY作为NULL条记录,但如果是,则(STRING_KEY, NULL)记录也应该是唯一的。

此外,我在INT_KEY上有一个外键。

现在,当我按如下方式加载FbDataReader时:

FbDataReader reader = command.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(reader);

我收到错误:

  

无法启用约束。一行或多行包含违反非null,唯一或外键约束的值。

所以我在这里测试: 1.删​​除上述唯一约束然后加载工作 2.使用只有STRING_KEY作品的唯一约束,即我绝对不会违反记录:单个键是唯一的,组合键也必须是唯一的 - 或者我误解了唯一约束的含义。 3.设置NULL中的所有INT_KEY值不会更改任何内容 - 加载数据表时会发生相同的错误。

当然,我可以将数据加载到DataSource并将EnforceConstraints设置为false,这有效。但是我感到不舒服,因为我不理解并且无视它而修复错误......

0 个答案:

没有答案