循环往表添加数据,如果其中一次操作出错如何进行整体回滚

wenbu 2009-06-10 10:27:27

for(int i ; i<10 ;i++)
{
string sql = "insert into table1 (a,b,c) vlaues('"+i+"','bbb','ccc')";
cmd.add(sql);

}

如题所示,如果循环中有一次执行出错,如何进行整体回滚?
...全文
1097 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark2Win 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 beijingqinghuadaxue 的回复:]

事务 

还是写到存储过程里面把
[/Quote]

不一定,因为不一定所有的业务处理都是用存储过程写的,关于这个见其它讨论,如果代码中集成了几个封装好的业务过程需要处理,那么就必须在代码中使用数据库事务,这是好东西。
  • 打赏
  • 举报
回复

事务

还是写到存储过程里面把
wenbu 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 youaskme 的回复:]
yfqvip 的方法比较有意思,可以试试

另外:
如果循环中有一次执行出错,如何进行整体回滚?
问:为什么会出现错误呢?你在循环之前应该进行一次检查,防止出现错误,而不是做个甩手掌柜,让它自生自灭,等到插入时再报错回滚

结论:楼主很懒惰!
[/Quote]


----------------

这句话不对!----问:为什么会出现错误呢?你在循环之前应该进行一次检查,防止出现错误,而不是做个甩手掌柜,让它自生自灭,等到插入时再报错回滚

只是检查还是不够的。做个预防出错进行回滚是为了万一某条数据添加出错了,要进行回滚保证数据的一致性!

感谢9楼!
Mark2Win 2009-06-10
  • 打赏
  • 举报
回复
9楼正解
gdjlc 2009-06-10
  • 打赏
  • 举报
回复

protected void Button1_Click(object sender, EventArgs e)
{
/*=============2009/06/09 测试通过===============*/
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/Inetpub/wwwroot/DotNetArticle/App_Data/DotNetArticle.mdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.Transaction = con.BeginTransaction();
try
{
string sql1 = "insert into teaminfo (num,username,isplay) values(1,'a',1)";
string sql2 = "insert into teaminfo (num,username,isplay) values(2,'b',1)";
string sql3 = "insert into teaminfo (num,username,isplay) values(3,'c',1)";
string[] SQLStringList = { sql1, sql2, sql3 };
for (int n = 0; n < SQLStringList.Length; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
cmd.Transaction.Commit(); //提交事务
Response.Write("OK");
}
catch (Exception)
{
cmd.Transaction.Rollback();
}
finally
{
con.Close();
}
}
haonanxxx 2009-06-10
  • 打赏
  • 举报
回复
用事务处理。
me_child 2009-06-10
  • 打赏
  • 举报
回复
囧。 二楼已经说了 事务来处理。
gongsun 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yfqvip 的回复:]
C# codestring sql=string.Empty;
for(int i ; i <10 ;i++)
{
sql += "insert into table1 (a,b,c) vlaues('"+i.ToString()+"','bbb','ccc');";
}
if(sql!=string.Empty)
{
cmd.add(sql);
}
[/Quote]

呵呵,不错...
youaskme 2009-06-10
  • 打赏
  • 举报
回复
yfqvip 的方法比较有意思,可以试试

另外:
如果循环中有一次执行出错,如何进行整体回滚?
问:为什么会出现错误呢?你在循环之前应该进行一次检查,防止出现错误,而不是做个甩手掌柜,让它自生自灭,等到插入时再报错回滚

结论:楼主很懒惰!
满衣兄 2009-06-10
  • 打赏
  • 举报
回复
string sql=string.Empty;
for(int i ; i <10 ;i++)
{
sql += "insert into table1 (a,b,c) vlaues('"+i.ToString()+"','bbb','ccc');";
}
if(sql!=string.Empty)
{
cmd.add(sql);
}
wenbu 2009-06-10
  • 打赏
  • 举报
回复
能给个例子吗
wenbu 2009-06-10
  • 打赏
  • 举报
回复
没人知道吗?
cpio 2009-06-10
  • 打赏
  • 举报
回复
执行前开始事务

全部执行结束后提交,如果中途出错就回滚

62,071

社区成员

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

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

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

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