首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中创建MySql函数?

如何在C#中创建MySql函数?
EN

Stack Overflow用户
提问于 2017-07-29 00:17:54
回答 1查看 490关注 0票数 2

我正在尝试用C#创建一个mysql函数。我这样做的原因是因为我想遍历多个mysql数据库并在每个数据库中创建函数。

问题是MySqlCommand不喜欢创建函数所需的分隔符语法。以下脚本在MySql客户端中执行良好,但在此上下文中不起作用:

代码语言:javascript
复制
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#代码(假设连接字符串是一个字符串列表):

代码语言:javascript
复制
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());                    
    }
}

但是当我运行这个命令时,我得到了“靠近分隔符//的语法错误”。你知道我怎样才能做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 06:22:57

MySQL连接器提供了一个MySqlScript类,在处理执行多个语句和设置分隔符时,可以使用该类来代替MySqlCommand。

根据您的示例进行调整:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45378184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档