我正在创建一个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.MySqlClient.MySqlException”类型的未处理异常发生在MySql.Data.dll中。命令执行过程中遇到的致命错误
发布于 2015-05-08 03:24:10
在.sql文件中,删除每个过程开始时的DELIMITER $$。此外,在每个过程结束时,在$$后面用分号(;)替换END。.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添加到连接字符串中。
发布于 2015-05-07 08:34:52
解决这一问题的一种方法是在.sql文件本身中使用分隔符,但在--之后使用分隔符,这样mysql就会忽略它作为注释。
例如,如果分隔符为<NewQuery>,只需在.sql文件-- <NewQuery>中写入即可。
在您的c#程序中,您可以将.sql文件拆分为-- <NewQuery>分隔符,并单独运行每个段。
https://stackoverflow.com/questions/30092104
复制相似问题