如何在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
相关产品推荐
相关产品推荐

