新手求助 事务处理报错..

ckuang123 2012-11-05 04:36:50
报错:红色代码处此 SqlTransaction 已完成;它再也无法使用。
为什么还插入了3条数据呢?


using (SqlTransaction trans = objcon.BeginTransaction())
{
string tmp = string.Empty;
int itmp = 0;
try
{
for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
{
itmp++;
tmp =tmp + "insert into TEimpdatas Values('" + this.label3.Text + "','" + this.dataGridView1.Rows[i].Cells[0].Value.ToString() + "','"
+ this.dataGridView1.Rows[i].Cells[1].Value.ToString() + "','"
+ this.dataGridView1.Rows[i].Cells[2].Value.ToString() + "','"
+ this.dataGridView1.Rows[i].Cells[3].Value.ToString() + "','" + DateTime.Now.ToLocalTime().ToString() + "','')";

SqlCommand objcom = new SqlCommand(tmp, objcon, trans);

objcom.ExecuteNonQuery();
trans.Commit();
}
MessageBox.Show("OK!");

}
catch (Exception)
{
trans.Rollback();
// MessageBox.Show(ex.ToString());
}
finally
{
objcon.Close();
}
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpingz 2012-11-08
  • 打赏
  • 举报
回复
引用 3 楼 ckuang123 的回复:
引用 2 楼 lpingz 的回复:你的trans.Commit();放在for循环里,插入3条记录后,第4条记录出错。 不放到循环里,这个事务处理就没用了啊
查一下msdn吧,关于commit()的说明。 trans.Commit()的位置是造成异常后,并没有全部回滚的原因。 但是异常应该是数据造成的,你仔细对比前3条记录和第4条记录的数据吧。
我就是很懒 2012-11-06
  • 打赏
  • 举报
回复
trans.Commit(); 放在for循环外面
坚_持 2012-11-05
  • 打赏
  • 举报
回复
用breack结束循环 应该可以
ckuang123 2012-11-05
  • 打赏
  • 举报
回复
引用 8 楼 litojoe 的回复:
1 如果 你设定允许部分提交,那目前那你遇到的情况是正确的, 第四条出错了。剩下的你就想办法记录出错并处理。
数据都是一样的啊,我不知道为什么第四条会出错.
litojoe 2012-11-05
  • 打赏
  • 举报
回复
1 如果 你设定允许部分提交,那目前那你遇到的情况是正确的, 第四条出错了。剩下的你就想办法记录出错并处理。
litojoe 2012-11-05
  • 打赏
  • 举报
回复
1 如果 你设定允许部分提交,那目前那你遇到的情况是正确的, 第四条出错了。剩下的你就想办法记录出错并处理。
litojoe 2012-11-05
  • 打赏
  • 举报
回复
引用 3 楼 ckuang123 的回复:
不放到循环里,这个事务处理就没用了啊
请楼主说明一下 为啥一定放进循环里。放外面为何不能符合你需求?
安得权 2012-11-05
  • 打赏
  • 举报
回复
引用 1 楼 ckuang123 的回复:
C# code123456 catch (Exception) { trans.Rollback(); // MessageBox.Show(ex.ToString()); ……
+1
安得权 2012-11-05
  • 打赏
  • 举报
回复
trans.Commit(); 放到循环外边,有用
ckuang123 2012-11-05
  • 打赏
  • 举报
回复
引用 2 楼 lpingz 的回复:
你的trans.Commit();放在for循环里,插入3条记录后,第4条记录出错。
不放到循环里,这个事务处理就没用了啊
lpingz 2012-11-05
  • 打赏
  • 举报
回复
你的trans.Commit();放在for循环里,插入3条记录后,第4条记录出错。
ckuang123 2012-11-05
  • 打赏
  • 举报
回复

      catch (Exception)
                        {
                            trans.Rollback();
                           // MessageBox.Show(ex.ToString());
                        }
异常报错...

110,539

社区成员

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

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

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