sql操作事务SqlTransHelper类实现
具体实现代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient; namespace Tools
{
public class SqlTransHelper
{
private readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
private SqlConnection Connection = null; //数据库连接对象
private SqlTransaction Trans = null;//事务对象 /// <summary>
/// 构造方法
/// </summary>
public SqlTransHelper()
{
Connection = new SqlConnection(connectionString);
Connection.Open();
Trans = Connection.BeginTransaction();
} /// <summary>
/// 新建一个sqlCommand对象,并把事务对象添加进来
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <returns>返回sqlCommand对象</returns>
private SqlCommand BuildCommand(string cmdText, CommandType cmdType)
{
SqlCommand command = new SqlCommand(cmdText, Connection) { CommandType = cmdType, CommandTimeout = , Transaction = Trans };
return command;
} /// <summary>
/// 将sqlCommand对象的参数添加进来
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <param name="parameters">传递进来的参数</param>
/// <returns>返回sqlCommand对象</returns>
private SqlCommand AddParamets(CommandType cmdType, string cmdText, params SqlParameter[] parameters)
{
SqlCommand command = BuildCommand(cmdText, cmdType);
if (parameters == null) return command;
foreach (SqlParameter parameter in parameters)
{
if ((parameter.Direction == ParameterDirection.InputOutput) && (parameter.Value == null))
parameter.Value = DBNull.Value;
command.Parameters.Add(parameter);
}
return command;
} /// <summary>
/// 执行sql语句
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <returns></returns>
public int ExecuteNonQuery(string cmdText)
{
return ExecuteNonQuery(CommandType.Text, cmdText, null);
} /// <summary>
/// 执行sql语句
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <param name="parameters">传递进来的参数</param>
/// <returns>返回影响的行数</returns>
public int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] parameters)
{
SqlCommand cmd = AddParamets(cmdType, cmdText, parameters);
return cmd.ExecuteNonQuery();
} /// <summary>
/// 返回第一个对象
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <returns>返回第一个对象</returns>
public object ExecuteScalar(string cmdText)
{
return ExecuteScalar(CommandType.Text, cmdText, null);
} /// <summary>
/// 返回第一个对象
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <param name="parameters">传递进来的参数</param>
/// <returns>返回第一个对象</returns>
public object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] parameters)
{
SqlCommand cmd = AddParamets(cmdType, cmdText, parameters);
return cmd.ExecuteScalar();
} /// <summary>
/// 返回DataSet集
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <returns>返回DataSet集</returns>
public DataSet ExecuteDataset(string cmdText)
{
return ExecuteDataset(CommandType.Text, cmdText, null);
} /// <summary>
/// 返回DataSet集
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <param name="parameters">传递进来的参数</param>
/// <returns>返回DataSet集</returns>
public DataSet ExecuteDataset(CommandType cmdType, string cmdText, params SqlParameter[] parameters)
{
SqlCommand cmd = AddParamets(cmdType, cmdText, parameters);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
} /// <summary>
/// 返回DataTable
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <returns>返回DataTable</returns>
public DataTable ExecuteDataTable(string cmdText)
{
return ExecuteDataTable(CommandType.Text, cmdText, null);
} /// <summary>
/// 返回DataTable
/// </summary>
/// <param name="cmdText">要执行的sql语句</param>
/// <param name="cmdType">是sql语句,还是存储过程</param>
/// <param name="parameters">传递进来的参数</param>
/// <returns>返回DataTable</returns>
public DataTable ExecuteDataTable(CommandType cmdType, string cmdText, params SqlParameter[] parameters)
{
DataSet ds = ExecuteDataset(cmdType, cmdText, parameters);
return ds == null || ds.Tables.Count == ? null : ds.Tables[];
} /// <summary>
/// 提交事务
/// </summary>
public void Commit()
{
this.Trans.Commit();
this.Close();
} /// <summary>
/// 回滚事务
/// </summary>
public void Rollback()
{
this.Trans.Rollback();
this.Close();
} /// <summary>
/// 关闭对象
/// </summary>
public void Close()
{
if (this.Connection.State != ConnectionState.Closed)
{
this.Connection.Close();
}
}
}
}
具体调用方法:
SqlTransHelper transHelper = new SqlTransHelper();
try
{
transHelper.ExecuteNonQuery("insert into a_temp(pwd) values('aa');");
transHelper.ExecuteNonQuery("insert into a_temp(pwd) values('bb');");
transHelper.ExecuteNonQuery("insert into a_temp(pwd) values('cc'233);"); transHelper.Commit();//事务提交
}
catch
{
transHelper.Rollback();
}
finally
{
transHelper.Close();
}
sql操作事务SqlTransHelper类实现的更多相关文章
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- 【SqlServer系列】浅谈SQL Server事务与锁(上篇)
一 概述 在数据库方面,对于非DBA的程序员来说,事务与锁是一大难点,针对该难点,本篇文章视图采用图文的方式来与大家一起探讨. “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及 ...
- 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
一. 前言 在前面的两个章节中,我们分别详细介绍了EF的增删改的两种方式(方法和状态)和EF查询的两种方式( Lambda和Linq ),进行到这里,可以说对于EF,已经入门了,本来应该继续往下进行E ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- 浅谈SQL Server事务与锁(上篇)
一 概述 在数据库方面,对于非DBA的程序员来说,事务与锁是一大难点,针对该难点,本篇文章试图采用图文的方式来与大家一起探讨. “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及 ...
- 存储过程中使用事务,sql server 事务,sql事务
一.存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: 代码 ...
- 人人都是 DBA(VI)SQL Server 事务日志
SQL Server 的数据库引擎通过事务服务(Transaction Services)提供事务的 ACID 属性支持.ACID 属性包括: 原子性(Atomicity) 一致性(Consisten ...
- 数据库优化和SQL操作的相关题目
SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...
随机推荐
- gitlab的使用
Gitlab的使用 最近成功的在公司部署了gitlab,鉴于同学们还不会使用,这里写篇博客说明下.如果想安装gitlab的话,需要一些linux的基础知识,我在这里记录了我安装的参考<http: ...
- Android应用程序版本号管理(官方文档中文版)
在应用程序的 升级/维护 策略中, 版本是一个关键的组成部分. 用户需要了解在他们的设备上所安装的应用程序的版本的特定信息, 以及已安装程序的升级版本可用的情况. 其他应用程序 - 作为同一个套件中发 ...
- Maximum Random Walk(概率dp)
题意: 走n步,给出每步向左走概率l,向右走概率r,留在原地的概率 1-l-r,求能达到的最远右边距离的期望. 分析: 开始按期望逆求的方式分析,但让求的就是右边界没法退,懵了一会,既然逆着不能求,就 ...
- bjfu1099 度度熊大战僵尸
这也是2011年百度之星的一道题. 这题我就是乱搞搞过的,打代码之前自己心里也没底,不知道能不能过的. 我的做法很简单,就是按时间顺序依次构造能杀死的僵尸血量,找到第k小的.构造的方法也很暴力:对t时 ...
- CABasicAnimation
几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...
- 在word中显示漂亮的代码
在word中粘贴或写代码时,通常得不到想要的格式,可用‘Notepad++’工具实现. 步骤: (1)安装Notepad++软件,把代码粘贴进去,选择菜单栏中的语言,然后选择相应代码语言,如P-> ...
- zabbix统一脚本监控方式
几周的zabbix使用之后几点心得,暂时记在这儿 简单命令监控,直接配置Userparameter参数,以应用来分类conf文件,将不同应用的配置写在不同的conf文件里,并将之放到统一的配置引入目录 ...
- 为Android游戏接入第三方登录功能
1. “游戏客户端”调用“SDK客户端”的登录功能向“SDK服务端”进行身份认证 2. 验证通过后,“游戏客户端”可得到用户信息,根据游戏逻辑可将用户信息传给“游戏服务器”进行验证 3. “游戏服务器 ...
- Tengine新增健康检查模块
总结 2.tengine的状态监控 Tengine的状态监控有两种 这里演示一个健康检查模块功能 配置一个status的location location /status { check_status ...
- cocos2d-x生成随机数
//获取系统时间 //time_t是long类型,精确到秒,通过time()函数可以获得当前时间和1970年1月1日零点时间的差 time_t tt; ...