using (TransactionScope tsCope = new TransactionScope(TransactionScopeOption.Required))
{
string sql = "insert into t_test(id) values(1)";
OracleConnection conn = new OracleConnection("Data Source=frame;User Id=yhgx;Password=yhgx;");
OracleCommand cmd = new OracleCommand(sql, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close(); string sql1 = "insert into t_test(id) values('fgag')";
OracleConnection conn1 = new OracleConnection("Data Source=frame;User Id=yhgx;Password=yhgx;");
OracleCommand cmd1 = new OracleCommand(sql1, conn1);
conn1.Open();
cmd1.ExecuteNonQuery();
conn1.Close(); tsCope.Complete();
}能说明下为什么事务不回滚吗?
{
string sql = "insert into t_test(id) values(1)";
OracleConnection conn = new OracleConnection("Data Source=frame;User Id=yhgx;Password=yhgx;");
OracleCommand cmd = new OracleCommand(sql, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close(); string sql1 = "insert into t_test(id) values('fgag')";
OracleConnection conn1 = new OracleConnection("Data Source=frame;User Id=yhgx;Password=yhgx;");
OracleCommand cmd1 = new OracleCommand(sql1, conn1);
conn1.Open();
cmd1.ExecuteNonQuery();
conn1.Close(); tsCope.Complete();
}能说明下为什么事务不回滚吗?
解决方案 »
- c#编译问题:代码无误,为何不达效果?
- 最近学习写了一个控制台应用程序,但一关机就出问题
- c#中数据库排他
- 在Winform里有没有实现执行本地的exe文件或者bat文件,获得输出的方法呢?
- 在DATAVIEW中作了ROWFILTER,现在要显示全部数据,怎样取消ROWFILTER
- 请教怎样改变鼠标光标,不限于本窗口?
- 如何为datagrid中绑定的linkbutton中的onclick传递参数
- 帮帮忙
- 怎樣使CrystalReportViewer里選擇打印機後可以預覽(200分)
- 各位大虾快来帮忙.有高分相送
- 安装部署.NET桌面应用程序可以不安装.net framework 3.5吗?或者是可以让安装.net framework 3.5快点。有方案吗?谢谢
- 用xslt和xml生成excel报表时,大家的xslt都是怎么生成的?有没有什么好用点的工具?
最好不要把 windows 组件服务的事务管理牵扯进来,
对 .net 的突增复杂性和难度.
最好不要把 windows 组件服务的事务管理牵扯进来,
对 .net 的突增复杂性和难度.
{
//方法1
//方法2:
scope.Complete();
}
没有异常正常
只要执行了Complete()方法,就会被认为是进行提交,你试下删除或注释掉这一句,就会发现上面的执行都不会成功的.
因此,要想在TransactionScope中实现回滚,唯一的作法就是使用Try{}Catch{},或者行判断语句的执行状态,只有当所有语句执行结果都正确的时候,才调用Complete()方法, 执行不正确则不调用(相当于默认回滚)
例如:
using(TransactionScope scope = new TransactionScope())
{
try{
//方法1
//方法2:
//正确执行完以上代码后,调用以下提交
scope.Complete();
}
catch(exception ex)
{
//出错信息(如果出错则不会提交,事务自动回滚)
}
}