我正在为一个包含以下类型的唯一约束的表的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.设置 INT_KEY
中的所有 NULL
值不会更改任何内容 - 加载数据表时会发生相同的错误 .
当然,我可以将数据加载到 DataSource
并将 EnforceConstraints
设置为false,这有效 . 但是我感到不舒服,因为我发现了一个我不理解的错误并且忽略它而修复它...