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 ...
随机推荐
- [Everyday Mathematics]20150211 Carlson inequality
$$\bex a_n\geq 0\ra \vsm{n}a_n\leq \sqrt{\pi}\sex{\vsm{n}a_n^2}^{1/4} \sex{\vsm{n}n^2a_n^2}^{1/4}, \ ...
- delphi 设置表格样式。
//设置表格样式 wordDoc.Tables.Item(1).Borders.Item(Word.WdBorderType.wdBorderLeft).LineStyle = Word.WdLine ...
- 解决duilib使用zip换肤卡顿的问题:修改duilib并使用资源文件换肤
转载请说明原出处,谢谢~~ 今天在做单子是,客户要求做换肤功能,为此我专门写了一个换肤函数,并且把各种皮肤资源压缩为各个zip文件来换肤.但是客户反映程序运行缓慢,我测试后发现的确明显可以看出慢了不少 ...
- Text Kit进阶
在上一篇文章Text Kit入门中我们主要了解了什么是Text Kit及它的一些架构和基本特性,这篇文章中会涉及关于Text Kit的更多具体应用. Text Kit是建立在Core Text框架上的 ...
- 去除下载电影和电视剧文件名中的多余字符[python实现]
讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的Python代码,自行修改即可. #!\usr\bin\env python # -*- coding: u ...
- TP分析
http://blog.csdn.net/l627859442/article/details/7633457 http://blog.chinaunix.net/uid-27717694-id-37 ...
- (四面体)CCPC网络赛 HDU5839 Special Tetrahedron
CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...
- Tkinter教程之Button篇(2)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811300 # Tkinter教程之Button篇(2)'''5.指定Button的宽度与高度 ...
- 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
1.冒泡排序: (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)外面再套个循环就行. 算法复杂度:O(N2) 不罗嗦,上代码: //冒泡排序(两两交换,外加一个外循环) pub ...
- Java ArrayList Sort
Collections.sort(hits_list, new Comparator<ScoreDoc>(){ @Override public int compare(ScoreDoc ...