C# 事务处理
前言:
通常SqlHelper类为了方便处理,做成了静态类,静态类的问题是不方便添加事务处理。
实例化类方便添加事务处理,DoTrans/CommitTrans/RollBackTrans 三个函数
说明:
1:ExecuteNonQuery执行多条SQL语句,默认包含事务。
实际执行代码:
SqlServerInfo ssi = new SqlServerInfo();
string strSql="UPDATE dbo.Test SET testname='2321' WHERE testid=1;UPDATE dbo.TestCustorm SET TestNickName='Nick2321' WHERE testid=1;";
//string strsql1 = "UPDATE dbo.TestCustorm SET TestNickName='Nick2321' WHERE testid=1;";
//string strsql2 = "UPDATE dbo.Test SET testname='2321' WHERE testid=1";
int i=ssi.ExecuteNonQuerySqlTextWithNoTrans(strSql);
if(i>)
{
Response.Write("执行成功");
}
else
{
Response.Write("执行失败");
}
SQL执行代码:
public class SqlServerInfo
{
private string _SqlConnectionString = "Data Source=(local);Initial Catalog=test;User ID=sa;Password=sasa;";
public string SqlConnectionString
{
get
{
return _SqlConnectionString;
}
set
{
_SqlConnectionString = value;
}
} /// <summary>
/// 执行sql语句并返回受影响行数
/// </summary>
/// <param name="cmdText">sql语句</param>
/// <returns></returns>
public int ExecuteNonQuerySqlTextWithTrans(string cmdText)
{
int num2=;
SqlConnection connection = new SqlConnection(_SqlConnectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction sTran = connection.BeginTransaction();
try
{
PrepareCommand(cmd, connection, sTran, CommandType.Text, cmdText, null);
num2 = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
sTran.Commit();
connection.Close(); }
catch (Exception ex)
{
//LogHelper log = new LogHelper();
//log.WriteLog("时间:" + DateTime.Now.ToString() + "----错误消息:" + ex.Message);
sTran.Rollback();
}
return num2;
} /// <summary>
/// 执行sql语句并返回受影响行数
/// </summary>
/// <param name="cmdText">sql语句</param>
/// <returns></returns>
public int ExecuteNonQuerySqlTextWithNoTrans(string cmdText)
{
int num2 = ;
SqlConnection connection = new SqlConnection(_SqlConnectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
try
{
PrepareCommand(cmd, connection, null, CommandType.Text, cmdText, null);
num2 = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
connection.Close(); }
catch (Exception ex)
{ }
return num2;
} /// <summary>
/// Command准备
/// </summary>
/// <param name="cmd"></param>
/// <param name="conn"></param>
/// <param name="isOpenTrans"></param>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction isOpenTrans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (isOpenTrans != null)
{
cmd.Transaction = isOpenTrans;
}
cmd.CommandType = cmdType;
if (cmdParms != null)
{
cmd.Parameters.AddRange(cmdParms);
}
}
}
2:分割执行包含事务
执行语句:
protected void Button1_Click(object sender, EventArgs e)
{
SqlServerInfo ssi = new SqlServerInfo();
int iSeed = ;
Random ran = new Random(iSeed);
int RandKey=ran.Next(,);
string strSql = "UPDATE dbo.Test SET testname='" + RandKey.ToString() + "' WHERE testid=1;UPDATE dbo.TestCustorm SET TestNickName1='Nick" + RandKey.ToString() + "' WHERE testid=1";
//string strsql1 = "UPDATE dbo.TestCustorm SET TestNickName='Nick2321' WHERE testid=1;";
//string strsql2 = "UPDATE dbo.Test SET testname='2321' WHERE testid=1";
int i=ssi.ExecuteNonQuerySqlTextWithNoTrans(strSql);
if(i>)
{
Response.Write("执行成功");
}
else
{
Response.Write("执行失败");
} } protected void Button2_Click(object sender, EventArgs e)
{
SqlServerInfo ssi = new SqlServerInfo();
int iSeed = ;
Random ran = new Random(iSeed);
int RandKey = ran.Next(, );
string strSql = "UPDATE dbo.Test SET testname='" + RandKey.ToString() + "' WHERE testid=1;UPDATE dbo.TestCustorm SET TestNickName1='Nick" + RandKey.ToString() + "' WHERE testid=1";
//string strsql1 = "UPDATE dbo.TestCustorm SET TestNickName='Nick2321' WHERE testid=1;";
//string strsql2 = "UPDATE dbo.Test SET testname='2321' WHERE testid=1";
int i = ssi.ExecuteNonQuerySqlTextWithTrans(strSql);
if (i > )
{
Response.Write("执行成功");
}
else
{
Response.Write("执行失败");
} }
处理代码:
public class SqlServerInfo
{
private string _SqlConnectionString = "Data Source=(local);Initial Catalog=test;User ID=sa;Password=sasa;";
public string SqlConnectionString
{
get
{
return _SqlConnectionString;
}
set
{
_SqlConnectionString = value;
}
} /// <summary>
/// 执行sql语句并返回受影响行数
/// </summary>
/// <param name="cmdText">sql语句</param>
/// <returns></returns>
public int ExecuteNonQuerySqlTextWithTrans(string cmdText)
{
int num2=;
SqlConnection connection = new SqlConnection(_SqlConnectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction sTran = connection.BeginTransaction();
try
{
string[] sqlContexts= cmdText.Split(';');
foreach(string sql in sqlContexts)
{
PrepareCommand(cmd, connection, sTran, CommandType.Text, cmdText, null);
num2 = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
sTran.Commit();
connection.Close(); }
catch (Exception ex)
{
//LogHelper log = new LogHelper();
//log.WriteLog("时间:" + DateTime.Now.ToString() + "----错误消息:" + ex.Message);
sTran.Rollback();
}
return num2;
} /// <summary>
/// 执行sql语句并返回受影响行数
/// </summary>
/// <param name="cmdText">sql语句</param>
/// <returns></returns>
public int ExecuteNonQuerySqlTextWithNoTrans(string cmdText)
{
int num2 = ;
SqlConnection connection = new SqlConnection(_SqlConnectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
try
{
string[] sqlContexts= cmdText.Split(';');
foreach(string sql in sqlContexts)
{
PrepareCommand(cmd, connection, null, CommandType.Text, sql, null);
num2 = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
} connection.Close(); }
catch (Exception ex)
{ }
return num2;
} /// <summary>
/// Command准备
/// </summary>
/// <param name="cmd"></param>
/// <param name="conn"></param>
/// <param name="isOpenTrans"></param>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction isOpenTrans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (isOpenTrans != null)
{
cmd.Transaction = isOpenTrans;
}
cmd.CommandType = cmdType;
if (cmdParms != null)
{
cmd.Parameters.AddRange(cmdParms);
}
}
}
C# 事务处理的更多相关文章
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- 读书笔记--SQL必知必会20--管理事务处理
20.1 事务处理 使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性. 如果没有错误发生,整组语句提交给数据库表 ...
- EntityFramework 事务处理
默认情况下,当EF调用SaveChanges()时,会把生成的所有SQL命令“包”到一个“事务(transaction)”中,只要有一个数据更新操作失败,整个事务将回滚. 在多数情况下,如果你总在数据 ...
- Java事务处理
Java事务处理总结 一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(co ...
- PHP与MYSQL事务处理
/*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollback 事务回滚commit 事务确认2.直接用set来改变mysql的 ...
- 已经过事务处理的 MSMQ 绑定(转载)
https://msdn.microsoft.com/zh-cn/biztalk/ms751493 本示例演示如何使用消息队列 (MSMQ) 执行已经过事务处理的排队通信. 注意 本主题的末尾介绍了此 ...
- SQLite剖析之事务处理技术
前言 事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等.在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率.假设需要在一张表内一次插入20个人的 ...
- PHP系统声明式事务处理
转自:http://www.jianshu.com/p/34261804bc45 1.数据库事务 事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行, ...
- 事务处理-回滚(转账操作)(转自http://www.cnblogs.com/void-m/p/6143540.html)
JDBC事务处理-四大原则 原子性一致性隔离性持久性 第一步:实现转账操作 假设在账户中,盖伦有余额5000元,赵信有余额2000元, 盖伦要向赵信转账1000元. 1 2 3 4 5 6 7 8 9 ...
- .NET分布式事务处理
在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...
随机推荐
- psutil模块安装指南(win与linux)
1.windows下psutil模块安装: https://pypi.python.org/packages/3.4/p/psutil/ 下载符合版本的软件包下载,然后安装即可. 2.ubuntu下载 ...
- 1小时vpn coding让开发更简单 或https://www.imfreevpn.org/
- windows service的作成
http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html
- jhat中的OQL(对象查询语言)
http://blog.csdn.net/wanglha/article/details/40181767 jhat中的OQL(对象查询语言) 如果需要根据某些条件来过滤或查询堆的对象,这是可能的,可 ...
- java从控制台读取数据的方式
1. Scanner sc = new Scanner(System.in); String s = sc.readLine(); 2. BufferReader br = new BufferRea ...
- [ActionScript] AS3 涂鸦的擦除和撤销功能
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMo ...
- nyoj 71 独木舟上的旅行
点击打开链接 独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度: 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人 ...
- 分布式消息队列的使用kakfa
作用: 1.系统解耦 2.通过消息可以减少系统的处理压力,做一个缓冲 3.原理基于生存者消费者的模式 4.两种场景:队列(端对端 一对一).主题(一对多,广播模式) 5.消息:header.body构 ...
- css 使用background背景实现border边框效果
css中,我们一般使用border给html元素设置边框,但也可以使用background背景来模拟css边框效果,本文章向大家介绍css 使用background背景实现border边框效果,需要的 ...
- Spring 配置文件详解 http://www.blogjava.net/hellxoul/archive/2011/11/19/364324.html
1.基本配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http: ...