C# 清理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

我有以下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传递参数是一种净化它的方法


有什么方法可以做到这一点吗?

下面的代码是使用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是否接受更正。这回答了你的问题吗?请添加一些描述。您应该解释为什么您的解决方案不会因问题而产生错误。