SQLite C#不会插入NULL外键

时间:2016-03-09 10:14:54

标签: c# sqlite

我在外键列中添加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`)
);

你能告诉我我的错误/错误在哪里吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题不在于外键的价值。 (并且使列可以为空可以不影响其他约束。)

错误消息"外键不匹配"报告数据库架构中的错误。 问题是您在OrderItem表上没有required index