如题,我希望在程序创建数据库的同时创建存储过程,在需要的使用调用该存储过程。
但是,在MYSQL中能执行成功的存储过程创建语句,使用MySqlCommand执行却总是报错:
Parameter '@sqlsel' must be defined原存储过程代码如下:
DELIMITER //
CREATE PROCEDURE Insertnode(IN node_id INT,IN tablename VARCHAR(20))
BEGIN
SET @sqlsel=CONCAT('SELECT RightNode INTO @rgt FROM ', tablename,' WHERE Id = ',node_id);
PREPARE s1 FROM @sqlsel;
EXECUTE s1;
DEALLOCATE PREPARE s1;SET @selupt1=CONCAT('UPDATE ',tablename,' SET RightNode = RightNode + 2 WHERE RightNode >= ',@rgt);
PREPARE s2 FROM @selupt1;
EXECUTE s2 ;
DEALLOCATE PREPARE s2;SET @selupt2=CONCAT('UPDATE ',tablename,' SET LeftNode = LeftNode + 2 WHERE LeftNode >= ',@rgt);
PREPARE s3 FROM @selupt2;
EXECUTE s3 ;
DEALLOCATE PREPARE s3;
END;
但是,在MYSQL中能执行成功的存储过程创建语句,使用MySqlCommand执行却总是报错:
Parameter '@sqlsel' must be defined原存储过程代码如下:
DELIMITER //
CREATE PROCEDURE Insertnode(IN node_id INT,IN tablename VARCHAR(20))
BEGIN
SET @sqlsel=CONCAT('SELECT RightNode INTO @rgt FROM ', tablename,' WHERE Id = ',node_id);
PREPARE s1 FROM @sqlsel;
EXECUTE s1;
DEALLOCATE PREPARE s1;SET @selupt1=CONCAT('UPDATE ',tablename,' SET RightNode = RightNode + 2 WHERE RightNode >= ',@rgt);
PREPARE s2 FROM @selupt1;
EXECUTE s2 ;
DEALLOCATE PREPARE s2;SET @selupt2=CONCAT('UPDATE ',tablename,' SET LeftNode = LeftNode + 2 WHERE LeftNode >= ',@rgt);
PREPARE s3 FROM @selupt2;
EXECUTE s3 ;
DEALLOCATE PREPARE s3;
END;
现在报错是:Parameter '@rgt' must be defined.command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@sqlsel", MySqlDbType.String);
command.Parameters.Add("@rgt", MySqlDbType.Int32);
command.Parameters.Add("@selupt1", MySqlDbType.String);
command.Parameters.Add("@selupt2", MySqlDbType.String);
int id = 0;
try
{
command.ExecuteNonQuery();
command.Connection.Close();
}
catch (Exception e)
{
command.Connection.Close();
throw e;
}
定义了还是不行。
现在报错是:Parameter '@rgt' must be defined.command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@sqlsel", MySqlDbType.String);
command.Parameters.Add("@rgt", MySqlDbType.Int32);
command.Parameters.Add("@selupt1", MySqlDbType.String);
command.Parameters.Add("@selupt2", MySqlDbType.String);
int id = 0;
try
{
command.ExecuteNonQuery();
command.Connection.Close();
}
catch (Exception e)
{
command.Connection.Close();
throw e;
}
这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数
这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数
这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数同样不行
----------------- 你的参数只是这些,所以 parameter 中只应该有这些
@xx 的这些是变量,你直接用 command 执行一下赋值语句, set @xx = 123 这种,不要写在参数里面