ORACEL数据存储_事务(C#)
来源:互联网 发布:淘宝情趣内衣卖家秀 编辑:程序博客网 时间:2024/06/05 14:39
之前一直以为数据库中事务的使用就是一个多条语句顺序执行的过程,如果其中一条执行出错,则回执.
后来做过一些东西,发现认识有点片面,如:当第一条语句执行完成,需要查出第一条语句的主键等,即OracleCommand对象执行的可以返回对象等等.这里面有一个连带的关系.这里就当温习一下事务,代码如下:
//新方法 public static void newTest() { string result = ""; //一个数据库打开的链接 OracleConnection con = null; //要在数据库中生成的事务 OracleTransaction trans = null; //表示针对数据库执行的SQL语句或存储过程 OracleCommand cmd = null; try { //ConnectionString一般在数据类中定义,定义内容在web.config中 //public static readonly string ConnectionString = ConfigurationManager.AppSettings["OracleConnectstring"]; //使用指定的字符串实例化OracleConnection类的实例 con = new OracleConnection(ConnectionString); //打开数据库链接 con.Open(); //在数据库中开启一个事务 trans = con.BeginTransaction(); //创建并返回一个与OracleConnection类关联的SQL语句对象 cmd = con.CreateCommand(); //设置将在其中执行SQL语句的事务 cmd.Transaction = trans; string sql = "select newTest.Nextval from dual"; //设置针对数据库执行的SQL语句 cmd.CommandText = sql; //返回SQL语句第一行第一列的值,如果获得返回值则使用此方法 object pid = cmd.ExecuteOracleScalar(); [如果不获得返回值,则可以直接写 cmd.ExecuteNonQuery(),此方法获得影响的行数] sql = string.Format("insert into newTest(xh,jbsj)values({0},to_date('{1}','yyyy/mm/dd hh24:mi:ss'))",pid,DateTime.Now.ToLocalTime()); cmd.CommandText = sql int count = cmd.ExecuteNonQuery(); [可以定义多条SQL语句,如下格式:sql="xxx"; cmd.CommandText=sql; cmd.ExecuteNonQuery();] //提交事务 trans.Commit(); } catch (Exception ex) { if (trans != null) trans.Rollback(); result = ""; } finally { if (cmd != null) cmd.Dispose(); if (trans != null) trans.Dispose(); if (con != null) con.Dispose(); } }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果,只是单纯执行几个语句,中间不需要其它返回值的话,可以把它写成一个共用的方法.
可以把OracleCommand作为List类的泛型,把语句存入LIST中,然后顺序执行,如下:
List<OracleCommand> list = new List<OracleCommand>(); //第一条SQL语句 string updSql = "xxxx"; list.Add(oracleHelper.CreateCommand(updSql)); //第二条 string selSql = "xxxx"; //可以添加多条等等.. list.Add(oracleHelper.CreateCommand(insSQL));//最后执行LIST中存储的SQL语句oracleHelper.ExecuteNonQuery(list);其中oracleHelper为自己定义的一个类,ExecuteNonQuery()为自己定义的一个方法,遍历List中的SQL语句添加到Cmd对象中,方法如下:
/// <summary> /// 对数据库执行增删改操作 /// </summary> /// <param name="cmdList">OracleCommand命令集合</param> /// <returns>影响的行数</returns> public int ExecuteNonQuery(List<OracleCommand> cmdList) { int count = 0; using (OracleConnection conn = new OracleConnection(ConnectionString)) { conn.Open(); using (OracleTransaction tran = conn.BeginTransaction()) { try { int cmdCount = cmdList.Count; for (int i = 0; i < cmdCount; i++) { using (OracleCommand cmd = cmdList[i]) { cmd.Transaction = tran; cmd.Connection = conn; // cmd = conn.CreateCommand; count += cmd.ExecuteNonQuery(); } } tran.Commit(); } catch (Exception e) { tran.Rollback(); count = 0; parmeterList.Clear(); throw e; } } conn.Close(); } return count; }
上面两种方式目标和步骤其实一样,留下参考.
- ORACEL数据存储_事务(C#)
- 数据存储--SQLite事务
- oracel 存储过程语法
- oracel存储过程
- 04_数据存储
- 02_数据存储
- 01_数据存储
- ORACEL 中 事务执行过程
- c++_常量存储
- android(18)_数据存储与访问_SQLite数据库_使用SQLiteDatabase操作SQLite数据库及事务
- ORACEL数据联动
- oracel循环插入数据
- Oracel还原数据-管理
- 如何开发oracel存储过程
- 视图_序列_触发器_事务_函数_存储过程_程序包_同义词_索引
- android数据存储_概述
- cocos2d_x_04_计时器_数据存储
- Android笔记_数据存储
- 算法与追MM
- 粒子群算法(1)----粒子群算法简介
- SQL 高性能查询优化语句
- IOS开发基础篇之──Object-C Stack 容器
- 容错脚本 标记一下
- ORACEL数据存储_事务(C#)
- 6. 初学Java多线程:慎重使用volatile关键字
- 有关outlook恢复以及project 2010的TF860002问题【已解决】
- IOS开发基础篇之──Object-C 实践Queue容器
- Java内存泄露
- VS2008集成QT4.7.2环境搭建
- 静态变量 static
- LDD3学习笔记(6):字符驱动4
- Snort分析报告