C# 将两个或多个MySQL过程合并到一个SQL文件中

C# 将两个或多个MySQL过程合并到一个SQL文件中,c#,mysql,stored-procedures,C#,Mysql,Stored Procedures,我正在创建一个c程序,它读取.sql文件并自动执行。问题是,.sql文件中应该有一个过程。我创建了20多个程序。当我的.sql文件中只有一个过程时,我可以成功地执行它。如何将所有过程合并到一个.sql文件中?我尝试了以下方法: DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateSettledMemo`(res_id varchar(45)) BEGIN UPDATE memo_reservation SET rese

我正在创建一个c程序,它读取
.sql
文件并自动执行。问题是,
.sql
文件中应该有一个过程。我创建了20多个程序。当我的
.sql
文件中只有一个过程时,我可以成功地执行它。如何将所有过程合并到一个
.sql
文件中?我尝试了以下方法:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateSettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'SETTLED' WHERE
reservation_id = res_id;
END$$

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateUnsettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'UNSETTLED' WHERE
reservation_id = res_id;
END$$

但是什么也没有创造出来。它返回的唯一错误是在MySql.Data.dll中发生类型为“MySql.Data.MySqlClient.MySqlException”的未处理异常。在命令执行过程中遇到致命错误

解决此问题的一种方法是在
.sql
文件本身中使用分隔符,但将其放在
--
之后,以便mysql将其作为注释忽略。
例如,如果您的分隔符是
,只需写入
.sql
文件
--


在c#程序中,您可以按
--
分隔符拆分
.sql
文件,并单独运行每个段。

.sql
文件中,在每个过程的开头删除
分隔符$$
。另外,在每个过程结束时,在
结束
之后用分号(
)替换
$
)。
.sql
文件中的查询应该是:

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateSettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'SETTLED' WHERE
reservation_id = res_id;
END;

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateUnsettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'UNSETTLED' WHERE
reservation_id = res_id;
END;
当您在连接中不允许使用变量而使用变量时,将显示致命错误。MySQL看到@data并希望找到名为@data的参数。当它没有找到一个异常时,它抛出一个异常


要修复此问题,请在连接字符串中添加
allow user variables=true

您会遇到什么类型的错误?“不起作用”并不能很好地描述您观察到的实际行为。它是否返回错误?是否创建了第一个过程,但没有创建其他过程?关于c#程序如何执行文件内容的信息很少。这是否作为外部可执行文件调用mysql命令行客户端?“不起作用”是对问题描述的反感。您可能想问自己的一个问题是,“我真的需要从.sql文件中读取吗?”我之所以这么说,是因为以编程方式使用带有SqlParameters的SqlCommands会更好。