触发器对记录的更改操作引起Nhibernate异常的解决
来源:互联网 发布:心理控制术 知乎 编辑:程序博客网 时间:2024/05/02 01:07
问题产生:原先使用Nhibernate执行更新操作(Store)一切正常,在对数据库表增加了触发器——作用:将当前更改记录的访问用户(suser_sname())及时间(getdate())写入被更改记录的特定字段——后,Nhibernate操作发生异常
异常信息:“SQL insert, update or delete failed (expected affected row count: 1, actual affected row count: 2). Possible causes: the row was modified or deleted by another user, or a trigger is reporting misleading row count.”
解决方案:在触发器脚本中添加如下语句——起始处set nocount on;结尾处set nocount off
原因分析:Nhibernate在对数据库执行更改操作时,会比较更改记录的数量与数据库返回的实际受影响记录数(也就是@@ROWCOUNT的返回值),如果两者不一致,就会引发上述异常。而让数据库返回的实际受影响记录数发生变化的原因,就是在触发器中执行了Update、Insert或Delete语句。而nocount开关的作用,就是让SQL Server在执行数据更改操作后不返回受影响记录数。只要在触发器脚本中执行数据库更改操作前打开nocount开关,就可以让Nhibernate得到正常的预期结果,进而消除此异常。
特别感谢:乐山乐水
- 触发器对记录的更改操作引起Nhibernate异常的解决
- 触发器对记录的更改操作引起Nhibernate异常的解决
- MySQL版本问题引起的异常解决
- 触发器使Nhibernate更新操作时产生异常
- 触发器使Nhibernate更新操作时产生异常
- DML触发器--记录某张表的dml操作
- 触发器实现记录操作表的日志
- 解决后台正在数据请求时候,用户对界面操作引起的错误-加遮罩
- oracle 触发器 对同一表的操作
- 记录一次关于Activity与Fragment生命周期引起的异常
- 由HandlerInterceptor.afterCompletion引起的对DispatcherServlet异常处理分析!
- 触发器记录对表记录操作
- IO对异常的操作
- DB2多次更改表结构导致不能对表进行操作的解决
- Nhibernate一个错误的解决
- 记录一次IllegalStateException异常的解决过程
- 在触发器里记录操作表的数据库账号
- 对触发器的了解
- [精华] oracle 常用SQL查询
- oracle的文本导入、导出技巧
- Oracle开发人员 JAVA存储过程
- 如何实现将Excel表(含多张数据库表)导入数据库(SQLServer)
- Oracle经验技巧集锦
- 触发器对记录的更改操作引起Nhibernate异常的解决
- CString操作指南
- oracle数据库性能监控的SQL
- Oracle数据库性能终极优化
- 根据当月数据库自动生成下个月数据库--2
- 教你如何编写游戏外挂
- 一种新的穿透防火墙的数据传输技术
- 第一篇文章
- 自制的一个自动备份数据文件脚本