我正在尝试用C#创建一个mysql函数。我这样做的原因是因为我想遍历多个mysql数据库并在每个数据库中创建函数。
问题是MySqlCommand不喜欢创建函数所需的分隔符语法。以下脚本在MySql客户端中执行良好,但在此上下文中不起作用:
DELIMITER //
DROP FUNCTION IF EXISTS cleandate //
CREATE FUNCTION cleandate(mydate DATE)
RETURNS DATE
READS SQL DATA
BEGIN
RETURN (CASE WHEN mydate <= '1900-01-01' THEN '1900-01-01' WHEN mydate = '0000-00-00' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%Y') = '0000' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%m') = '00' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%d') = '00' THEN '1900-01-01'
ELSE mydate
END);
END//尝试实现这一点的c#代码(假设连接字符串是一个字符串列表):
foreach(var connstring in connstrings)
{
// Create connection to database
MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(connstring);
MySqlCommand cmd = dbConn.CreateCommand();
cmd.CommandText = @"[same script here]";
try
{
dbConn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception erro)
{
Console.WriteLine(erro.ToString());
}
}但是当我运行这个命令时,我得到了“靠近分隔符//的语法错误”。你知道我怎样才能做到这一点吗?
发布于 2017-07-29 06:22:57
MySQL连接器提供了一个MySqlScript类,在处理执行多个语句和设置分隔符时,可以使用该类来代替MySqlCommand。
根据您的示例进行调整:
foreach(var connstring in connstrings)
{
MySqlConnection dbConn = new MySqlConnection(connstring);
try
{
dbConn.Open();
MySqlScript script = new MySqlScript(dbConn);
script.Query = @"[same script here]";
script.Delimiter = @"//";
script.Execute();
}
catch (Exception error)
{
Console.WriteLine(error.ToString());
}
}https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-mysqlscript.html
https://stackoverflow.com/questions/45378184
复制相似问题