ODP优化之Oracle事务处理中遇到的问题
2012-08-08 11:15
531 查看
前面写的ODP中没有加事务,今天加事务时遇见了个问题。写出来,记录一下
一、先把以前实训时写的事务的练习发出来,项目中的事务就是根据这写的。
二、仿照上面的在ODP中写的时候出错了
错误:无法对属性或索引器“Oracle.DataAccess.Client.OracleCommand.Transaction”赋值 -- 它是只读的
错误语句为:command.Transaction = tran;
解决方案:把command.Transaction = tran;删掉即可。原因可能是OracleCommand对象是由 cn.CreateCommand()产生,而在此之前cn已经BeginTransaction的缘故吧。
项目中的代码:
string constr = ConfigurationManager.ConnectionStrings["connect"].ConnectionString;
OracleConnection Conn = new OracleConnection(constr);
Conn.Open();//conn必须先打开,不然下面定义tran时会找不到对象。
OracleCommand command = Conn.CreateCommand();
OracleTransaction tran = Conn.BeginTransaction(IsolationLevel.ReadCommitted);//定义事务
//command.Transaction = tran;//这个不用关联事务!注释掉即可。
下面的代码就不用写了,跟以前的例子是一样的。
一、先把以前实训时写的事务的练习发出来,项目中的事务就是根据这写的。
SqlConnection con = new SqlConnection("server=.;database=users;uid=sa;pwd=sa;"); con.Open(); SqlTransaction tran = con.BeginTransaction();//定义一个事务 try { SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.Transaction = tran;//cmd的一个属性关联stc cmd.CommandText = "insert into students (name,age) values('aa',33)"; cmd.ExecuteNonQuery(); cmd.CommandText = "select @@identity";//查询刚刚插入的那一行自动增长列的值 int a = Convert.ToInt32(cmd.ExecuteScalar()); MessageBox.Show(a.ToString()); cmd.CommandText = "insert into students values('大劫案',22)"; cmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception exc) { tran.Rollback(); MessageBox.Show(exc.ToString()); } finally { if (con.State == ConnectionState.Open) { con.Close(); } cmd.Dispose(); }
二、仿照上面的在ODP中写的时候出错了
错误:无法对属性或索引器“Oracle.DataAccess.Client.OracleCommand.Transaction”赋值 -- 它是只读的
错误语句为:command.Transaction = tran;
解决方案:把command.Transaction = tran;删掉即可。原因可能是OracleCommand对象是由 cn.CreateCommand()产生,而在此之前cn已经BeginTransaction的缘故吧。
项目中的代码:
string constr = ConfigurationManager.ConnectionStrings["connect"].ConnectionString;
OracleConnection Conn = new OracleConnection(constr);
Conn.Open();//conn必须先打开,不然下面定义tran时会找不到对象。
OracleCommand command = Conn.CreateCommand();
OracleTransaction tran = Conn.BeginTransaction(IsolationLevel.ReadCommitted);//定义事务
//command.Transaction = tran;//这个不用关联事务!注释掉即可。
下面的代码就不用写了,跟以前的例子是一样的。
相关文章推荐
- Oracle 10.2 流复制问题(三)—— 大事务处理
- mysql与oracle转换遇到小问题 关键字的处理
- 事务处理遇到的问题解决方法
- [置顶] Oracle GoldenGate 常见问题:长事务处理
- 事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下
- Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题
- 工作中ORACLE操作中遇到的问题和处理方式记录
- 查找ORACLE出现“ORA-08177:无法连续访问此事务处理”问题的原因
- Oracle GoldenGate 常见问题:长事务处理
- 最近碰到一个oracle“分布式事务处理已经开始”的问题
- Oracle非默认监听的处理会遇到的问题以及处理方法
- Eclipse 部署JavaWeb项目中遇到的问题处理
- oracle 配置高级复制环境遇到的问题
- 使用git时遇到的问题总结及处理方法
- HM测试数据处理遇到的问题
- 繁杂版本跟进遇到的问题及部分处理方式
- 解决问题记录(3)-事务处理出错:连接打开但是在fetching状态中。
- oracle 安装过程中遇到的问题1: libXp.so.6: cannot open shared objectfile: No such file or directory
- Hibernate事务与并发问题处理(乐观锁与悲观锁)【转】
- 深入解析:分布式系统的事务处理经典问题及模型