«Количество параметров не соответствует количеству значений для хранимой процедуры» нюанс System.Data.Common.DbCommand - PullRequest
0 голосов
/ 02 марта 2009

Это может быть проблема с настройкой базы данных сервера sql, но я не уверен, с чего начать.

У меня есть хранимая процедура:

CREATE PROCEDURE aStoredProcedure
@dteSince DATETIME = null
AS
...

Код C # для вызова хранимой процедуры:

using (IDataReader dr = database.ExecuteReader("aStoredProcedure"))
{
...

Код C # отлично работает в среде Production . Здесь dteSince будет иметь значение NULL, поскольку он не указан в качестве входного параметра.

Проблема в том, что когда я запускаю это в среде UAT , он возвращает сообщение, показанное в заголовке - неверное количество параметров ...

Я могу это исправить, изменив код на:

using (IDataReader dr = database.ExecuteReader (CommandType.StoredProcedure, "aStoredProcedure"))
{
...

Исправление просто маскирует реальную проблему, касающуюся того, как код может не работать в одной среде и отлично работает в другой.

Я удалил и воссоздал хранимую процедуру, но безуспешно.

Используемые технологии C # 2.0 и Sql Server 2005.

Ответы [ 3 ]

3 голосов
/ 02 марта 2009

ИМХО, CommandType всегда должен быть указан в любом случае - явность всегда предпочтительнее неявности. Очевидно, что что-то происходит под капотом, которое отличается в обеих средах, но когда вы явно указываете тип команды, код работает должным образом.

Единственное, о чем я могу думать - параметры базы данных точно такие же, особенно при обработке значений NULL?

EDIT

Может быть стоит проверить SET ANSI_NULLS ON/OFF и SET CONCAT_NULL_YIELDS_NULL ON / OFF - вы можете посмотреть свойства обеих баз данных и посмотреть, соответствуют ли настройки.

1 голос
/ 02 марта 2009

Вот некоторые советы по устранению неполадок, которые я обычно пробую.

  1. Проверьте сборку версию сборки DAL, в которой находится тип объекта «база данных».
  2. Проверка библиотеки ссылка на ваш DAL - Независимо от того, ссылаетесь ли вы на DLL из GAC или нет - у меня раньше были проблемы со ссылкой на DLL GAC , которая содержала старую сборку
  3. Проверьте вашу базу данных по умолчанию , когда ваш код пытается подключиться к базе данных в среде UAT. Возможно, он указывает на другие базы данных в зависимости от того, как вы подключены к базе данных.

И все еще не хорошо, чисто и Re решение для сборки

дополнительный комментарий: я не думаю, что «System.Data.IDataReader» должен быть включен в используемую технологию;)

0 голосов
/ 02 марта 2009

Вы можете использовать SQL Profiler, чтобы увидеть, что происходит в перспективе SQL Server.

В идеале нужно, чтобы кто-то также захватил след от производства, чтобы его можно было сравнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...