C#中事务处理问题

Hyacinthus 2002-10-14 10:17:40
要求:所有操作都要用存储过程进行出里!!并且封装到一个类InsUser里面,!

先往A表插入一条记录,存储过程为 Ins_A
再把B表的相关记录删除,存储过程为 Del_B
最后往C表插入多条记录,存储过程为 Ins_C,其中每条记录的信息从用户的输入界面得到,需要用循环调用 Ins_C,

现在问题是怎么在程序中用一个事务处理把这些操作装在一起,维护数据的一致性?

用到是C#

现在我用OleDbCommand.Transaction, 发现当Ins_A,Del_B 存储过程都已经正常结束,在循环调用 Ins_C时,如果插入某条记录时出错,虽然用了OleDbCommand.Transaction..Rollback(); 但是并没有把Ins_A,Del_B,和Ins_C已经发生的操作回滚,数据不能保持一致,

是不是在程序里一个事务处理中的存储过程不能回滚?
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KD007 2002-11-13
  • 打赏
  • 举报
回复
你的存储过程里面是不是也用了事务机制
KD007 2002-11-13
  • 打赏
  • 举报
回复
肯定是可以回滚的。写个小例子可以证明,你的循环录入是怎么回事?
Hyacinthus 2002-10-15
  • 打赏
  • 举报
回复
事务内的已经提交了的存储过程是不是不能ROLLBACK ?
Hyacinthus 2002-10-14
  • 打赏
  • 举报
回复
没用的, 在Ins_c中出错时, 并没有把Ins_A,Del_B,和Ins_C已经发生的操作回滚。 是不是在存储过程中提交的事务不能回滚? 因为Ins_A,Del_B,和Ins_C都是调用不同的存储过程
ameng_2002 2002-10-14
  • 打赏
  • 举报
回复
不好意思,上面是Transact_SQL的
try
{
//Ins_A
//Del_B
//Ins_c
myTrans.Commit();
}
catch
{
myTrans.Rollback();
}
ameng_2002 2002-10-14
  • 打赏
  • 举报
回复
try
BEGIN TRAN
Ins_A
Del_B
Ins_c
if(@@ERROR>0)
ROLLBACK
ELSE
COMMIT

62,046

社区成员

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

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

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

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