.NET的多种事务处理
Oracle 的事务操作,有时候想在批量操作数据集合的时候,执行一次失败,即为了避免数据异常,将所有的操作回滚。
.NET给我们提供了良好的事务操作,Oracle端也有事务操作,可以灵活使用,此处介绍.NET的事务。 1、.NET事务操作Oracle存储过程
public string insert_input_attach_info_moto(DataTable dt, string ass_code, string cust_model, string ship_date, string cust_name, string ship_city,
string ship_country, string po_cstname, string po_no, string chd_code, ref decimal batch_id)
{
string rtnMsg = ""; //存储过程返回信息
OracleConnection conn = (OracleConnection)DataBase.Provider.GetConnection(); //创建并开启 OracleConnection
conn.Open();
//启动事务
OracleTransaction tran = conn.BeginTransaction();
try
{
OracleCommand cmd = conn.CreateCommand();
cmd.Transaction = tran; //绑定事务
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "pkg_name.procedure_name"; //具体的方法 cmd.Parameters.AddWithValue("p_ass_code", ass_code); //参数占位符
cmd.Parameters.AddWithValue("p_cust_model", cust_model);
cmd.Parameters.AddWithValue("p_ship_date", ship_date);
cmd.Parameters.AddWithValue("p_cust_name", cust_name);
cmd.Parameters.AddWithValue("p_ship_city", ship_city); cmd.Parameters.AddWithValue("p_ship_country", ship_country);
cmd.Parameters.AddWithValue("p_po_cstname", po_cstname);
cmd.Parameters.AddWithValue("p_po_no", po_no);
cmd.Parameters.AddWithValue("p_chd_code", chd_code);
cmd.Parameters.AddWithValue("p_batch_id", batch_id); cmd.Parameters.Add("p_msg", OracleType.VarChar, ); cmd.Parameters[].Direction = ParameterDirection.Output; foreach(DataRow row in dt.Rows)
{
cmd.Parameters[].Value = row["SN"]; //此处是改变的参数,根据实际情况赋值
cmd.ExecuteNonQuery();
rtnMsg = cmd.Parameters[].Value.ToString(); //每次执行的返回值,若出现异常,可以对此值判断,并确认是否回滚操作
} tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw (ex);
}
finally
{
if (conn.State != ConnectionState.Closed) //关闭链接,避免资源浪费
conn.Close();
} return rtnMsg; //对比无事务的
//OracleParameter[] paras = new OracleParameter[]
//{
// new OracleParameter("p_ass_code", ass_code),
// new OracleParameter("p_cust_model", cust_model),
// new OracleParameter("p_ship_date", ship_date),
// new OracleParameter("p_cust_name", cust_name),
// new OracleParameter("p_ship_city", ship_city), // new OracleParameter("p_ship_country", ship_country),
// new OracleParameter("p_po_cstname", po_cstname),
// new OracleParameter("p_po_no", po_no),
// new OracleParameter("p_chd_code", chd_code),
// new OracleParameter("p_batch_id", batch_id), // new OracleParameter("p_msg", OracleType.VarChar, 100)
//};
//paras[10].Direction = ParameterDirection.Output;
//DataBase.Provider.ExecuteNonQuery(CommandType.StoredProcedure, @"pkg_name.procedure_name", paras); //batch_id = Convert.ToDecimal(paras[9].Value);
//return paras[10].Value.ToString();
}
2、
public string updateSuccessFlag(DataTable dt)
{
string rtnMsg = "";
OracleConnection conn = (OracleConnection)DataBase.Provider.GetConnection();
conn.Open();
//启动事务
OracleTransaction tran = conn.BeginTransaction();
try
{
OracleCommand cmd = conn.CreateCommand();
cmd.Transaction = tran; //绑定事务
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"UPDATE table_name d SET d.flag = 1 WHERE d.prodid = :prod_id"; cmd.Parameters.AddWithValue("prod_id", ""); //参数占位符 //cmd.Parameters.Add("p_msg", OracleType.VarChar, 100);
//cmd.Parameters[10].Direction = ParameterDirection.Output; foreach (DataRow dr in dt.Rows) //动态参数,我们参数
{
cmd.Parameters["prod_id"].Value = Convert.ToString(dr["PRODID"]);
cmd.ExecuteNonQuery();
}
tran.Commit();
rtnMsg = "SUCCESS";
}
catch (Exception ex)
{
tran.Rollback();
throw (ex);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
} return rtnMsg;
}
3.SQLServer简单事务
//SQL语句事务
//更新数据到SqlServer
public string UploadStbDataToHuaWei(DataTable dt)
{
string rtnMsg = "";
//获取链接,并开启链接
SqlConnection conn = (SqlConnection)DataBase.ProviderSQL.GetConnection();
conn.Open();
//启动事务
SqlTransaction tran = conn.BeginTransaction();
try
{
SqlCommand cmd = conn.CreateCommand();
cmd.Transaction = tran; //绑定事务
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"insert into [database_name].[dbo].[table_name] ([bar_code] ,[type] ,[stb_value],[created_date], [updated_date])
values(
@bar_code, @type, @stb_value, GETDATE(),
GETDATE())"; cmd.Parameters.AddWithValue("@bar_code", ""); //占位符
cmd.Parameters.AddWithValue("@type", "");
cmd.Parameters.AddWithValue("@stb_value", ""); foreach (DataRow dr in dt.Rows)
{
///cmd.Parameters.Add("@bar_code", SqlDbType.VarChar); //输出 //SqlServer的事务
cmd.Parameters["@bar_code"].Value = Convert.ToString(dr["PRODID"]);
cmd.Parameters["@type"].Value = Convert.ToString(dr["TYPES"]);
cmd.Parameters["@stb_value"].Value = Convert.ToString(dr["VAL"]);
cmd.ExecuteNonQuery();
}
tran.Commit();
rtnMsg = "SUCCESS";
}
catch (Exception ex)
{
tran.Rollback();
throw (ex);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
}
return rtnMsg;
}
-------------------------------------------------------------------------------------------------------
//事务的一般写法和逻辑
SqlConnection conn = DataBase.Provider.GetConnection() as OracleConnection;
//OracleCommand cmd = conn.CreateCommand();
conn.Open();
//...创建数据库连接 cnn
System.Data.SqlClient.SqlTransaction trans = cnn.BeginTransaction();
try
{
foreach (DataRow dr in dt.Rows)
{
cm.CommandText = "update [表] set [数量] = @amount where productID = @productID";
cm.Parameters.Add("@amount", SqlDbType.Int);
cm.Parameters["@amount"].Value = Convert.ToInt32(dr["amount"]);
cm.Parameters.Add("@productID", SqlDbType.VarChar);
cm.Parameters["@productID"].Value = dr["productID"].ToString();
cm.ExecuteNonQuery();
}
trans.Commit();
}
catch
{
trans.Rollback();
} 分享共进步
谢谢阅读!
.NET的多种事务处理的更多相关文章
- PDO多种方式取得查询结果
PDO多种方式取得查询结果 01 December 2009 1:26 Tuesday by Sjolzy PDO最大的特点之一是它的灵活性,本节将介绍如何取得查询结果,包括: 数组(数值或关联数组) ...
- JDBC 元数据 事务处理
使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型 ...
- 了解Entity Framework中事务处理
Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveChanges方法进行插入.修改或删除,EF框架会 ...
- XA事务处理
XA接口详解 X/Open XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁.事务管理器控制 ...
- 转载“启动\关闭Oracle数据库的多种方法”--来自百度#Oracle
启动\关闭Oracle数据库的多种方法 启动和关闭oracle有很多种方法. 这里只给出3种方法: l Sql*plus l OEM控制台 l Wind ...
- MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...
- 转:有事务处理的NoSQL数据库
原文来自于:http://www.infoq.com/cn/articles/MarkLogic-NoSQL-with-Transactions Java平台在其几乎整个生命周期中,都在煞费苦心地努力 ...
- 在.NET项目中使用PostSharp,使用CacheManager实现多种缓存框架的处理
在前面几篇随笔中,介绍了PostSharp的使用,以及整合MemoryCache,<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>.<在.NET项目中使用Pos ...
- 大数据基础篇(一):联机分析处理(OLAP) 与 联机事务处理(OLTP)
联机事务处理(OLTP) OLTP也称实时系统(Real Time System),支持事务快速响应和大并发,这类系统典型的有ATM机(Automated Teller Machine)系统.自动售票 ...
随机推荐
- 【视频分享】Liger UI实战集智建筑project管理系统配商业代码(打印报表、角色式权限管理)
QQ 2059055336 课程讲师:集思博智 课程分类:.net 适合人群:中级 课时数量:23课时 用到技术:Liger UI框架.AJAX.JSON数据格式的序列化与反序列化.角色的交叉权限管理 ...
- Git 学习(三)本地仓库操作——git add & commit
Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...
- Unix/Linux环境C编程新手教程(30) 字符串操作那些事儿
函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...
- 屏保:画线圈LineFlower
LineFlowerSP 小时候玩过一种画线圈的玩具,将一个圆形齿轮在一个大圈里转,会画出各种图形来.这个程序就是模仿它做的.算法原理:将一个圆围绕着另一个大圆公转,并且它还做自转运动.那么圆内一点的 ...
- TCP三次握手四次挥手相关问题探讨
TCP的握手挥手和状态转换是很多网络问题的基础.在此进行相关问题的讨论及记录. 首先,这幅图大致介绍了TCP连接和断开的过程: 注意其中的几个状态: LISTEN, SYN-SEND, SYN-RCV ...
- 告诉我, 究竟我的SQL Server慢在哪里?
你可以使用下面的语句来使用sys.dm_os_wait_stats这个DMV得到线程的等待信息(线程在等什么, 等了多久)的统计数值. WITH [Waits] AS (SELECT [wait_ty ...
- VMware vCenter中, 如何辩认虚机上Raw Device Mapping过了的一块物理磁盘?
比如说, 我们有一套VMware的环境, 其中有一台运行者ESXi的主机, 其上有十块SAS盘. 这十块盘中的五块盘被RDM到一台虚机上了. 假设你发现有添加多了一块盘, 你想移除掉, 但是5块盘其中 ...
- 检测设备平台,操作系统,方向 Javascript 库:Device.js
Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <html> 标签添加一些设备平台,操作系统,方向相关的 CSS class,这样就 ...
- C#汉字转拼音,可识别多音字,带声调,提供正向、逆向、双向分词算法的小程序
用C#写了个汉字转拼音的小工具,和网上大部分工具不同,这个通过分词算法,解决了多音字的问题,并且提供声调,可开可关. 如题,用"银行 行不行 行家说了算"举例,如果转拼音却不能识别 ...
- Android -- 跳转应用市场评分
Code Uri uri = Uri.parse("market://details?id="+getPackageName()); Intent intent = new Int ...