• sqldbhelper


    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()
    {
    //
    }
    }
    }

  • 相关阅读:
    TinyMCE 官方插件一览表(不完全)
    关于在线编辑器的选择:tinymce
    file_put_contents 错误:failed to open stream: Invalid argument 一种原因
    QQ拼音输入法 该到放弃的时候了
    Apache 配置屏蔽某些请求头
    apache EnableMMAP指令
    xwamp 目录结构设计
    Windows服务器如何选 搭建WAMP环境
    Windows安装apache2.4
    自己动手打造WEB服务器 Windows + Apache + PHP + MySQL
  • 原文地址:https://www.cnblogs.com/wolf12/p/4691125.html
Copyright © 2020-2023  润新知