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" 前处于活动状态的上下文事务在其中已终止,这是不允许的。请更改应用程序逻辑以强制实施严格的事务嵌套。
语句已终止。
不明白上述语句错在哪里?应如何更改?
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" 前处于活动状态的上下文事务在其中已终止,这是不允许的。请更改应用程序逻辑以强制实施严格的事务嵌套。
语句已终止。
不明白上述语句错在哪里?应如何更改?
...全文
相关推荐
Sql Server 存储过程和触发器.pdf
sql server 存储过程和触发器.pdf
面试中会问的题目
总结了大部分在面试中会问的题目(.net,SQL),强烈建议看看。分值不贵,物超所值。
sql server教程.doc
SQL Server是由Microsoft开发的关系型数据库管理系统(RDBMS)。它提供了一种有效地存储、管理和检索数据的方式,并支持广泛的应用程序开发。以下是SQL Server教程的一些主要内容: 1. SQL Server的安装和配置:介绍如何下载、安装和配置SQL Server,包括选择适当的版本和设置数据库引擎。 2. 数据库的创建和管理:学习如何创建数据库、表、视图、索引等数据库对象,并了解如何管理数据库的结构和数据。 3. SQL查询语言:掌握SQL查询语言的基本语法,包括SELECT、INSERT、UPDATE和DELETE语句,以及使用WHERE子句进行条件过滤和排序。 4. 数据库事务和并发控制:了解事务的概念和特性,学习如何使用事务来确保数据的一致性和完整性,并了解并发控制的方法。 5. 数据库备份和恢复:学习如何创建数据库备份,以及在灾难恢复情况下如何还原数据库。 6. 安全性和权限管理:了解如何设置用户和角色,并控制对数据库对象的访问权限,以保护数据的安全性。 7. 数据库性能优化:学习如何识别和解决数据库性能问题,包括索引设计、查询优化和服务
.net面试题(包含SQL与C#)
.net面试题(包含SQL与C#)从各个网站搜索整理来的.
JK触发器实现74LS194以及74LS197功能.pdf
JK触发器实现74LS194以及74LS197功能.pdf


疑难问题
