using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace APIHelperLibrary
{
public class SqlDbHelper :IDisposable
{
#region Field

/// <summary>
/// 数据库连接字符串
/// </summary>
private string ConnString = string.Empty;
/// <summary>
/// 是否使用事务
/// </summary>
private bool bInTrans = false;
/// <summary>
/// 数据库连接对象
/// </summary>
private SqlConnection connection = null;
/// <summary>
/// 数据库操作事务处理对象
/// </summary>
private SqlTransaction transaction = null;

#endregion

#region Constructor
/// <summary>
/// 无参构造器
/// </summary>
public SqlDbHelper()
{
ConnString = "";
}

/// <summary>
/// 带一个参数构造器
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
public SqlDbHelper(string connStr)
{
this.ConnString = connStr;
}

#endregion

#region SqlConnection Method

/// <summary>
/// 打开数据库连接
/// </summary>
private void OpenConn()
{
if (!bInTrans)
{
connection = new SqlConnection(this.ConnString);
}
else
{
if (connection == null)
{
connection = new SqlConnection(this.ConnString);
}
}
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
}

/// <summary>
/// 关闭数据库连接
/// </summary>
private void CloseConn()
{
if (!bInTrans && null != connection)
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
connection.Dispose();
}
}
}

#endregion

#region SqlCommand Method

/// <summary>
/// 生成SqlCommand命令对象
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="lstParams">参数集合</param>
/// <param name="comType">sql语句类型</param>
/// <returns></returns>
private SqlCommand PreSqlCommand(string strSql, List<SqlParameter> lstParams = null, CommandType comType = CommandType.Text)
{
this.OpenConn();
//初始化SqlCommand
SqlCommand command = connection.CreateCommand();
command.CommandText = strSql;
command.CommandType = comType;
//清理参数
command.Parameters.Clear();
//是否使用事务
if (null != transaction && bInTrans)
{
command.Transaction = transaction;
}
if (null != lstParams && lstParams.Count > 0)
{
command.Parameters.AddRange(lstParams.ToArray());
}
return command;
}

#endregion

#region SqlTransaction Method

/// <summary>
/// 启动事务处理
/// </summary>
public void BeginTran()
{
if (!bInTrans)
{
this.OpenConn();
transaction = connection.BeginTransaction();
bInTrans = true;
}
}

/// <summary>
/// 提交事务处理
/// </summary>
public void CommitTran()
{
if (null != transaction && bInTrans)
{
transaction.Commit();
transaction.Dispose();
this.CloseConn();
bInTrans = false;
transaction = null;
}
}

/// <summary>
/// 回滚事务处理
/// </summary>
public void RollbackTran()
{
if (null != transaction && bInTrans)
{
transaction.Rollback();
transaction.Dispose();
this.CloseConn();
bInTrans = false;
transaction = null;
}
}

#endregion

#region Insert、Update、Delete Method

/// <summary>
/// 执行添加操作并返回自增长ID
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="lstParams">参数集合</param>
/// <param name="comType">sql语句类型</param>
/// <returns></returns>
public int ExecuteIdentity(string strSql, List<SqlParameter> lstParams = null, CommandType comType = CommandType.Text)
{
int rtnId = 0;
SqlCommand comm = null;
try
{
if (comType == CommandType.Text)
{
comm = PreSqlCommand(strSql + " SELECT @@IDENTITY AS ID ", lstParams, comType);
}
else
{
comm = PreSqlCommand(strSql, lstParams, comType);
}
int.TryParse(comm.ExecuteScalar().ToString(), out rtnId);
}
catch (Exception ex)
{
if (bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
return rtnId;
}

/// <summary>
/// 执行SQL语句并返回影响行数
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="lstParams">参数集合</param>
/// <param name="comType">sql语句类型</param>
/// <returns></returns>
public int ExecuteNonQuery(string strSql, List<SqlParameter> lstParams = null, CommandType comType = CommandType.Text)
{
int rtnValue = 0;
try
{
SqlCommand comm = PreSqlCommand(strSql, lstParams, comType);
rtnValue = comm.ExecuteNonQuery();
}
catch (Exception ex)
{
if (bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
return rtnValue;
}

/// <summary>
/// 批量导入数据
/// </summary>
/// <param name="dTable">需要导入的数据</param>
/// <param name="tableName">目标表名</param>
/// <returns></returns>
public bool SqlBulkCopyData(DataTable dTable, string tableName)
{
bool isSuc = false;
SqlBulkCopy bulkCopy = null;
if (!bInTrans)
{
this.OpenConn();
bulkCopy = new SqlBulkCopy(connection);
}
else
{
bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction);
}
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 5;
bulkCopy.DestinationTableName = tableName;
foreach (DataColumn column in dTable.Columns)
{
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
try
{
bulkCopy.WriteToServer(dTable);
isSuc = true;
}
catch (Exception ex)
{
isSuc = false;
if (this.bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
return isSuc;
}

#endregion

#region ExecuteScalar Method

/// <summary>
/// 返回单个值
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="lstParams">参数集合</param>
/// <param name="comType">sql语句类型</param>
/// <returns></returns>
public object ExecuteScalar(string strSql, List<SqlParameter> lstParams = null, CommandType comType = CommandType.Text)
{
object rtnValue = null;
try
{
SqlCommand comm = PreSqlCommand(strSql, lstParams, comType);
rtnValue = comm.ExecuteScalar();
}
catch (Exception ex)
{
if (bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
return rtnValue;
}

#endregion

#region SqlDataReader Method

/// <summary>
/// 返回SqlDataReader
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="lstParams">参数集合</param>
/// <param name="comType">sql语句类型</param>
/// <returns></returns>
public SqlDataReader ExecuteDataReader(string strSql, List<SqlParameter> lstParams = null, CommandType comType = CommandType.Text)
{
SqlDataReader dataReader = null;
CommandBehavior behavior = CommandBehavior.Default;
if (!bInTrans)
{
behavior = CommandBehavior.CloseConnection;
}
try
{
SqlCommand comm = PreSqlCommand(strSql, lstParams, comType);
dataReader = comm.ExecuteReader(behavior);
}
catch (Exception ex)
{
if (bInTrans)
{
this.RollbackTran();
}
throw ex;
}
return dataReader;
}

#endregion

#region 返回DataTable
/// <summary>
/// 返回DataTable对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">参数数组</param>
/// <param name="comType">sql语句类型</param>
/// <returns>DataTable对象</returns>
public DataTable ExecuteDataTable(string sql, List<SqlParameter> parameters = null, CommandType comType = CommandType.Text)
{
DataTable rtnTable = new DataTable();
try
{
SqlCommand comm = this.PreSqlCommand(sql, parameters, comType);
SqlDataAdapter sda = new SqlDataAdapter(comm);
sda.Fill(rtnTable);
}
catch (Exception ex)
{
//如果在事务中回滚事务
if (this.bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
return rtnTable;
}

#endregion

#region 返回DataSet

/// <summary>
/// 返回DataSet对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">参数数组</param>
/// <param name="comType">sql语句类型</param>
/// <returns>DataSet对象</returns>
public DataSet ExecuteDataSet(string sql, List<SqlParameter> parameters = null, CommandType comType = CommandType.Text)
{
DataSet rtnSet = new DataSet();
try
{
SqlCommand comm = this.PreSqlCommand(sql, parameters, comType);
SqlDataAdapter sda = new SqlDataAdapter(comm);
sda.Fill(rtnSet);
return rtnSet;
}
catch (Exception ex)
{
//如果在事务中回滚事务
if (this.bInTrans)
{
this.RollbackTran();
}
throw ex;
}
finally
{
this.CloseConn();
}
}

#endregion

public void Dispose()
{
//
}
}
}

sqldbhelper的更多相关文章

  1. ASP.NET常用的SqlDbHelper类

    请引用 using System.Data;using System.Data.SqlClient; 两个命名空间. 可以满足常用的数据集,读取多条数据,以及增删改操作 代码: /// <sum ...

  2. SqlDBHelper常用方法

    /*============================================================= *.net连接数据库常用方法 *Author : dongny,Li * ...

  3. SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)

    ****************************************** 这是官网新闻左侧类别那部分用到的 **************************************** ...

  4. C# 操作数据库常用的 SqlDbHelper

    原博客园转载于   https://www.cnblogs.com/felix-wang/p/6742785.html using System; using System.Collections.G ...

  5. 返回泛型集合的SqlDBHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Entity; ...

  6. 重拾MVC——第一天:数据库连接与SqlDbHelper

    这个 SqlDbHelper 是我参考网上的和以前用过的 SqlDbHelper 自己写的一个非常简单的东西,主要是记录自己的学习情况 首先在Web.config中配置数据库连接字符串: <co ...

  7. ASP.NET数据库连接类(SqlDBHelper)

    第一步:创建一个名为SqlDBHelper的类,用来作为联通数据库和系统之间的桥梁. 第二步:引入命名空间,如果System.Configuration.System.Transcations这两个命 ...

  8. .Net SqlDbHelper

    using System.Configuration; using System.Data.SqlClient; using System.Data; namespace ExamDAL { clas ...

  9. SQLSERVER单表CRUD通用方法

    一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...

随机推荐

  1. [原创]自定义view之:快速开发一款Material Design风格的dialog的开源项目MDDialog

    随着google开始主导Material Design风格的设计,越来越多的app开始使用Material Design风格来设计自己的UI.虽然在Android Studio中集成了多种快速开发框架 ...

  2. Winform 数据库连接app.config文件配置 数据库连接字符串

    1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...

  3. MFC中混合使用Duilib制作界面

    因为公司项目最近入了MFC的这个大坑,用MFC做UI做了一段时间,感觉不是很方便,开发效率有点慢. 看了c++里面做界面的类库,感觉Duilib比较符合做界面的需求,而且很多大公司也在使用Duilib ...

  4. [CS231n-CNN] Linear classification II, Higher-level representations, image features, Optimization, stochastic gradient descent

    课程主页:http://cs231n.stanford.edu/ loss function: -Multiclass SVM loss: 表示实际应该属于的类别的score.因此,可以发现,如果实际 ...

  5. C#基础总结之四List-Hashtable-冒泡排序

    #region 第四天作业 名片--------ArrayList //ArrayList card = new ArrayList(); //card.Add("2202111001122 ...

  6. bat 结束进程

    @echo offEcho 先等待7秒..等待启动其他软件ping 127.0.0.1 -n 60Echo 正在杀死进程...taskkill /f /im funshion.exetaskkill ...

  7. 手把手教你搭建LyncServer2013之部署及配置监控功能(十八)

    自弃用监控服务器角色以来,已对 Microsoft Lync Server 2013 监控基础结构进行了重大更改.不再采用不同的监控服务器角色(通常需要组织设置专用计算机来充当监控服务器),现在监控服 ...

  8. .Net底层剖析目录章节

    [.Net底层剖析]目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 作 ...

  9. selenium webdriver (python) 第二版

    前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...

  10. CentOS 7.2 MySQL 5.7 主从配置

    MySQL的安装:CentOS 7.2 yum方式安装MySQL 5.7 两台服务器分别如下: Master:192.168.1.100 Slave:192.168.1.101 Master配置: 编 ...