我在外键列中添加NULL值时遇到问题。我已将外键设置为NULLABLE,我也在C#中启用了外键。
这是我的C#代码:
private static SQLiteConnection _conn = new SQLiteConnection("DataSource = D:/SQLDB.sqlite;foreign keys=true;");
string sql = @"INSERT INTO Scan(id, name, employeeId, scannerId, orderItemId) VALUES (1,'name',1,1, NULL);";
SQLiteCommand cmd = new SQLiteCommand(sql, _conn);
cmd.ExecuteNonQuery()
我有一个表Scan,它有3个外键employeeId,scannerId和orderItemId。 EmployeeId和ScannerId不能为null,但orderItemId可以,因为在扫描状态完成之前它将不可用。
上面的SQL INSERT cmd会引发异常:
foreign key mismatch - "Scan" referencing "OrderItem"
我不明白为什么,因为当我在SQLite中手动执行相同的命令时,它可以正常工作。
这就是我在SQLite中创建Scan表的方法:
CREATE TABLE `Scan` (
`id` INTEGER NOT NULL,
`name` VARCHAR(255),
`employeeId` INTEGER NOT NULL,
`scannerId` INTEGER NOT NULL,
`orderItemId` INTEGER,
PRIMARY KEY(id),
FOREIGN KEY(`employeeId`) REFERENCES `Employee`(`id`),
FOREIGN KEY(`scannerId`) REFERENCES `Scanner`(`id`),
FOREIGN KEY(`orderItemId`) REFERENCES `OrderItem`(`id`)
);
你能告诉我我的错误/错误在哪里吗?我做错了什么?
答案 0 :(得分:0)
问题不在于外键的价值。 (并且使列可以为空可以不影响其他约束。)
错误消息"外键不匹配"报告数据库架构中的错误。
问题是您在OrderItem
表上没有required index。