【问题标题】:How to Create MySQL Trigger programmatically from C# if not already created?如果尚未创建,如何从 C# 以编程方式创建 MySQL 触发器?
【发布时间】:2015-09-07 23:13:55
【问题描述】:

我想仅在未创建触发器时以编程方式创建触发器。

我无法从C# 以编程方式创建触发器。如果我从 MySQL Workbench 6.3 执行相同的触发器,则它会成功创建触发器。

我在从C# 执行时收到错误,如下所示。

线路错误

cmd.ExecuteNonQuery()。 “您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法以供使用 'DELIMITER // 在插入后创建触发器 Trigger_Lifetouch ON mat.lifetou' 在第 1 行"

我的代码如下

public void createTrigger()
    {
            string _query = " DELIMITER // " +
                            " CREATE "+
                            " TRIGGER `Trigger_Lifetouch`  AFTER INSERT  "+
                            " ON mat.lifetouch "+
                            " FOR EACH ROW BEGIN "+
                            " INSERT INTO mat.lifetouchrespirationrate (ByDevSessionId) VALUES(2);       "+
                            " END;" ;

            using (MySql.Data.MySqlClient.MySqlConnection con = new MySql.Data.MySqlClient.MySqlConnection(connectionstring))
            {
                using (var cmd = con.CreateCommand())
                {
                    if (con.State == ConnectionState.Closed || con.State == ConnectionState.Broken)
                    {
                        con.Open();
                    }

                    int retn = 0;

                    using (var transaction = con.BeginTransaction(IsolationLevel.ReadCommitted))
                    {
                        retn = 0;
                        cmd.Transaction = transaction;
                        cmd.CommandText = _query;

                        try
                        {
                            retn = Convert.ToInt32(cmd.ExecuteNonQuery().ToString());

                            if (retn > 0)
                            {
                                logger.Debug(" Trigger Created ");
                            }
                            else
                            {
                                logger.Debug("  Trigger Not Created  ");
                            }
                        }
                        catch (Exception ex)
                        {
                            logger.Debug(ex );
                        }

                    }
                }
            }

【问题讨论】:

  • 通常的做法是将 DBA 的工作留给 DBA 环境,并将其置于您的应用程序之外。您是否有理由需要以这种方式创建触发器?
  • 我的应用程序应该创建数据库、表和触发器(如果不可用)。我正在使用基于 C# 的应用程序服务堆栈(Web 服务)。这是客户的要求。

标签: c# mysql sql asp.net sql-server


【解决方案1】:

尝试在运行时从变量 _query 复制值并将其粘贴到 MySql 查询编辑器。构造查询时出现错误。您忘记在末尾添加“DELIMITER ;”

【讨论】:

    【解决方案2】:

    无法通过 MySqlCommand 创建触发器。 你应该使用 (new MySqlScript([ConnectionString], [TriggerScript])).Execute();

    这将创建触发器。

    【讨论】:

      【解决方案3】:

      尝试使用 @ 创建查询

      string _query = @" DELIMITER //
                         CREATE
                         TRIGGER `Trigger_Lifetouch`  AFTER INSERT
                         ON mat.lifetouch
                         FOR EACH ROW BEGIN
                         INSERT INTO mat.lifetouchrespirationrate (ByDevSessionId) VALUES(2);       
                         END
                         //;" ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        相关资源
        最近更新 更多