Я провел некоторое исследование, и все, что я делаю, кажется правильным, что предлагают другие люди. Так что пока не удалось выяснить, почему это не работает, и когда я отлаживаю (int) команду. ExecuteScalar() показывает 0. Даже если я запустил запрос вручную - результат, возвращаемый в SQL Management Studio, равен 1. Это фрагмент кода, который я пытаюсь получить:count from ExecuteScalar() возвращает 0
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 все время? Приветствия.
Я также попытался преобразовать оба DateTimes просто ДАТЫ так:
and cast(ProcessStartDateTime as date) = convert(date, @processEventDateTime, 120)
Но его до сих пор не работает в C#, по-прежнему работает в среде SQL
также просто пытались count(*)
, все еще не работает только в C#
это может быть проблема '@ processEventDateTime', время на вашем C# не то же самое, как раз на вашем SQL Server. Вот почему в C# он возвращает 0, при запуске вручную в управлении sql он возвращает 1. –
Когда я копирую-вставляю значения из всех моих параметров, как они появляются в режиме отладки в C#, - запрос проходит просто отлично. Я преобразовываю значение в запросе в точно такой же формат. Cheers –
Да, Грант, это 0 :( –