C#事务处理疑问

dzc1987 2012-05-17 04:59:10


List<string> sqlList= new List<string>();
sqlList.Add("update pictures set remark='testb' where infouuid='test'");
sqlList.Add("update pictures set remarkf='testb' where infouuid='test0'");
sqlList.Add("update pictures set remark='testb' where infouuid='test2'");
using (DbConnection connection = GetConnection())
{
connection.Open();
DbTransaction transaction = connection.BeginTransaction();
DbCommand cmd = connection.CreateCommand();
cmd.Transaction = transaction;

foreach (string strSql in sqlList)
{
if (!string.IsNullOrEmpty(strSql))
{
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
}
}
transaction.Commit();
}

代码如上:1,3语句正确,2语句有错误。 我希望3条更新语句要么全部执行成功,只要有一条出错就回滚。但实际是1执行成功了,到2出错后,并没有回滚。数据库用的MySql。
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzc1987 2012-05-17
  • 打赏
  • 举报
回复
问题解决。ISAM、MyISAM两种类型的表不支持事务。给分
dzc1987 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

加个try catch ,出错了就在catch里面 写rollback 语句
[/Quote]

using (DbConnection connection = GetConnection())
{
connection.Open();
DbTransaction transaction = connection.BeginTransaction();
DbCommand cmd = connection.CreateCommand();
cmd.Transaction = transaction;

try
{
foreach (string strSql in sqlList)
{
if (!string.IsNullOrEmpty(strSql))
{
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
}
}
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}

没有用。
qiume 2012-05-17
  • 打赏
  • 举报
回复
ISAM、MyISAM两种类型的表不支持事务
山之魂2 2012-05-17
  • 打赏
  • 举报
回复
加个try catch ,出错了就在catch里面 写rollback 语句

111,126

社区成员

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

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

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