前言:

通常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# 事务处理的更多相关文章

  1. In-Memory:内存优化表的事务处理

    内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...

  2. 读书笔记--SQL必知必会20--管理事务处理

    20.1 事务处理 使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性. 如果没有错误发生,整组语句提交给数据库表 ...

  3. EntityFramework 事务处理

    默认情况下,当EF调用SaveChanges()时,会把生成的所有SQL命令“包”到一个“事务(transaction)”中,只要有一个数据更新操作失败,整个事务将回滚. 在多数情况下,如果你总在数据 ...

  4. Java事务处理

    Java事务处理总结     一.什么是Java事务   通常的观念认为,事务仅与数据库相关.   事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(co ...

  5. PHP与MYSQL事务处理

    /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollback 事务回滚commit 事务确认2.直接用set来改变mysql的 ...

  6. 已经过事务处理的 MSMQ 绑定(转载)

    https://msdn.microsoft.com/zh-cn/biztalk/ms751493 本示例演示如何使用消息队列 (MSMQ) 执行已经过事务处理的排队通信. 注意 本主题的末尾介绍了此 ...

  7. SQLite剖析之事务处理技术

    前言 事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等.在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率.假设需要在一张表内一次插入20个人的 ...

  8. PHP系统声明式事务处理

    转自:http://www.jianshu.com/p/34261804bc45 1.数据库事务 事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行, ...

  9. 事务处理-回滚(转账操作)(转自http://www.cnblogs.com/void-m/p/6143540.html)

    JDBC事务处理-四大原则 原子性一致性隔离性持久性 第一步:实现转账操作 假设在账户中,盖伦有余额5000元,赵信有余额2000元, 盖伦要向赵信转账1000元. 1 2 3 4 5 6 7 8 9 ...

  10. .NET分布式事务处理

    在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...

随机推荐

  1. c语言知识(2)

    while(n)首先,n在这里被当作了一个条件其次,当n为真时,进入while循环体(A):否则跳出循环继续执行下面部分(B).n为0时条件为假  n不为0条件为真 while(j) { if(j%1 ...

  2. Axis2的下载和安装

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  3. 程序员遇到Bug时的30个反应

    开发应用程序是一个非常有压力的工作.没有人是完美的,因此在这个行业中,代码中出现bug是相当普遍的现象.面对bug,一些程序员会生气,会沮丧,会心烦意乱,甚至会灰心丧气,而另一些程序员会依然保持冷静沉 ...

  4. javascript自执行匿名函数

    1)自执行匿名函数: 常见格式:(function() { /* code */ })(); 2)作用:       function中的code代码在解释时就已经在运行了.因此可以用它创建命名空间, ...

  5. inno setup 在卸载时如果想保留文件 使用uninsneveruninstall

    一般来说,inno只卸载你安装的文件,自动生成如Thumb.db(缩略图)等文件,卸载程序是不会删除这些的,此时你希望整个安装目录删除则可用你说的方法删除.若想保留某些文件,则必须在[File]段中拷 ...

  6. POJ 3264-Balanced Lineup, NYOJ 119-士兵杀敌3 线段树

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...

  7. NYOJ-228 士兵杀敌5

    士兵杀敌(五) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  8. 常见的MIME类型

    超文本标记语言文本 .htm,.html text/html 普通文本 .txt text/plain GIF图形 .gif image/gif JPEG图形 .ipeg,.jpg image/jpe ...

  9. 01-Quartz2D介绍

    01-PPT介绍 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !impo ...

  10. x86_64平台编译链接汇编程序

    assemble: nasm -f elf32 sample.asm -l sample.lst link: ld -m elf_i386 -o test sample.o io.o