Недавно я недавно сменил несколько функций при отладке запроса cte (получили помощь здесь). Я только что сменил несколько функций. У меня появился мой запрос на работу. Но теперь, когда мой код клиента C# вызывает эти функции через хранимые procs для моей логики программы, я получаю сообщение об ошибке «Процедура или функция DateTimeOfNextAvailableDataRun» ожидает параметра '@ NextDateTime ', который не был отправлен. «Возможно, возвращаются несколько значений?SQL-сервер хранит proc «Процедура или функция ожидает параметр, который не был указан».
Вот функция в ее нынешнем виде:
ALTER FUNCTION dbo.NextAvailableDataDownloadDateTime()
RETURNS date
BEGIN
RETURN (SELECT DATEADD(hour, 18, MIN(TradingDate)) AS TrDate
FROM tblTradingDays
WHERE (DATEADD(hour, 18, TradingDate) > dbo.LatestDataDownloadDate()))
END
И ХП, который вызывает его:
ALTER PROC DateTimeOfNextAvailableDataRun
@NextDateTime DateTime2 OUTPUT
AS
SELECT @NextDateTime = dbo.NextAvailableDataDownloadDateTime()
И, наконец, мой код клиента, который сделал работать до изменения:
public DateTime DateTimeOfNxtAvailableDataRun()
{
DateTime dateTimeOfNxtAvailableDataRun;
using (SqlCommand cmd = new SqlCommand("DateTimeOfNextAvailableDataRun", this.sqlConnection))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
dateTimeOfNxtAvailableDataRun = (DateTime)cmd.ExecuteScalar();
}
return dateTimeOfNxtAvailableDataRun;
}
Любые берущие? Опять же, функции работают в моем запросе sql-сервера (см. Недавние сообщения от меня), но теперь код вызова не согласен.
Я думал, что это очевидно, но я бежал без него. Я уверен. Может быть, не в мои часы ночной проб и ошибок ... thx. – StatsViaCsh
Не могу я просто вернуть значение? Гораздо более интуитивно понятный, чем выходные параметры для такой простой функции. – StatsViaCsh
Вы не можете «вернуть» нецелое значение из хранимой процедуры. Вы можете, однако, просто «ВЫБРАТЬ» значение в хранимой процедуре, например «SELECT dbo.NextAvailableDataDownloadDateTime()», и просто используйте 'cmd.ExecuteScalar()' вместо 'ExecuteNonQuery()' и верните результат в 'DateTime' –