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 ...
随机推荐
- HDU 4609 3-idiots FFT+容斥
一点吐槽:我看网上很多分析,都是在分析这个题的时候,讲了半天的FFT,其实我感觉更多的把FFT当工具用就好了 分析:这个题如果数据小,统计两个相加为 x 的个数这一步骤(这个步骤其实就是求卷积啊),完 ...
- 我的Myeclipse黑色主题
- 【Windows核心编程】VirtualAlloc 例子
// VirtualAlloc.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #in ...
- ASM基本操作
1. 添加一个磁盘组 SQL> create diskgroup recover external redundancy disk 'ORCL:kel3'; Diskgroup created. ...
- Tkinter教程之Canvas篇(2)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811888 '''Tkinter教程之Canvas篇(2)''''''9.创建item的tag ...
- ACM1994
/* Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7% .利率按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时 ...
- 12306验证图片的bug
刚才有人告诉我12306验证码换了,于是我就打开了看了看,点了点.oh no , i am really sorry ,12306.
- FindBugs Bug Descriptions
FindBugs Bug Descriptions ◇例1: Integer a = ; String str ="; System.out.println(str == a.toStrin ...
- 在WinForm编程中犯的一些错误
1.一直以为,MouseClick事件在鼠标点击时发生,MouseDoubleClick事件在鼠标双击时发生.那么在单击鼠标时会调用MouseClick事件处理程序,双击鼠标时会调用MouseDoub ...
- openstack deug
今天想debug一下nova-compute进程, 用devstack迅速安装之后, kill掉nova-compute进程,然后修改nova/cmd/__init__.py文件的 “eventlet ...