事务放在循环里面和放在循环外面

BXS_null 2020-06-08 09:01:07
我的事务放在循环里面 每次for循环一次的时候就Commit()一次,当我把事务放到循环外面(循环结束后也有对数据库的操作,所以想放到外面去),for循环就会报错,“执行超时已过期。完成操作之前已超时或服务器未响应”,这个是循环了一半的时候就突然报错了,请问这是什么原因照成的
...全文
1003 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y-Palpitate 2021-11-08
  • 打赏
  • 举报
回复

循环放在事务里边(BeginTrans CommitTrans 之间),开启事务后进入循环,依次执行Sql语句,最后才提交。有报错直接全部回滚(RollbackTrans)!

BXS_null 2020-06-08
  • 打赏
  • 举报
回复
放在循环里面 循环里面没有问题的。就是我循环外面还有一段对数据库的操作不知道怎么弄
BXS_null 2020-06-08
  • 打赏
  • 举报
回复
引用 9 楼 大西瓜一块五一斤♏ 的回复:
事务应该昼小并尽快提交让其进行释放,避免长时间占用锁表

但是我循环外面也有对数据库的操作
BXS_null 2020-06-08
  • 打赏
  • 举报
回复

for()
{
using (var transaction = db.Database.BeginTransaction())
{
try
{
...
transaction.Commit();
}

catch (Exception ex)
{
transaction.Rollback();
...
}
}
}

上面这样没问题 不会报错


using (var transaction = db.Database.BeginTransaction())
{
try
{
for()
{
...
}
transaction.Commit();
}

catch (Exception ex)
{
transaction.Rollback();
...
}
}

这样会报错
  • 打赏
  • 举报
回复
事务应该昼小并尽快提交让其进行释放,避免长时间占用锁表
datafansbj 2020-06-08
  • 打赏
  • 举报
回复
显然是事务开始到提交的时间跨度太大造成的超时,循环次数多了,所需时间自然就长了。
  • 打赏
  • 举报
回复
把代码发一下,看做什么操作
BXS_null 2020-06-08
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
你把事务和commit一起放外面呢?
额 就是事务和 commit一起放在外面的。
  • 打赏
  • 举报
回复
你应该是

public bool Add(List<AlarmModel> list)
{
bool flag = false;
try
{
h.db.BeginTran();//开启事务
for (int i = 0; i < 10; i++)
{
flag = h.client.InsertRange(list);
}
h.db.CommitTran();//提交事务
}
catch (Exception e)
{
flag = false;
h.db.RollbackTran();//回滚事务
}

return flag;
}
正怒月神 2020-06-08
  • 打赏
  • 举报
回复
你把事务和commit一起放外面呢?
BXS_null 2020-06-08
  • 打赏
  • 举报
回复
引用 2 楼 手在键盘敲很轻 的回复:
开启了太多事务是会锁表的,所以,超时就不奇怪了。

可是我超时的时候事务时放在循环外面?
  • 打赏
  • 举报
回复
开启了太多事务是会锁表的,所以,超时就不奇怪了。
BXS_null 2020-06-08
  • 打赏
  • 举报
回复
当循环次数少的时候没问题,循环次数多的时候就会出错了

110,536

社区成员

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

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

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