如题,我希望在程序创建数据库的同时创建存储过程,在需要的使用调用该存储过程。
但是,在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;

解决方案 »

  1.   

    定义了还是不行。
    现在报错是: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;
                }
      

  2.   


    定义了还是不行。
    现在报错是: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;
                }
      

  3.   


    这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数
      

  4.   


    这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数
    这个加参数,应该是加上node_id 和 tablename来作为参数的,不是存储过程里面的参数同样不行
      

  5.   

    IN node_id INT,IN tablename VARCHAR(20))
    -----------------  你的参数只是这些,所以 parameter 中只应该有这些
    @xx 的这些是变量,你直接用 command 执行一下赋值语句, set @xx = 123 这种,不要写在参数里面