我做过一些研究,我所做的一切似乎都与其他人的建议一致。所以还没有发现为什么这不起作用,当我调试(int)command.ExecuteScalar()显示0.即使我手动运行查询 - 在SQL Management Studio中返回的结果是1 。 这是我试图开始工作的代码段:
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var command = new SqlCommand(@"
select count (distinct ProcessCalled)
from ETL.ProcessMonitor
where ProcessCalled = '@package' and ProcessStatusDescription in ('Running','RanToCompletion')
and ProcessStartDateTime > convert(datetime, @processEventDateTime, 120)", connection);
command.Parameters.AddWithValue("processEventDateTime", _lastPackageExecution);
command.Parameters.AddWithValue("package", package);
return (int)command.ExecuteScalar() > 0;
}
那有什么问题呢?为什么(int)command.ExecuteScalar()一直返回0?欢呼声。
我还尝试将日期时间转换为这样的日期:
and cast(ProcessStartDateTime as date) = convert(date, @processEventDateTime, 120)
但它仍然无法在c#中运行,仍然适用于SQL Management
我刚刚尝试过count(*)
,仍然没有在c#中工作
答案 0 :(得分:3)
尝试删除查询中'@package'
周围的引号,您不应该这样做,command.Parameters.AddWithValue
会为您处理。我相信引用它会将它视为一个值,而不是一个参数,即本质上你用ProcessCalled = '@package'
执行查询,字面意思是字符串@package。
此外,您应该将@符号添加到AddWithValues,即command.Parameters.AddWithValue("@package", package);