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. centos中 mysql 5.7安装

    以免授权模式启动 编辑 /etc/my.cnf,添加以下内容: linux环境中:vi /etc/my.cnf 在[MySQL(和PHP搭配之最佳组合)d]配置段添加如下两行: user=mysql ...

  2. 头文件 string.h cstring string 区别

    1.#include <cstring>   //不可以定义string s:可以用到strcpy等函数using   namespace   std; #include <stri ...

  3. PHP/MYSQL UTF8 中文排序

    1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行.用gbk和gb2312可以.这跟几种格式的编码有关系.gbk和gb2312本身的编码就是用拼音排序的. f ...

  4. Oracle数据库入门——如何根据物化视图日志快速刷新物化视图

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构:SQL& ...

  5. 年底奉献-QT编写视频监管平台(开源)

    忙忙碌碌又是一年,算算自己毕业四年半,一直在现在这家公司做研发外加总经理助理,研发起初用的VB.NET,而后全面转为C#,最后又全面转为QT,都是由于项目需要,算下来自己搞QT编程也已经四年了,201 ...

  6. Auto CAD 2013的故障解决方法

    一.问题的提出 Auto CAD 2013在使用过程中出现了错误:“安全系统(软件锁许可管理器) 不起作用或未正确安装.” 二.问题的分析 网络上很多地方转载了这么一个方法: 1) 启动Windows ...

  7. APP-BOM-20516 错误处理一例

    昨天在处理一个工单异常时,需要将一个Released的工单改为Unreleased状态,程序报APP-BOM-20516错误,如下图.百度只搜到两条记录,均无用.Google能搜到的多一些,也无用.进 ...

  8. Unit Of Work--工作单元(一)

    简介 最近忙着新项目的架构,已经有一段时间没有更新博客了,一直考虑着要写些什么,直到有一天跟朋友谈起他们公司开发数据层遇到的一些问题时,我想应该分享一些项目中使用的数据访问模式. 虽然最近一直都在使用 ...

  9. zk框架销毁Page上的Component

    销毁Page上的Component ZK的组件之间是树状结构的,每一组件都只有一个根. 从页面上销毁一个组件可以通过下面两种方式来实现: 1. 组件不是根组件时:Component.setParent ...

  10. Inkpad绘图原理浅析

    本文新版本已转移到开源中国,欢迎前往指导. Inkpad是一款非常优秀的iPad矢量绘图软件,保管你一看见就忘不了.我的感觉是“一览众山小”.“相见甚晚”,以至于我写的TouchVG就是“小巫见大巫” ...