私の最初の投稿は十分に明確ではなかったと思うので、書き直します。
MySql にストアド関数があります。Prearped MySqlCommand を介して、このストアド関数を呼び出したいと思います。ストアド関数を呼び出すことができるmysqlコマンドを作成して準備します。その後、パラメーター値を設定し、このストアド関数を呼び出します。関数はエラーなく動作しますが、戻り値を取得できません。どうすれば戻り値を取得できますか?
これはパフォーマンスの問題ではありません。起動時にすべてのステートメントを準備する実装があります。今、これらの機能をストアド プロシージャと関数に追加したいと思います。
これが私の保存された関数です:
FUNCTION `RenameCharacter`(pUserKey varchar(50), pPlayerId int,
pCharacterId int, pCharacterName varchar(50))
RETURNS int(11)
mysql ストアド関数を呼び出すために、最初に mysqlcommand を作成します。
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
戻り値を取得できない理由は何ですか? 皆さん、ありがとうございました..