从 ExecuteScalar() 计数 returns 0
count from ExecuteScalar() returns 0
我做了一些研究,我所做的一切似乎与其他人建议的一样正确。所以还没有找到为什么这不起作用,当我调试 (int)command.ExecuteScalar() 时显示 0。即使我 运行 手动查询 - 结果在 [=27 中返回=] 管理工作室是 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() returns 0 一直都是?干杯。
我也试过像这样将两个日期时间都转换为日期:
and cast(ProcessStartDateTime as date) = convert(date, @processEventDateTime, 120)
但它在 c# 中仍然不起作用,在 SQL 管理
中仍然有效
也刚刚尝试过 count(*)
,仍然无法仅在 c# 中工作
尝试删除查询中 '@package'
周围的引号,您不需要这样做,command.Parameters.AddWithValue
会为您处理。我相信引用它会把它当作一个值,而不是一个参数,也就是说,本质上你是在用 ProcessCalled = '@package'
执行查询,字面意思是字符串 @package.
此外,您应该将 @ 符号添加到您的 AddWithValues 即 command.Parameters.AddWithValue("@package", package);
我做了一些研究,我所做的一切似乎与其他人建议的一样正确。所以还没有找到为什么这不起作用,当我调试 (int)command.ExecuteScalar() 时显示 0。即使我 运行 手动查询 - 结果在 [=27 中返回=] 管理工作室是 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() returns 0 一直都是?干杯。
我也试过像这样将两个日期时间都转换为日期:
and cast(ProcessStartDateTime as date) = convert(date, @processEventDateTime, 120)
但它在 c# 中仍然不起作用,在 SQL 管理
中仍然有效也刚刚尝试过 count(*)
,仍然无法仅在 c# 中工作
尝试删除查询中 '@package'
周围的引号,您不需要这样做,command.Parameters.AddWithValue
会为您处理。我相信引用它会把它当作一个值,而不是一个参数,也就是说,本质上你是在用 ProcessCalled = '@package'
执行查询,字面意思是字符串 @package.
此外,您应该将 @ 符号添加到您的 AddWithValues 即 command.Parameters.AddWithValue("@package", package);