You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作SQLite插入数据后如何获取最后一条记录的ID作为外键

解决方案

首先排查两个基础错误:

  1. 你的INSERT语句存在笔误:INSERT INTRO需要修正为INSERT INTO
  2. SCOPE_IDENTITY()是SQL Server专属函数,SQLite环境不支持,无需再尝试该方法

SQLite获取当前连接最近插入的自增ID,确实是用last_insert_rowid(),你之前调用失败是因为执行方法不对:Execute方法只会返回SQL执行的受影响行数,不会返回查询结果,需要改用ExecuteScalar方法执行插入+查询的组合语句,直接拿到返回的ID值。

另外注意不要用字符串拼接的方式传入外键值,改用参数化查询,既避免SQL注入风险,也不会出现类型转换错误。同时C#是大小写敏感的,你第二行的cnn.execute小写写法也会触发编译错误,需要修正为Execute。

修正后的完整代码如下:

public static void SaveProduct(ProductModel product, string filename, string path)
{  
    using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
    {
        // 插入产品后直接查询自增ID,用ExecuteScalar获取返回结果
        int productId = cnn.ExecuteScalar<int>(
            "INSERT INTO ProductDB (Name, Price) VALUES (@Name, @Price); SELECT last_insert_rowid();", 
            product);

        // 图片插入用参数化查询传值
        cnn.Execute(
            "INSERT INTO ImageDB (Filename, Path, FK_Product) VALUES (@Filename, @Path, @ProductId);",
            new { Filename = filename, Path = path, ProductId = productId });
    }
}

如果你的产品表主键ID是long类型,把ExecuteScalar<int>改成ExecuteScalar<long>即可。另外需要确认ProductDB表的主键字段已经设置了AUTOINCREMENT属性,否则last_insert_rowid()无法返回正确的自增值。

内容的提问来源于stack exchange,提问作者user17227084

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:54:07