Member 13206008 Ответов: 1

Как исправить"? idparam не найден в коллекции " в mysql insert stored proc


I am writing an insert query in mysql stored procedure .when i am trying to run i am getting error "?IDparam not found in collection" .I didnt give ID in insert as it should be autoincremented and i use it in update and delete later in this procedure.

This is Insert query from my proc: 
<pre>CREATE DEFINER=`root`@`%` PROCEDURE `insertproc`(
IN IDparam INT,
IN Pathparam VARCHAR(100),
IN fileNameparam VARCHAR(100),
IN Countparam VARCHAR(100),
IN CreatedBYparam DATETIME,
IN CreatedDateparam DATETIME,
IN Typeparam VARCHAR(100),
IN Statusparam VARCHAR(100),
IN crudparam VARCHAR(50))
BEGIN

IF(crudparam ='INSERT')
THEN
INSERT INTO pathmaster (
                        Path,
                        pathName,
                       fileName ,
                       Count,
                       CreatedBY,
                       CreatedDate,
                       Type,
                       Status
                        )
                        VALUES(
                             Pathparam,
                         (Select MAX(pathName) from pathmaster)+1,
                       FileNameparam,
                      Countparam,
                      CreatedBYparam,
                    CreatedDateparam,
                    Typeparam,
                    Statusparam
                );
END IF;


ниже приведен код для вызова SP
 MySqlParameter[] mysqlparam = new MySqlParameter[]
  {
     new MySqlParameter("Pathparam",Path.Trim()),

    new MySqlParameter("FileNameparam",filename.Trim()),
    new MySqlParameter("Countparam",count),
    new MySqlParameter("CreatedBYparam",date),
    new MySqlParameter("CreatedDateparam",date),
   new MySqlParameter("Typeparam",strType),
new MySqlParameter("Statusparam","pending"), 
    new MySqlParameter("ACTIONparam","INSERT")
   };
      ds = ExecuteProc("insertproc", mysqlparam);


так в чем же может быть проблема

Что я уже пробовал:

изменить столбец ID на varchar не получилось. в параметрах нет никаких пробелов.

Michael_Davies

Это ID столбца количество авто? если это так, то его нет в вашем списке параметров, попробуйте поместить ID в параметры и поставить DEFAULT в то место, где ID находится в вашем списке полей;

Вставить в pathmaster (ID,
Путь,
имя пути,
имя файла ,
Рассчитывать,
Создано,
CreatedDate,
Тип,
Статус
)
ЗНАЧЕНИЯ (ПО УМОЛЧАНИЮ,
Pathparam,
(Выберите MAX (pathName) из pathmaster)+1,
FileNameparam,
Countparam,
CreatedBYparam,
CreatedDateparam,
Typeparam,
Statusparam
);

Member 13206008

Я пытался, но все равно получаю ту же ошибку

Member 13206008

ID-это PK таблицы
при вызове SP я изменил ACTIONparam на crudparam
новый MySqlParameter ("crudparam", " INSERT")
все та же ошибка повторяется

1 Ответов

Рейтинг:
0

Richard Deeming

Ваша хранимая процедура объявляет параметр с именем IDParam Ваш код C# этого не делает.

Ваша хранимая процедура объявляет параметр с именем crudparam Ваш код C# этого не делает.

Ваш код C# передается в параметре с именем ACTIONparam. Ваша хранимая процедура не имеет такого параметра.

Список параметров, которые вы передаете в хранимую процедуру из своего кода C# ДОЛЖЕН сопоставьте список параметров для этой хранимой процедуры. Вы ДОЛЖЕН передайте значение для каждого входящего параметра хранимой процедуры, которое не имеет значения по умолчанию.

Так как вы не используете IDParam в рамках хранимой процедуры вам просто нужно удалить параметр из определения хранимой процедуры.


Member 13206008

Спасибо за ваш ответ,

IDparam-это первичный ключ pathmaster, и я использую его в том же storedprocedure(insertproc) в запросе обновления, а также вставляю запрос для вставки другой таблицы, принимая IDparam в качестве foreighnkey его также в том же storedprocedure (insertproc). по этой причине я объявил IDparam в SP (insertproc).ниже приведен запрос обновления, где я использую IDparam в том же storedproc(insertproc)

IF (crudparam= 'updatestatus')
ЗАТЕМ

UPDATE pathmaster SET Status= Statusparam Where ID=IDparam;

КОНЕЦ, ЕСЛИ;
поэтому я не могу удалить IDparam, есть ли какой-либо способ сделать это.

и я также изменил ACTIONparam на crudparam при вызове из C#.

новый MySqlParameter ("crudparam", " INSERT")

тем не менее я получаю ту же ошибку

Richard Deeming

Это совершенно просто - если у вас есть входной параметр без значения по умолчанию, то вы ДОЛЖЕН передайте значение этому параметру при вызове хранимой процедуры.

Если вы этого не сделаете, то получите ошибку, о которой упоминали в своем вопросе.

Member 13206008

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

Richard Deeming

Как я тебе уже говорил, каждый параметр, который не имеет значения по умолчанию ДОЛЖЕН быть указанным в вашем коде C#.

Я не знаю, как еще объяснить тебе это.

Если ваша хранимая процедура имеет параметр, и этот параметр не имеет значения по умолчанию, ваш код C# ДОЛЖЕН передайте этот параметр процедуре.

Если вы этого не сделаете, то получите ошибку, о которой упоминали в своем вопросе.