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

使用Dapper操作SQLite时,带短横线列名的参数匹配问题咨询

在Dapper与SQLite中使用带短横线的列名匹配同名参数

要实现带短横线的列名与同名参数匹配,核心是正确处理SQLite的参数语法和Dapper的参数映射规则,具体方案如下:

关键写法说明

SQLite允许参数名包含特殊字符(如短横线),但需要用双引号包裹参数名的标识符部分;同时Dapper会自动忽略参数名前的@符号,直接使用后续的标识符匹配参数集合中的键。

具体实现代码

静态场景示例

public void Insert(int id, string somefield)
{
    using(var db = new SQLiteConnection("你的SQLite连接字符串"))
    {
        // SQL中参数用@"列名"的形式
        string sql = "INSERT INTO Example (id, [some-field]) VALUES (@id, @\"some-field\")";
        // 参数字典直接使用原始列名作为键
        var parameters = new Dictionary<string, object>
        {
            {"id", id},
            {"some-field", somefield}
        };
        db.Execute(sql, parameters);
    }
}

动态生成SQL场景示例

如果列名是动态计算的,可以通过字符串拼接生成符合要求的SQL语句:

public void Insert(Dictionary<string, object> columnValues)
{
    using(var db = new SQLiteConnection("你的SQLite连接字符串"))
    {
        // 生成列名部分(用方括号包裹特殊列名)
        var columns = string.Join(", ", columnValues.Keys.Select(col => $"[{col}]"));
        // 生成参数部分(用@"列名"的形式)
        var parameters = string.Join(", ", columnValues.Keys.Select(col => $"@\"{col}\""));
        string sql = $"INSERT INTO Example ({columns}) VALUES ({parameters})";
        
        // 直接传入列名字典即可匹配
        db.Execute(sql, columnValues);
    }
}

错误写法分析

你之前尝试的几种写法失败原因如下:

  • [@some-field]:SQLite将其解析为名为@some-field的数据库列,而非参数,因此报“不存在列”的错误。
  • @[some-field]:SQLite语法不允许@后直接跟方括号,属于语法错误。
  • "@some-field":这是字符串字面量,会直接插入文本@some-field而非传入的参数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:39:52