TransactionScrope
测这个东西其实是由生产环境数据库报错,ORA-14450错误。
测试结果是:
1)使用transactionscrope时,数据库连接打开需在scrope内打开;
2)TransactionScopeOption.Suppress 是无事务(原有同事非得说是原子事务,证明给他看)。
不多说了,代码上来:
create global temporary table TMP_TEST
(
COL1 VARCHAR2(200)
)
on commit delete rows;
由于是使用的是Oracle 所以添加引用System.Date.OracleClient,且添加System.Transactions的引用;
OracleConnection con = new OracleConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["MB.MBERP"].ConnectionString; try
{
con.Open(); #region DBTransaction
var tran = con.BeginTransaction(); OracleCommand cmd1 = new OracleCommand("insert into TMP_TEST values('" + DateTime.Now + "')", con, tran);
var result = cmd1.ExecuteNonQuery(); OracleCommand cmd2 = new OracleCommand("select COL1 from tmp_test", con, tran);
var t = cmd2.ExecuteOracleScalar(); tran.Commit();
con.Close();
Console.WriteLine("受影响的行数:" + result + "||当前临时表数量:" + t); #endregion
using (TransactionScope scop1 = new TransactionScope())
{
OracleCommand cmd4 = new OracleCommand("insert into TMP_TEST values('" + DateTime.Now + "')", con, tran);
con.Open();
var result3 = cmd4.ExecuteNonQuery();
con.Close();
using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required))
{
OracleCommand cmd = new OracleCommand("insert into TMP_TEST values('" + DateTime.Now + "')", con, tran);
con.Open(); var result2 = cmd.ExecuteNonQuery(); OracleCommand cmd3 = new OracleCommand("select COL1 from tmp_test", con);
var t2 = cmd3.ExecuteOracleScalar();
Console.WriteLine("2受影响的行数:" + result + "||当前临时表数量:" + t2); OracleDataAdapter da = new OracleDataAdapter("select * from TMP_TEST", con);
DataTable dt = new DataTable();
da.Fill(dt);
Console.WriteLine("3受影响的行数:" + result2 + "||当前临时表数量:" + dt.Rows.Count);
scop.Complete();
}
}
con.Close();
}
catch (Exception)
{ throw;
}
第二个transactionscrope 使用默认的即required结果为

第二个transactionscrope 使用RequiresNew时结果为

第二个transactionscrope 使用suppress时结果为

由此可以看出测试结果。
另:由上解释 如果con在transactionscrope外打开时,临时表插入后查询,将无任何数据。
此仅作为笔记先记录下来,后续分析原因。
TransactionScrope的更多相关文章
- TransactionScrope 2
继上一篇文章TransactionScrope 在做相应的变动时,发现可以重现ORA-14450错误,如: List<Thread> ls = new List<Thread> ...
随机推荐
- centos打开3306端口
centos默认是关闭了3306端口的,外网通过3306端口不能访问数据库,这时需呀打开3306端口1.打开端口: /sbin/iptables -I INPUT -p tcp --dport 330 ...
- Win7 32位系统下Java开发环境的安装及配置
目录: Java JDK安装. Java JDK系统环境的配置. 配置常见问题的解决. Java JDK的安装 Java Jdk(Java Development Kit)Java开发不可缺少的环境, ...
- freemarker中遍历list<map<String,String>>
<#list var as map><tr> <#list map?keys as itemKey> //关键点 <#if itemKey=" ...
- [译]终极塔防——运用HTML5从头创建一个塔防游戏
翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...
- python——lambda
一lambda函数基础 1.lambda函数为匿名函数,即没有具体的函数名,而def函数创建的函数有函数名. >>> def foo(): return 'test' #命名为foo ...
- OSharp 学习(一)
OSharp3.0 由郭明峰组织开发,已经相对比较完整,从底层代码开始阅读难度比较大. 故采用自上而下的方式,使用到的时候再完善相关功能.希望通过此教程能够找到志同道合的人. 注:请勿抄袭 请参看OS ...
- The Contiki build system 编译系统
The Contiki build system======================== The Contiki build system is designed to make it eas ...
- poj3261 -- Milk Patterns
Milk Patterns Time Limit: 5000MS ...
- 开发反模式 - SQL注入
一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...
- bzoj1753 [Usaco2005 qua]Who's in the Middle
Description FJ is surveying his herd to find the most average cow. He wants to know how much milk th ...