我正在为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,这有效。但是我感到不舒服,因为我不理解并且无视它而修复错误......