此 SqlTransaction 已完成;它再也无法使用。

Press丶Forward 2014-11-13 04:47:57
测试网络稳定性时,程序调试到 AllCodes = MyService.GetAllOrders(tran);时,故意断开网络连接,程序报错,此 SqlTransaction 已完成;它再也无法使用。
...全文
1198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Press丶Forward 2014-11-14
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
像你这样代码写得太多,反而是画蛇添足的。
我还发现一个问题 虽然这样数据的确是没有插入到数据库中 但是数据表的自增ID却增加了 这是怎么回事
  • 打赏
  • 举报
回复
MyService.GetAllOrders(tran)有没有对tran事务做了什么操作 三个操作如果属于同一事务,也不需要把tran传进去吧
  • 打赏
  • 举报
回复
像你这样代码写得太多,反而是画蛇添足的。
  • 打赏
  • 举报
回复 1
把你的 try..catch 删掉。 当会话(DBConnection)遇到 using{ } 结构的结尾而自动关闭时,事务(没有执行到Commit代码部分)就自动回滚了。用不着你写 Roolback 代码。
phommy 2014-11-14
  • 打赏
  • 举报
回复
tran.Rollback()前做判断,或扔进空try/catch里执行,或者干脆把tran扔进using,dispose时会rollback(最安全但大括号层数多了代码会比较难看= =)
Press丶Forward 2014-11-14
  • 打赏
  • 举报
回复
求各路大神指点..
smthgdin_020 2014-11-14
  • 打赏
  • 举报
回复
1.using在结束时会关闭连接和回滚; 2.应该是你在回滚之前事务就提交了才有这个错误。
  • 打赏
  • 举报
回复
每一笔事务,默认情况下数据库都会有日志纪录的,便于在出了问题的时候查询,还原数据数据也有用,保证唯一性
  • 打赏
  • 举报
回复
引用 6 楼 ctmdsh 的回复:
[quote=引用 4 楼 sp1234 的回复:] 像你这样代码写得太多,反而是画蛇添足的。
我还发现一个问题 虽然这样数据的确是没有插入到数据库中 但是数据表的自增ID却增加了 这是怎么回事[/quote] 这跟你程序没有关系,数据库中自增值就是这样设计的,你的事务中用过就不能再用了 这是因为当需要使用事务日志还原数据库的时候,可能会造成ID冲突,保证数据的唯一性这样做是有必要的

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧