在SqlCommand查询中传递值时出错

时间:2018-03-23 12:29:03

标签: c# asp.net sql-server

我在这里做错了什么?我只想要一个动态方法,它可以根据值计算任何列。但是收到运行时错误。

  

System.Data.dll中出现'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理

     

其他信息:'='附近的语法不正确。“

Error

public class DataAccessLayerPayroll
{
     public static string CountTblColumByValue(string columName,string value)
    {
        String cs = ConfigurationManager.ConnectionStrings["BD_CompanyConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(cs))
        {
            string sqlQuery ="Select Count("+columName+") from tblAttendance1 where"+columName+"='"+value+"'";
            SqlCommand cmd = new SqlCommand(sqlQuery, con);

            con.Open();
            object count = cmd.ExecuteScalar();

            return count.ToString();
        }
    }
}

3 个答案:

答案 0 :(得分:0)

onClose: function (selected) { 
  $("#end")
    .datepicker("option", "minDate", selected)
    .datepicker("option", "disabled", !selected);
}

所以你的代码必须如下:

string sqlQuery ="Select Count("+columName+") from tblAttendance1 whereYOU ARE MISSING A SPACE HERE"+columName+"='"+value+"'";

答案 1 :(得分:0)

这里的问题是你错过了where "+columName+"= '"+value+"'"

之间的空格

但更大的问题是你的命令暴露于SQL注入。为了防止这种情况,请使用参数化查询。

按以下方式更改

public static string CountTblColumByValue(string columnName, string value)
{
    String cs = ConfigurationManager.ConnectionStrings["BD_CompanyConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(cs))
    {
        string sqlQuery ="Select Count(@myColumName) from tblAttendance1 where @myColumName = @myValue ";

        using(SqlCommand cmd = new SqlCommand(sqlQuery, con))
        {
           con.Open();
           cmd.Parameters.AddWithValue("@myColumName", columnName);
           cmd.Parameters.AddWithValue("@myValue", value);

           object count = cmd.ExecuteScalar();

           return count.ToString();
        }
    }
}

答案 2 :(得分:-1)

代码中的基本错误导致where=

之间的空格不足

此外,您应该按照其他答案中的建议修复SqlInjection。 (您不能使用的列名参数)

之后,您还应该看到根据Count定义,您只会获得countnot null个值。

  

Count()函数返回select查询(仅Not Null)值中的记录数。

另见您将如何实现以下目标:

1)仅计算null个值

2)计算所有not null

3)计算数量/日期操作,即<>between

如果您的代码中不需要这些方案,那么您可以在sql中找到错误的答案。