【发布时间】:2020-04-14 10:48:40
【问题描述】:
我有以下 SQL 查询:
var query = @"select EMP.ID, EMP.NAME
from DB_TEST.DBO.EMPLOYEE as EMP
inner join DB_TEST.DBO.DEPARTMENT as DEPT on EMP.ID = DEPT.EMP_ID and DEPT.LANG_CH_TAG = 'english'
where DEPT.ID = @deptId
group by EMP.ID, EMP.NAME;";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.Add("@deptId", SqlDbType.Int);
cmd.Parameters["@deptId"].Value = 37;
reader = cmd.ExecuteReader();
当这段代码在Sonar下运行时,出现如下错误:
确保清理此 SQL 命令的参数。
我认为通过 cmd.Parameters 传递参数是一种清理它的方法。
请问有什么办法吗?
【问题讨论】:
-
老实说,SonarCube 在这种情况下是错误的。您正确地使用了准备好的语句,甚至不需要对参数进行清理。相反,您让数据库担心如何将输入值绑定到占位符。我的建议:忽略 SonarCube。
-
这里只是在黑暗中拍摄,但它会因为
'english'未参数化而狂吠DEPT.LANG_CH_TAG = 'english'吗? -
@dbc : 也许吧,我会试试看声纳是否接受更正。