вызовите и получите возвращаемое значение из хранимой функции mysql, используя подготовленную команду mysql с помощью c # - PullRequest
0 голосов
/ 15 марта 2011

Я считаю, что мой первый пост был недостаточно понятным, поэтому я переписал, вот оно:

У меня есть сохраненная функция в MySql.Я хочу вызвать эту хранимую функцию через Prearped MySqlCommand.Я создаю команду mysql, которая может вызвать сохраненную функцию и подготовить ее.После этого я устанавливаю значения своих параметров и вызываю эту сохраненную функцию.Функция работает без ошибок, но я просто не могу получить возвращаемое значение.Как мне получить возвращаемое значение?

Это не проблема производительности, у меня есть реализация, которая подготавливает все операторы при запуске.Теперь я хочу добавить эти функции к хранимым процедурам и функциям.


Вот моя хранимая функция:

FUNCTION `RenameCharacter`(pUserKey varchar(50), pPlayerId int, 
pCharacterId int, pCharacterName varchar(50)) 
RETURNS int(11)

Чтобы вызвать хранимую функцию mysql, сначала я создаю команду mysql.:

commandString = new MBCommandString();
            commandString.commandName = "RenameCharacter";
            commandString.commandString = "RenameCharacter"; 
                                          /*@"Update characters set name = ?3
                                                    where characterId = ?2
                                                          and playerId = (Select playerId from players where lastKey = ?1)";*/
            commandString.parameters = new MySqlParameter[5];
            commandString.parameters[1] = new MySqlParameter("pUserKey", MySqlDbType.VarChar);
            commandString.parameters[2] = new MySqlParameter("pPlayerId", MySqlDbType.Int32);
            commandString.parameters[3] = new MySqlParameter("pCharacterId", MySqlDbType.Int32);
            commandString.parameters[4] = new MySqlParameter("pCharacterName", MySqlDbType.VarChar);
            commandString.parameters[0] = new MySqlParameter("@returnValue", MySqlDbType.Int32); 
            commandString.parameters[0].Direction = ParameterDirection.ReturnValue;

            commandString.type = MBCommandType.MBCT_Function;
            commandList.Add(commandString);

Затем я готовлю это:

MBCommand cmd = new MBCommand();
            cmd.command = new MySqlCommand(cs.commandString, connection);           
            cmd.command.Parameters.AddRange(cs.parameters);

            if (cs.type == MBCommandType.MBCT_Function)
            {
                cmd.command.CommandType = CommandType.StoredProcedure;
            }

            cmd.command.Prepare();
            cmd.type = cs.type;
            commands.Add(cs.commandName, cmd);

И я вызываю это с помощью класса c #, функция работает, но я не могу получить возвращаемое значение:

string key = reader.ReadString();
                        int playerId = reader.ReadInt32();
                        int characterId = reader.ReadInt32();
                        string characterNewName = reader.ReadString();

                        MBExecuteSingle execute = new MBExecuteSingle();
                        execute.commandName = "RenameCharacter";

                        execute.values = new object[5];
                        execute.values[1] = key;
                        execute.values[2] = playerId;
                        execute.values[3] = characterId;
                        execute.values[4] = characterNewName;
                        execute.values[0] = new Int32();
                        execute.values[0] = 4; //dummy initial value

Чего не хватает, почему я не могу получить возвращаемое значение?Спасибо всем ..

1 Ответ

0 голосов
/ 17 марта 2011

Вы должны использовать как Select

select RenameCharacter(1,2,3,4);
...