如果尚未创建,如何以编程方式从C#创建MySQL触发器?

时间:2015-06-22 13:19:37

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

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

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

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

  

行错误      

cmd.ExecuteNonQuery()。      "您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' DELIMITER //在插入后创建触发器Trigger_Lifetouch   在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 );
                        }

                    }
                }
            }

3 个答案:

答案 0 :(得分:0)

尝试从变量_query复制运行时值并将其粘贴到MySql查询编辑器。构造查询时出错。你忘了在最后添加" DELIMITER;"

答案 1 :(得分:0)

无法通过MySqlCommand创建触发器。 你应该使用(新的MySqlScript([ConnectionString],[TriggerScript]))。执行();

这将创建触发器。

答案 2 :(得分:0)

尝试使用 @ 创建查询

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