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

Asp Core Web API中向原生SQL查询正确传递SqlParameter的方法

解决SqlParameter传递后查询返回空的问题

你遇到的核心问题是手动给参数值添加了多余的单引号,SqlParameter会自动处理参数的转义与引号包裹逻辑,额外的引号会导致实际传入的值和你预期的不一致,自然查不到结果。

正确的传递步骤:

  • 第一步:移除手动拼接的单引号
    不需要给shain.searchAffiliation包裹''',直接使用原始的字符串值即可——参数化查询会自动处理字符串的引号问题,包括值本身含单引号的场景。
  • 第二步:调整SqlParameter的创建
    直接传入原始属性值,不需要经过tempStr的额外处理:
    var shainParameterSearchName = new SqlParameter("@searchAffiliation", shain.searchAffiliation ?? DBNull.Value);
    

    小提示:如果shain.searchAffiliation可能为null,建议用DBNull.Value代替,避免参数值为null导致的SQL执行异常。

  • 第三步:修正SQL语句字符串
    不需要在SQL里给参数值加引号,直接使用参数名即可:
    String affSetStr = " SET @Affiliation = @searchAffiliation ;";
    
    如果你的逻辑是用该参数作为查询条件,直接在WHERE子句里写= @searchAffiliation就行,完全不用手动处理引号。

为什么原来的方式会返回空?

你之前传入的参数值是'''XXX'''(XXX是实际的部门值),这会导致SQL中@Affiliation被赋值为带三层单引号的字符串,而数据库里存储的是正常的XXX,自然匹配不到任何数据,所以返回空列表。

完整示例代码

// 直接用原始值创建参数
var affiliationParam = new SqlParameter("@searchAffiliation", shain.searchAffiliation ?? DBNull.Value);

// 构建参数化SQL语句
string affSetStr = "SET @Affiliation = @searchAffiliation;";
string queryStr = $"{affSetStr} SELECT * FROM YourShainTable WHERE Affiliation = @Affiliation;";

// 执行查询
using (var cmd = new SqlCommand(queryStr, yourDbConnection))
{
    cmd.Parameters.Add(affiliationParam);
    // 处理查询结果,比如读取DataTable或实体列表
}

这样既彻底规避了SQL注入风险,又能保证参数值正确传递,查询到预期的结果。

内容的提问来源于stack exchange,提问作者Trí Chồn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:14:56