关于ado.net多事务的提问,详细请看帖子内容。

e251396 2013-07-11 09:32:45
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection s1 = new SqlConnection(WebConfigurationManager.ConnectionStrings["sqlconnstring_t1"].ConnectionString);
SqlConnection s2 = new SqlConnection(WebConfigurationManager.ConnectionStrings["sqlconnstring_t2"].ConnectionString);

string queryString1 = string.Empty;
string queryString2 = string.Empty;
queryString1 = string.Format(" insert into t1(name,pwd,email) values('{0}','{1}','{2}') ",this.TextBox1.Text,this.TextBox2.Text,this.TextBox3.Text);
queryString2 = string.Format(" insert into t2(name,state) values('{0}','{1}') ",this.TextBox4.Text,this.TextBox5.Text);

SqlCommand sc1 = new SqlCommand(queryString1,s1);
SqlCommand sc2 = new SqlCommand(queryString2, s2);

s1.Open();
SqlTransaction sqlTran1 = s1.BeginTransaction();
s2.Open();
SqlTransaction sqlTran2 = s2.BeginTransaction();

using (TransactionScope transScope = new TransactionScope())
{
try
{
sc1.Transaction = sqlTran1;
sc1.ExecuteScalar();

sc2.Transaction = sqlTran2;
sc2.ExecuteScalar();
}
catch(SqlException ex)
{
sqlTran1.Rollback();
sqlTran2.Rollback();
s1.Close();//如果不增加数据库事务,连接关闭时,数据会写入数据库
s2.Close();
return;
}
sqlTran1.Commit();
sqlTran2.Commit();
transScope.Complete();
s1.Close();
s2.Close();
}
}

这样的一段代码中,如果在执行sc1.ExecuteScalar();时出错了,然后直接到了catch中,sqlTran2.Rollback();代码进行回滚有效吗?我觉得sc2.ExecuteScalar();都没执行,所以sqlTran2.Rollback();回滚在起一个什么作用?自动会关闭SqlConnection s2 的连接吗?
...全文
47 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
e251396 2013-07-11
  • 打赏
  • 举报
回复
或是说只要有事务BeginTransaction了,不管它的SQL语句是否执行了,都可以做到Rollback吗?而这时的Rollback具体的作用是什么呢?恢复数据?可问题是这个事务并没有更新数据,那Rollback的作用是关闭连接?

62,074

社区成员

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

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

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

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