从 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);