外键上的sqlite参数是否有限制?错误:使用参数插入时没有这样的列[已关闭]

jc3wubiy  于 2022-12-13  发布在  SQLite
关注(0)|答案(1)|浏览(119)

**已关闭。**此问题为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;
                
        }

...

wfveoks0

wfveoks01#

我知道您说过,您收到一个错误消息,指出该列不存在,但请查看第二个插入查询:

INSERT INTO purchase_order_detail (purchase_order_fk) VALUES (purchase_order_fk = @purchase_order_fk)

VALUES部分中的=有什么作用。不应该是:

INSERT INTO purchase_order_detail (purchase_order_fk) VALUES (@purchase_order_fk)

我想我从未在插入查询中看到过包含=子句的VALUE

相关问题