Выполнение хранимой процедуры приводит к ошибке, говорящей, что она ожидает параметр, который я предоставил? - PullRequest
0 голосов
/ 07 декабря 2010

Я написал фрагмент кода на c #, который выполняет хранимую процедуру в окне MS SQL. Создаю ИП вроде так:

SqlCommand command = new SqlCommand(creditLimitRequestSP, connection);
command.CommandType = System.Data.CommandType.StoredProcedure;

Затем я создаю набор параметров, используя конструктор для параметров:

SqlParameter p1 = new SqlParameter(p1, p1Value);
vdnParam.Size = 7;

Некоторые из моих параметров являются целыми числами, и в этом случае я анализирую их следующим образом:

int p4Value = 0;
bool parsedP4 = Int32.TryParse(p4AsAString, out p4Value);
SqlParameter p4;
if (parsedP4)
{
    p4 = new SqlParameter("@p4", SqlDbType.Int, p4Value);
    p4.Size = sizeof(Int32);
}
else
{
    throw new InvalidFieldDataException("p4", p4AsString);
}

Затем, после того, как я проанализировал параметры из словаря, я добавил их так:

command.Parameters.Add(p1);
command.Parameters.Add(p2);
command.Parameters.Add(p3);
command.Parameters.Add(p4);
command.Parameters.Add(p5);
command.Parameters.Add(p6);

Когда я выполняю хранимую процедуру, я получаю исключение, говорящее мне, что ожидает параметр, который я добавил в команду. Зачем это делать?

Первоначально я думал, что это может быть потому, что параметры добавляются в неправильном порядке, но я изменил их, чтобы они соответствовали порядку в хранимой процедуре (событие, хотя это не должно иметь значения, поскольку я использую именованные параметры), и это не ничего не решить.

Рассматриваемый параметр не имеет значения по умолчанию в SP и является целочисленным значением.

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

Если полученное вами исключение говорит о том, что вы не добавляете параметр, значит, вы не добавляете его. Параметры должны действительно совпадать по имени (порядок не имеет значения), и все необязательные параметры должны присутствовать. Направление (вход, выход) также должно быть правильно установлено.

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

Здесь вам мало что может помочь, так как должно быть что-то странное между тем, что, по вашему мнению, вы проходите, и тем, что вы действительно проходите. Вы должны отслеживать RPC: начальный класс событий в SQL Profiler и точно видеть, что вы передаете.

0 голосов
/ 07 декабря 2010

Я думаю, что нашел ответ ...

p4 = new SqlParameter("@p4", SqlDbType.Int, p4Value);

Третий параметр - это не значение, это размер параметра.

Для установки значения вам необходимо позвонить;

p4.Value = p4Value;

Собираюсь на тест и вернусь ...

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