Oraclee 事务处理以及在c#中使用oracle的事务处理【转载】

1、 savepoint(建立保存点,用于失误时回滚到保存点)

建立保存点a1:savepoint a1;

............................[其间干了很多事]

再建立保存点a2:savepoint a2;

............................[又再干了很多事]

回滚到a2保存点:rollback to a2;

回滚到a1保存点:rollback to a1;

如果不指定保存点即为取消全部事务,如:rollback;

注意:如果建立保存点后执行过:commit语句,则为提出交事务,确认事务变化、结束事务、删除所有保存点、释放锁。

当使用commit语句结束事务后,其它会话将可以查看到事务变化后的新数据。

2、只读事务:transaction read only

一旦设定了只读事务(一般数据库管理员设定) ,则其它人提交上来的动作都不会看到。

如管理员操作:set transaction read only;

A用户操作增删改:。。。。。。(自已进行查询时可以看到所影响的数据)

B用户查询时:。。。。。。。。(看不到A用户进行过操作所影响的数据)

修改事务为读写的命令为:SET TRANSACTION READ WRITE;

3、在C#代码中使用Oracle的数据库事务

OracleTransaction类的概述

应用程序通过针对OracleConnection对象调用 BeginTransaction 来创建OracleTransaction对象。对OracleTransaction对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。

OracleTransaction的成员主要有:

属性: Connection,指定与该事务关联的OracleConnection对象;

IsolationLevel,指定该事务的IsolationLevel;

枚举类型,用于对事物的锁定,取值有Chaos、ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。

方法: Commit,提交SQL数据库事务;

Rollback , 从挂起状态回滚事务;
第一个示例:

public void 函数名称()

{

string strUpdateSql1 = "update 表名 set XH=‘...‘ where XH=‘...‘ and LCGZ_ID=‘...‘;

string strUpdateSql2 = "update 表名 set XH=‘...‘ where BZGZ_ID=‘...‘;

OracleConnection conn = new OracleConnection();

conn.ConnectionString = "数据库连接字符串";

conn.Open();

OracleTransaction updateProcess = conn.BeginTransaction();

try {

OracleCommand comm1 = conn.CreateCommand();

comm1.CommandText = strUpdateSql1;

comm1.Transaction = updateProcess;

comm1.ExecuteNonQuery();

OracleCommand comm2 = conn.CreateCommand();

comm2.CommandText = strUpdateSql2;

comm2.Transaction = updateProcess;

comm2.ExecuteNonQuery();

updateProcess.Commit();

}

catch()

{

updateProcess.Rollback();

}

finally {    conn.Close(); } }

第二个示例: public static bool 函数名2(int fID)

{

OracleConnection conn = new OracleConnection();

conn.ConnectionString = "数据库连接字符串";

conn.Open();

OracleTransaction deleteProcess = conn.BeginTransaction();

try {

ArrayList alObjects = GetObjects();

foreach(object o in alObjects)

{

OracleCommand tmpComm = conn.CreateCommand();

tmpComm.Transaction = deleteProcess;

tmpComm.CommandText = "delete from 表1名 where BZGZ_ID="+o.ID;

tmpComm.ExecuteNonQuery();

OracleCommand tmpComm2 = conn.CreateCommand();

tmpComm2.Transaction = deleteProcess;

tmpComm2.CommandText = "delete from 表2名 where BZGZ_ID="+o.ID;

tmpComm2.ExecuteNonQuery();

}

OracleCommand comm = conn.CreateCommand();

comm.Transaction = deleteProcess;

comm.CommandText = "delete from 表3名 where LCGZ_ID="+fID;

comm.ExecuteNonQuery();

deleteProcess.Commit();

return true;

}

catch()

{

deleteProcess.Rollback();

return false;

}

finally {    conn.Close(); }

=========================================================================

Connection一旦开了一个事务,则执行的命令就必须和事务相关 要注意的是,在事务进行中,不能再对同一个数据库连接(OracleConnection)再进行事务外的数据的查询和读取,

也就是说,类似下边的语句是不能执行的: OracleDataAdapter mAdp = new OracleDataAdapter(sSql, mCon); DataTable mDst = new DataTable(); mAdp.Fill(mDst);

而是得加一条语句,在事务内进行查询:  OracleDataAdapter mAdp = new OracleDataAdapter(sSql, mCon); if (trans != null) mAdp.SelectCommand.Transaction = trans; DataTable mDst = new DataTable(); mAdp.Fill(mDst); 
总结:在事务块内,如果使用同样的Connection对象查询,但不指定事务,会报错,            在事务提交后,或者不使用相同的Connection的对象查询,不会报错。

时间: 2024-08-19 11:48:45

Oraclee 事务处理以及在c#中使用oracle的事务处理【转载】的相关文章

oracle 11g 中 (oracle 10g) crsctl 的 替换命令

 oracle 11g 中 (oracle 10g) crsctl 的 替换命令 Deprecated Command Replacement Commands crs_stat  ---集群状态检查 crsctl check cluster -all crsctl stat res -t crs_register  --集群资源注冊 crsctl add resource crsctl add type crsctl modify resource crsctl modify type c

day01_linux中与Oracle有关的内核参数详解

linux中与Oracle有关的内核参数详解 在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip

SqlServer中创建Oracle连接服务器

转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/910072SqlServer中创建Oracle连接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器”(2)输入链接服务器的IP (3)链接成功后 第二种:语句操作 注:需要提前安装Oracle客户端程序,重启机器.(如果没有Oracle客户端程序,提示“未找

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

Tomcat7中配置Oracle 11g数据库DBCP连接池

将       ojdbc6.jar       tomcat-jdbc-7.0.37.jar            拷贝到工程的WEB-INF\lib  下面 一.在Tomcat的配置文件Tomcat7.0\conf\context.xml中添加信息: ? 1 2 3 4 5 6 7 8 9 10 11 <?xml version='1.0' encoding='utf-8'?> <Resource  name="jdbcoracle"   auth="C

在Maven仓库中添加Oracle JDBC驱动

由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle JDBC Driver 1.通过Oracle官方网站下载相应版本:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html 2.通过Oracle的安装目录获得,位置在“{ORACLE_HOME}\jdbc\l

Windows下服务中的Oracle服务是数据库名还是SID

今天上头问Windows下服务中的Oracle服务是数据库名还是SID呢?我猜是SID,但是还是测试一下,看看我猜的对不对呢?搞起! SQL> show parameter db_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_name string orclgdn SQL> show parameter instance_name N

asp数据库编程:在ASP中使用Oracle数据库

Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.Or

转: Maven 仓库中添加Oracle JDBC驱动(11g)

1.由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库,此文档用的是Oracle 11g.通过Oracle的安装目录获得,位置在:E:\app\zhaoheng\product\11.2.0\dbhome_1\jdbc\lib下: 此使用的是ojdbc6.jar 2.知道自己安装的Oracle是什么版本的 可以在SQL窗口中输入:select * from v$instance