我应该添加什么代码来接受来自WHERE语句的null.
{
int numApprovals = 0;
string sql = "SELECT COUNT(Type) AS OpenforApproval " +
"FROM dbo.LeaveRequest " +
"WHERE Type IN (2, 3, 4, 5, 6, 8, 13, 14, 16, 22) " +
"GROUP BY MgtApproval " +
"HAVING MgtApproval IS NULL";
//"SELECT COUNT(EffectiveDate) AS OpenforApproval FROM LeaveRequest GROUP BY TimeStampApproval HAVING (TimeStampApproval IS NULL)";
using (cn = new SqlConnection(ConnectionString()))
{
cn.Open();
using (cmd = new SqlCommand(sql, cn))
{
cmd.CommandType = CommandType.Text;
numApprovals = (int)cmd.ExecuteScalar();
}
}
return numApprovals;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 12
只是:
WHERE Type IN (2, 3, 4, 5, 6, 8, 13, 14, 16, 22) OR Type IS NULL
Run Code Online (Sandbox Code Playgroud)
但我完全不相信你真正想要的东西,或问题的原因.
如果您在C#代码中获得异常,那么它不会来自where子句.
顺便说一句,我担心你的连接似乎正在重用现有的变量.馊主意.它几乎肯定是一个局部变量.您还可以通过从中间返回来使代码更简单:
string sql = ...;
using (var cn = new SqlConnection(ConnectionString()))
{
cn.Open();
using (cmd = new SqlCommand(sql, cn))
{
cmd.CommandType = CommandType.Text;
return (int) cmd.ExecuteScalar();
}
}
Run Code Online (Sandbox Code Playgroud)
如果问题与Jamie说的那样,那就是ExecuteScalar返回null,最简单的方法就是将它转换为可以为空的int并使用null合并运算符:
return (int?) cmd.ExecuteScalar() ?? 0;
Run Code Online (Sandbox Code Playgroud)