**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
7天前关闭。
Improve this question
我有一个参数化的sqlite查询来插入外键。我使用PK表中最后一行的ID获取主键值,并尝试将其插入FK表。我不断收到一个错误,指出FK列上不存在这样的列。我验证了该列在数据库中。该列是外键。编译指示设置为打开。您不能使用带外键的参数吗?
下面是我的尝试:
我尝试在数据库中重命名该列。我仍然得到相同的错误没有这样的列存在。
更改表采购订单明细,将采购订单标识重命名为采购订单FK;
我尝试删除表并重新创建它。我仍然收到相同的错误消息:不存在这样的列。删除表purchase_order_detail
我创建了一个新的空白数据库进行测试,但也不起作用。
据我所知,这不是一个数据库问题,但这里是如何创建数据库。
注意,在代码中,我验证了第一个插入是正常的。
CREATE TABLE purchase_order (
purchase_order_pk INTEGER PRIMARY KEY,
other columns
FOREIGN KEY (supplier_fk) REFERENCES supplier(supplier_pk)
);
CREATE TABLE purchase_order_detail (purchase_order_detail_pk INTEGER PRIMARY KEY, purchase_order_fk INTEGER NOT NULL
other columns
FOREIGN KEY (purchase_order_fk) REFERENCES purchase_order(purchase_order_pk)
);
我已验证可以手动插入值(未使用参数)我验证了参数值已传递。我尝试仅使用外键列和参数进行插入,但仍然出现相同的错误:不存在此类列。注意,一个选择查询可以使用完全相同的列名。2我验证了列名和c#代码中没有空格。3我尝试为外键添加一个索引,然后将其删除。两种方式都没有区别。我看到其他人也有同样的问题,但他们的解决方案都没有帮助我。
这是要插入的块。我使用的是C# Dapper。
public override async Task<bool> Insert(PurchaseOrderModel entity)
{
// I need to insert into purchase_order and purchase_order_detail
// first, purchase_order, then purchase_order_detail
int newId = await Connection.QuerySingleAsync<int>("INSERT INTO purchase_order (supplier_fk, invoice_number, purchase_date) VALUES (@supplier_fk, @invoice_number, @purchase_date); SELECT last_insert_rowid()", new
{
supplier_fk = entity.supplier_fk,
invoice_number = entity.invoice_number,
purchase_date = entity.purchase_date
}, Transaction) ;
entity.purchase_order_fk = newId;
// verified this value is set.
// now for purchase_order_detail, removed all other columns except the FK for test.
bool insertrow = (await Connection.ExecuteAsync("INSERT INTO purchase_order_detail (purchase_order_fk) VALUES (purchase_order_fk = @purchase_order_fk)", new {purchase_order_fk = entity.purchase_order_fk}, Transaction)) == 1;
return insertrow;
}
...
1条答案
按热度按时间wfveoks01#
我知道您说过,您收到一个错误消息,指出该列不存在,但请查看第二个插入查询:
VALUES部分中的=有什么作用。不应该是:
我想我从未在插入查询中看到过包含=子句的VALUE