奇怪问题,为何Rollback 后,ID字段仍然自动递增

智能视界 2010-11-03 05:54:34
一个ID为自动递增的表,很简单的一段代码,执行插入一条数据。
为何Rollback 后,ID字段会跳号?

SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans;
.....
cmd.ExecuteNonQuery();
正确,执行 cmd.Transaction.Commit();
否则,cmd.Transaction.Rollback();

1,abc
2,abc
(跳号)
5,abc
6,abc
...全文
196 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
缪军 2010-11-03
  • 打赏
  • 举报
回复
有很多诸如此类的“高级”的技术,使用起来貌似简单神奇,
其实究其内幕,也是采用了最复杂繁琐,最愚蠢的方法实现的,
所以这些技术使用起来消耗大量资源和存在局限性也是正常的
缪军 2010-11-03
  • 打赏
  • 举报
回复
学习软件的开始的那些时间,你的老师就应该告诉你们树立起这样的观点:
Transaction是不可靠的,而且这个问题一直流到你们能自己写代码的时候,
老师会要求你们写一些例子来证明这一点

具体就楼主的问题,可以举例:
1.Transaction中的代码在运行时刻发生错误,导致崩溃,事务失效;
2.若干个Transaction的规则冲突,而又没有引发异常,例如楼主的例子,ID在INSERT失败后是不会回滚的,这是DBMS的系统事务决定的,你写的Transaction必须服从这个规则;
3.Transaction中执行的子任务本身不支持事务机制

一个好的教师会在学习的一开始提出一些问题,但是不立即解答,他会等到学生掌握一定的知识时候,逐一来自己解决这些问题
winner2050 2010-11-03
  • 打赏
  • 举报
回复
如果不递增就会有出错的问题。

万一别人已经打开了这个界面,然后删除了这条数据,有添加进去。

如果不递增,万一那边修改或者删除就出意外。

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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