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

如何在C#中为SqliteConnection实现参数化查询?

如何将SQLite查询改造为参数化查询

直接替换字符串拼接的变量为参数占位符,通过参数对象传入值即可,具体改造如下:

修改后的代码:

private SqliteConnection dbConn;
var user = dbConn.Query<Users>($"SELECT * FROM {nameof(Users)} WHERE {nameof(Users.Id)} = @UserId", new { UserId = userID }).FirstOrDefault();

核心要点:

  • 用@UserId作为参数占位符替代原代码中'{userID}'的字符串拼接方式,彻底避免SQL注入风险
  • 通过匿名对象new { UserId = userID }传递参数,你使用的Query<T>是Dapper的扩展方法,它会自动完成参数与占位符的映射
  • 保留nameof(Users)和nameof(Users.Id)是安全的,这部分属于代码层面的表/列名引用,不属于用户输入,不存在注入隐患

如果后续需要处理多个参数,同样可以扩展这种写法:

// 多参数示例
var queryParams = new { 
    UserId = userID,
    UserStatus = UserStatus.Active
};
var user = dbConn.Query<Users>(
    $"SELECT * FROM {nameof(Users)} WHERE {nameof(Users.Id)} = @UserId AND {nameof(Users.Status)} = @UserStatus",
    queryParams
).FirstOrDefault();

这种参数化写法不仅更安全,还能让数据库复用查询计划,提升执行效率,同时保证参数类型匹配准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:34:58