Процедура или функция ожидает параметр, который не был указан, но параметр поставляется [дубликат]

У меня была эта проблема с моей Visual Studio 2015. Я снова удалил и снова установил диспетчер пакетов NuGet. Это сработало для меня.

18
задан jhorton 17 February 2010 в 16:55
поделиться

4 ответа

Попробуйте убедиться, что тип команды установлен в хранимую процедуру.

mycommand.CommandType = System.Data.CommandType.StoredProcedure;
41
ответ дан Aaron 19 August 2018 в 13:36
поделиться
  • 1
    Вы получаете «Неверный синтаксис рядом ...». если он не установлен в StoredProcedure, поэтому я не думаю, что это – AdaTheDev 17 February 2010 в 17:21
  • 2
    @ Ответ Рэя не имеет смысла, учитывая контекст. Если для типа команды установлено значение «Текст», вызов этой хранимой процедуры никогда не будет работать, если вы не сделаете что-то вроде @SLaks, предлагаемого путем размещения параметров внутри оператора. Смена типа команды на хранимую процедуру должна определенно работать. – Aaron 17 February 2010 в 17:34
  • 3
    Во всяком случае, получение ошибки всякий раз, когда тип команды не задан в хранимой процедуре, похоже, дает больше доказательств того, что это на самом деле проблема. – Aaron 17 February 2010 в 17:36
  • 4
    Сообщение об ошибке, возвращаемое сервером sql, указывает, что он знает, что команда является сохраненным вызовом proc. Я согласен с вами в том, что он должен быть явно настроен в командном объекте, поэтому сервер sql не должен угадывать, но я не думаю, что это вызывает ошибку. – Ray 17 February 2010 в 17:48
  • 5
    @Aaron - Спасибо за ваш ответ. Это исправило мою проблему. – jhorton 17 February 2010 в 17:49
Command1.CommandType = System.Data.CommandType.StoredProcedure

Это заставит ExecuteReader выполнить exec вместо того, чтобы просто попробовать его как плоскую команду.

3
ответ дан Craig 19 August 2018 в 13:36
поделиться

Вы получите это исключение, если значение переменной 'userName' равно null

Если значение null действительное, тогда вместо DBNull.Value передайте db:

command1.Parameters.Add(new SqlParameter("@UserName", (userName ?? DBNull.Value));   
7
ответ дан Ray 19 August 2018 в 13:36
поделиться
  • 1
    +1 - вот что я думал – AdaTheDev 17 February 2010 в 17:01
  • 2
    Неправильно. Это не проблема здесь, и в любом случае это исключение не исключает. – SLaks 17 February 2010 в 17:01
  • 3
    @SLaks - ваш downvote немного поспешный - я делаю эту ошибку слишком часто, и это исключение, которое я получаю, чтобы отшлепать меня – Ray 17 February 2010 в 17:04
  • 4
    Вообще-то, я не спускал вниз; кто-то другой. Однако вы все еще неправы. – SLaks 17 February 2010 в 17:08
  • 5
    userName не является нулевым и никогда не должен быть пустым до тех пор, пока он вошел в систему. Но я говорю так, как будто что-либо в коде всегда доказано. Но я добавлю это на всякий случай. благодаря – jhorton 17 February 2010 в 17:08

По умолчанию свойство CommandText должно содержать полную команду SQL, а не только имя хранимой процедуры.

Вы можете изменить это, чтобы установить SqlCommand в CommandType в StoredProcedure.

В качестве альтернативы вы можете явно передать параметры, изменив CommandText на "someStoredProcedure @UserName, @ProductCode"; это полный оператор SQL и будет работать с по умолчанию CommandType из Text.

EDIT: Я просто попробовал это и единственный способ получить это сообщение об ошибке без установки CommandType на StoredProcedure (что он не сделал), если CommandText EXEC someStoredProcedure. Передача параметра null дает другую ошибку.

3
ответ дан SLaks 19 August 2018 в 13:36
поделиться
  • 1
    Вы получаете «Неверный синтаксис рядом ...». если он не установлен в StoredProcedure, поэтому я не думаю, что это так. Я воспроизвел ошибку, указанную OP, используя ответ @ Ray, поэтому я думаю, что он может быть прав – AdaTheDev 17 February 2010 в 17:22
  • 2
    +1, поскольку я воспроизвел и это так сейчас. Похоже, что имеет значение, какую версию SQL Server вы используете - SQL 2008 сообщает об этом как ошибку, предоставленную OP. В SQL 2000 (и я думаю, что 2005 год, хотя мне нужно перепроверять), это сообщается, как я сказал в моем комментарии выше - «Неправильный синтаксис ...». Думаю, я могу постучать по почте в блоге! – AdaTheDev 17 February 2010 в 20:48
Другие вопросы по тегам:

Похожие вопросы: