.net中使用transactionScope连接oracle数据库,事务没有提交,但是数据还是被修改了
代码如下
try { using (TransactionScope scope=new TransactionScope()) { AddForSqlserver("insert into test values (1,'aaa')"); AddForOracle("insert into test values ('001','aaa',1)"); AddForOracle("insert into test values ('001','aaa')"); scope.Complete(); } } catch (Exception ex) { }
执行难第三条sql 会插入失败,sqlsqlver的数据时没有被插入的,但是第二条oracle的数据确被插入了。
private void AddForOracle(string sql) { using (var conn = new OracleConnection(str)) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = CommandType.Text; try { int n = cmd.ExecuteNonQuery(); if (n <= 0) { throw new Exception("操作失败"); } } catch (Exception ex) { throw ex; } finally { cmd.Clone(); cmd.Dispose(); cmd = null; } } }
子衿沉夜
浏览 945回答 7
7回答
-
慕雪6442864
你给你的 cmd 设置 Transaction 属性。
-
ABOUTYOU
这个只是一个测试用例,实际上应用场景执行的操作资源的地方可能位于不同的网络节点上
-
12345678_0001
@大灰机: 所以你的问题是?不太明白。
-
GCT1015
@jone_e: 问题就是Oracle.DataAccess中提交数据时不能感知当前环境事务。
打开App,查看更多内容