C# 清理SQL参数
我有以下SQL查询:C# 清理SQL参数,c#,sonarqube,C#,Sonarqube,我有以下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
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传递参数是一种净化它的方法
有什么方法可以做到这一点吗?下面的代码是使用ADO.net从数据库获取数据的示例: 更改获取参数的方法
using (SqlConnection conn = new SqlConnection("connectionString"))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"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;";
cmd.Parameters.AddWithValue("@deptId", deptId);
try
{
conn.Open();
var reader = cmd.ExecuteReader();
}
catch(SqlException e)
{
MessgeBox.Show(e.Message.ToString(), "Error Message");
}
}
}
老实说,在这种情况下,SonarCube是错误的。您正确地使用了一个已准备好的语句,甚至不必担心清理参数。相反,您让数据库担心如何将输入值绑定到占位符。我的建议是:忽略SonarCube。这里只是一个黑暗中的镜头,但它会不会因为
'english'
没有参数化而对'DEPT.LANG\u chu TAG='english'
咆哮?@dbc:也许,我会试试看sonar是否接受更正。这回答了你的问题吗?请添加一些描述。您应该解释为什么您的解决方案不会因问题而产生错误。