我想仅在未创建时以编程方式创建触发器。
我无法以编程方式从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 );
}
}
}
}
答案 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
//;" ;