2015-02-17 3 views
0

Я провел некоторое исследование, и все, что я делаю, кажется правильным, что предлагают другие люди. Так что пока не удалось выяснить, почему это не работает, и когда я отлаживаю (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#

+1

это может быть проблема '@ processEventDateTime', время на вашем C# не то же самое, как раз на вашем SQL Server. Вот почему в C# он возвращает 0, при запуске вручную в управлении sql он возвращает 1. –

+0

Когда я копирую-вставляю значения из всех моих параметров, как они появляются в режиме отладки в C#, - запрос проходит просто отлично. Я преобразовываю значение в запросе в точно такой же формат. Cheers –

+0

Да, Грант, это 0 :( –

ответ

3

Попробуйте удалить цитаты со всего '@package' в запросе, вам не нужно это делать, command.Parameters.AddWithValue позаботится об этом для вас. Я считаю, что цитирование будет рассматривать его как значение, а не как параметр, т. Е. В основном вы выполняете запрос с ProcessCalled = '@package', буквально строку @package.

Кроме того, следует добавить символ @ вашей AddWithValues ​​т.е. command.Parameters.AddWithValue("@package", package);

Смежные вопросы