На сервере SQL хранится процедура «Процедура или функция ожидает параметр, который не был предоставлен». - PullRequest
0 голосов
/ 05 января 2012

Недавно я изменил несколько функций во время отладки cte-запроса (здесь можно получить помощь).Я только что изменил пару функций ... это заставило мой запрос работать ... но теперь, когда мой клиентский код C # вызывает эти функции через хранимые процессы для логики моей программы, я получаю ошибку "Процедура или функция 'DateTimeOfNextAvailableDataRun' ожидает параметр '@NextDateTime ', который не был предоставлен. "Может быть, возвращаются несколько значений?

Вот функция в ее текущей форме:

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 (см. Последние сообщения от меня), но теперь вызывающий код не согласен ..

1 Ответ

2 голосов
/ 05 января 2012

Вы должны изменить тело оператора using и добавить выходной параметр перед выполнением команды.

var outputParameter = new SqlParameter { 
    ParameterName = "@NextDateTime",
    Direction = ParameterDirection.Output
};
cmd.Parameters.Add(outputParameters);
cmd.ExecuteNonQuery();
return (DateTime)outputParameter.Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...