C# 如何使用参数调用MySQL过程?

C# 如何使用参数调用MySQL过程?,c#,mysql,winforms,stored-procedures,parameters,C#,Mysql,Winforms,Stored Procedures,Parameters,我试图在单击winform中的按钮时调用存储过程。存储过程有一个insert语句,其中的值boardID=@newGameID newGameID引用在我的c#code中传入的值。作为测试,我将该值设为1。以下是我的存储过程: delimiter // create procedure loopData() BEGIN DECLARE i int DEFAULT 0; WHILE i <= 62 DO INSERT INTO tbl_tile (boardID) VALUES(@newGa

我试图在单击winform中的按钮时调用存储过程。存储过程有一个insert语句,其中的值
boardID=@newGameID

newGameID
引用在我的c#code中传入的值。作为测试,我将该值设为1。以下是我的存储过程:

delimiter //
create procedure loopData()
BEGIN
DECLARE i int DEFAULT 0;
WHILE i <= 62 DO
INSERT INTO tbl_tile (boardID) VALUES(@newGameID);
SET i = i + 1;
END WHILE;
END//
delimiter ;
运行winform时,出现以下错误:

我不确定我是否正确地构造了它,但我认为当我执行
命令.Parameters.AddWithValue(“newGameID”,1)
时,它会将存储过程中的参数值设置为1。我该如何解决这个问题,或者有更好的方法解决这个问题?

试试这个:


command.Parameters.AddWithValue(“@newGameID”,1)

尝试这种方法,如果出现相同的错误,请检查您的SP

        string Conn = "server=localhost;password=1234;user id=root;persistsecurityinfo=True;database=dat602_assessmentdb_m2"
        SqlConnection con = new SqlConnection(Conn);

        try
        {
            SqlCommand com = new SqlCommand("loopData", con);
            com.CommandType = CommandType.StoredProcedure;
            com.Parameters.AddWithValue("@newGameID", 1);

            con.Open();
            com.ExecuteNonQuery();


        }

问题是您调用的sql存储过程没有任何参数!存储过程在其主体中引用了一个会话变量,但这不是您要传递的sql语句的一部分

您应该将存储过程更改为具有参数,然后可以按如下方式传递它:

delimiter //
create procedure loopData(IN newGameID int)
    BEGIN
        DECLARE i int DEFAULT 0;
        WHILE i <= 62 DO
            INSERT INTO tbl_tile (boardID) VALUES(newGameID);
            SET i = i + 1;
        END WHILE;
    END//
delimiter ;
分隔符//
创建过程loopData(在newGameID int中)
开始
声明i int默认值为0;

当我返回相同的错误时,欢迎使用堆栈溢出Eder。你能通过描述你的代码应该做什么以及它如何回答这个问题来扩展这个答案吗?试着这样做,如果你得到相同的错误,请检查你的SP string Conn=“server=localhost;password=1234;user id=root;persistensecurityinfo=True;database=dat602\u assessmentdb\u m2”SqlConnection con=new SqlConnection(Conn);尝试{SqlCommand com=newsqlcommand(“loopData”,con);com.CommandType=CommandType.StoredProcedure;com.Parameters.AddWithValue(“@newGameID”,1);con.Open();com.ExecuteNonQuery();}我尝试了此操作,但它仍然返回相同的错误。SP字符串与其他地方使用的一样正确。如果我在数据库中将其设置为值1,则存储过程可以工作,但如果我要创建参数,则无法工作。我的意思是,当我执行
插入tbl_tile(boardID)值(1)时,存储过程可以工作;
。但我希望value成为一个参数欢迎使用Stack Overflow!这是一个很好的问题,但与其发布错误截图的链接,不如将其转录到您的问题中。这会让人们更容易阅读和回答您的问题。创建存储时您不需要声明参数吗d procedure?CREATE procedure loopData(在newGameId int中)抱歉@KevinWells,我需要10次重复才能插入图片我会尝试@NicholasHunterIt在执行
delimiter//CREATE procedure loopData(在newGameId int中)BEGIN DECLARE I int DEFAULT 0时仍然返回相同的错误;而我说它需要一个catch,因为您正在执行trytry{}catch(例如){}SqlConnection和SqlCommand类是针对ms sql server的。问题是关于mysql.Dude的,同样的结构,只有在声明com.Dude时才更改MYSQLCommand的SqlCommand,即使这样也不会起作用。
delimiter //
create procedure loopData(IN newGameID int)
    BEGIN
        DECLARE i int DEFAULT 0;
        WHILE i <= 62 DO
            INSERT INTO tbl_tile (boardID) VALUES(newGameID);
            SET i = i + 1;
        END WHILE;
    END//
delimiter ;