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中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...
随机推荐
- 【JavaScript】字符串处理函数集合
var $string = {}, toString, template, parseURL, buildURL, mapQuery, test, contains, trim, clean, cam ...
- Input gameobject vector3 c#
Input类中的常用方法 bool w=Input.GetKey(KeyCode.W);//检测是否按下键盘W Input.GetKeyDown(KeyCode.W);//表示检测按下时 Input. ...
- Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
去配置文件中找 , 某个配置文件被引用了两次以上.移除后保留一个即可.如下即可产生上述问题 <import resource="classpath:testContext-curren ...
- SAR命令
前面已经介绍了 vmstat和top命令的解析及使用,下面我们来学习一个更重要的命令sarsar命令可以通过参数单独查看系统某个局部的使用情况 sar 命令行的常用格式: sar [options] ...
- git相关网页
git.apache2.gerrit安装 1.http://blog.csdn.net/benkaoya/article/details/8680886 2.http://fatalove.iteye ...
- iOS开发之检查更新
iOS设备检查更新版本: #pragma mark - 检查更新 - (void)checkUpdateWithAPPID:(NSString *)APPID { //获取当前应用版本号 NSDict ...
- NLog文章系列——如何配置NLog(转)
NLog使用方法 作者:Jaros?aw Kowalski <> 翻译:CrazyCoder(由衷感谢他的热心!!) 原文:http://www.nlog-project.org/conf ...
- sql server中的锁 事务锁 更新锁 保持锁 共享锁 你知道吗?
锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其 ...
- [SQL]patindex的用法
返回指定表达式中某模式第一次出现的起始位置:如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零. Transact-SQL 语法约定 语法 PATINDEX ( '%pattern%' , ...
- 初探接口测试框架--python系列5
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...