测这个东西其实是由生产环境数据库报错,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的更多相关文章

  1. TransactionScrope 2

    继上一篇文章TransactionScrope 在做相应的变动时,发现可以重现ORA-14450错误,如: List<Thread> ls = new List<Thread> ...

随机推荐

  1. centos打开3306端口

    centos默认是关闭了3306端口的,外网通过3306端口不能访问数据库,这时需呀打开3306端口1.打开端口: /sbin/iptables -I INPUT -p tcp --dport 330 ...

  2. Win7 32位系统下Java开发环境的安装及配置

    目录: Java JDK安装. Java JDK系统环境的配置. 配置常见问题的解决. Java JDK的安装 Java Jdk(Java Development Kit)Java开发不可缺少的环境, ...

  3. freemarker中遍历list<map<String,String>>

    <#list var as map><tr> <#list map?keys as itemKey> //关键点    <#if itemKey=" ...

  4. [译]终极塔防——运用HTML5从头创建一个塔防游戏

    翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...

  5. python——lambda

    一lambda函数基础 1.lambda函数为匿名函数,即没有具体的函数名,而def函数创建的函数有函数名. >>> def foo(): return 'test' #命名为foo ...

  6. OSharp 学习(一)

    OSharp3.0 由郭明峰组织开发,已经相对比较完整,从底层代码开始阅读难度比较大. 故采用自上而下的方式,使用到的时候再完善相关功能.希望通过此教程能够找到志同道合的人. 注:请勿抄袭 请参看OS ...

  7. The Contiki build system 编译系统

    The Contiki build system======================== The Contiki build system is designed to make it eas ...

  8. poj3261 -- Milk Patterns

                                                                        Milk Patterns Time Limit: 5000MS ...

  9. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  10. 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 ...