C# 将两个或多个MySQL过程合并到一个SQL文件中
我正在创建一个c程序,它读取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
.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会更好。