首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

事宜在触发器中结束。批处理已中止

2012-11-07 
事务在触发器中结束。批处理已中止。DataGridView的数据源关联数据库中的客户表,我在DataGridView网格控件中

事务在触发器中结束。批处理已中止。
DataGridView的数据源关联数据库中的客户表,我在DataGridView网格控件中修改某一位客户的年龄,然后,点击保存按钮,以向数据库提交更新。但是,却报错----事务在触发器中结束。批处理已中止。

在源数据库中,我在客户表中写了一个触发器,如下:
CREATE TRIGGER [dbo].[TR_客户表] ON [dbo].[客户表]
AFTER UPDATE  
AS  
if(UPDATE(姓名) OR UPDATE(性别))
BEGIN
  PRINT '不能更改此字段内容' 
  ROLLBACK TRAN
END
ELSE
PRINT '更改成功'



此触发器的功能是不能修改姓名字段和性别字段的值,但是我修改的是年龄字段的值,却为什么报错呢?事务在触发器中结束。批处理已中止。

[解决办法]
你确定你的update语句里没有修改姓名或者性别字段?。。。。调试出来看看就知道了
[解决办法]
与sp中不同,
在触发器中使用ROLLBACK,会导致:包含触发器的语句的批处理中止!
从执行顺序上说,当前批处理中之后的语句不再执行了

不知道你想实现怎样的设计,
从目前楼主提供的信息,我觉得应该使用RAISEERROR更合适

[解决办法]
还有,就是UPDATE()函数并不是检测值有没有变化,
而是检测INSERT或者UPDATE语句操作是否成功

如果要检测值的变化,需要调用INSERTED表和DELETED表去比对,
并且,还要考虑批更新的问题,也就是说,这两个系统表不一定是一行记录
[解决办法]

探讨
Update语句有修改姓名和性别字段,但是值并没有改变啊,触发器中的
UPDATE(姓名) OR UPDATE(性别)应该返回false吧

[解决办法]
探讨

引用:

你确定你的update语句里没有修改姓名或者性别字段?。。。。调试出来看看就知道了

我看了一下,适配器生存的Update语句有修改姓名和性别字段,但是值并没有改变啊,触发器中的
UPDATE(姓名) OR UPDATE(性别)应该返回false吧

[解决办法]
要看保存按钮中都干了什么
[解决办法]
因为你保存按钮中的Update语句有“姓名=xxx“,虽然姓名并未变化

热点排行