clr 触发器回滚的问题
以下一个触发器,是用于判断表的F_DATE 字段(类型 SMALLDATETIME)是不是小于2016-06-01,如小于该日期就禁止插入和更新,全部代码如下
using System;
using System.Data;
using System.ComponentModel;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Transactions;
public partial class Triggers
{
public static void TR_IU_CX_T_PROD_EFFICIENCY()
{
using (SqlConnection connection = new SqlConnection(@"context connection=true"))
{
SqlCommand command;
SqlDataReader reader;
DateTime dt;
connection.Open();
command = new SqlCommand(@"SELECT F_DATE FROM INSERTED", connection);
reader = command.ExecuteReader();
reader.Read();
dt = (DateTime)reader[0];
reader.Close();
if (dt < DateTime.Parse("2016-06-01"))
{
try
{
Transaction trans = Transaction.Current;
SqlContext.Pipe.Send("日期不能小于2016-06-01");
trans.Rollback();
}
catch (SqlException ex)
{
}
}
connection.Close();
}
}
}
该代码在插入日期小于2016-06-01的数据时,会拦截操作,提示“日期不能小于2016-06-01”,但同时报错:
消息 3991,级别 16,状态 1,过程 TR_IU_CX_T_PROD_EFFICIENCY,第 5 行
在进入用户定义的例程、触发器或聚合 "TR_IU_CX_T_PROD_EFFICIENCY" 前处于活动状态的上下文事务在其中已终止,这是不允许的。请更改应用程序逻辑以强制实施严格的事务嵌套。
语句已终止。
不明白上述语句错在哪里?应如何更改?