从ExecuteScalar()开始计数返回0

时间:2015-02-17 02:34:38

标签: c# tsql

我做过一些研究,我所做的一切似乎都与其他人的建议一致。所以还没有发现为什么这不起作用,当我调试(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#中工作

1 个答案:

答案 0 :(得分:3)

尝试删除查询中'@package'周围的引号,您不应该这样做,command.Parameters.AddWithValue会为您处理。我相信引用它会将它视为一个值,而不是一个参数,即本质上你用ProcessCalled = '@package'执行查询,字面意思是字符串@package。

此外,您应该将@符号添加到AddWithValues,即command.Parameters.AddWithValue("@package", package);