我在这里做错了什么?我只想要一个动态方法,它可以根据值计算任何列。但是收到运行时错误。
System.Data.dll中出现'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理
其他信息:'='附近的语法不正确。“
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();
}
}
}
答案 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
定义,您只会获得count
个not null
个值。
Count()
函数返回select查询(仅Not Null)值中的记录数。
另见您将如何实现以下目标:
1)仅计算null
个值
2)计算所有not null
值
3)计算数量/日期操作,即<
,>
,between
如果您的代码中不需要这些方案,那么您可以在sql中找到错误的答案。