【发布时间】: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