• ADO.NET 数据库帮助类SQLHelper


    <add key="ConnectionString" value="Data Source=.Sql2014;Initial Catalog=FirstDB;User ID=sa;Password=123456" />

    SQLHelper:
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Data.Common;
    using System.Data.SqlClient;
    
    namespace  Libs {
        public class SQLHelper {
            #region 通用方法  
    
            private readonly string _connectionString;
    
            public SQLHelper() : this(InternalGetDbConnection("ConnectionString")) {
                
            }
    
            public SQLHelper(string key)
            {
                if (string.IsNullOrEmpty(key)) throw new Exception("数据库连接未配置");
    
                _connectionString = InternalGetDbConnection(key);
            }
            private static string InternalGetDbConnection(string key) {
                var value = ConfigurationManager.AppSettings[key];
                if (value == null) {
                    value = ConfigurationManager.ConnectionStrings[key]?.ConnectionString;
                    if (value == null) {
                        return null;
                    }
                }
    
                // 如果在链接字符串内能找到Data Source或者Initial Catalog字眼就认为是正常的链接字符串,否则将调用服务以DbKey的方式获取到真正的链接字符串。
                if (value.IndexOf("Data Source", StringComparison.InvariantCultureIgnoreCase) > -1 || value.IndexOf("Initial Catalog", StringComparison.InvariantCultureIgnoreCase) > -1) {
                    return value;
                }
                else {
                    return null;
                }
            }
           
            #endregion
    
            #region 对数据库执行增删改操作  
            /// <summary>   
            /// 对数据库执行增删改操作,返回受影响的行数。   
            /// </summary>   
            /// <param name="sql">要执行的增删改的SQL语句</param>   
            /// <returns></returns>  
            public int ExecuteNonQuerySql(string sql) {
                return ExecuteNonQuery(sql, null, CommandType.Text);
            }
            /// <summary>   
            /// 对数据库执行增删改操作,返回受影响的行数。   
            /// </summary>   
            /// <param name="sql">要执行的增删改的SQL语句</param>   
            /// <param name="parameters">执行增删改语句所需要的参数</param>
            /// <returns></returns>  
            public  int ExecuteNonQuerySql(string sql, SqlParameter[] parameters) {
                return ExecuteNonQuery(sql, parameters, CommandType.Text);
            }
            /// <summary>   
            /// 对数据库执行增删改操作,返回受影响的行数。   
            /// </summary>   
            /// <param name="sql">要执行的存储过程</param>   
            /// <returns></returns>  
            public  int ExecuteNonQueryProc(string sql) {
                return ExecuteNonQuery(sql, null, CommandType.StoredProcedure);
            }
            /// <summary>   
            /// 对数据库执行增删改操作,返回受影响的行数。   
            /// </summary>   
            /// <param name="sql">要执行的存储过程</param>   
            /// <param name="parameters">执行增删改语句所需要的参数</param>
            /// <returns></returns>  
            public  int ExecuteNonQueryProc(string sql, SqlParameter[] parameters) {
                return ExecuteNonQuery(sql, parameters, CommandType.StoredProcedure);
            }
            #endregion
    
            #region 查询
    
            /// <summary>   
            /// 执行一个查询语句,返回一个包含查询结果的DataTable   
            /// </summary>   
            /// <param name="sql">要执行的查询语句</param>   
            /// <returns></returns>
            public  DataTable ExecuteDataTableSql(string sql) {
                return ExecuteDataTableSql(sql, null);
            }
            /// <summary>   
            /// 执行一个查询语句,返回一个包含查询结果的DataTable   
            /// </summary>   
            /// <param name="sql">要执行的查询语句</param>   
            /// <param name="parameters">执行SQL查询语句所需要的参数</param>
            /// <returns></returns>
            public  DataTable ExecuteDataTableSql(string sql, SqlParameter[] parameters) {
                return ExecuteDataTable(sql, parameters, CommandType.Text, null);
            }
            /// <summary>   
            /// 执行一个查询语句,返回一个包含查询结果的DataTable   
            /// </summary>   
            /// <param name="sql">要执行的存储过程</param>   
            /// <returns></returns>
            public  DataTable ExecuteDataTableProc(string sql) {
                return ExecuteDataTableProc(sql, null);
            }
            /// <summary>   
            /// 执行一个查询语句,返回一个包含查询结果的DataTable   
            /// </summary>   
            /// <param name="sql">要执行的存储过程</param>   
            /// <param name="parameters">执行SQL查询语句所需要的参数</param>
            /// <returns></returns>
            public  DataTable ExecuteDataTableProc(string sql, SqlParameter[] parameters) {
                return ExecuteDataTable(sql, parameters, CommandType.StoredProcedure, null);
            }
    
            /// <summary>   
            /// 执行一个查询语句,返回表列名和类型
            /// </summary>   
            /// <param name="sql">要执行的查询语句</param>   
            /// <returns></returns>
            public  DataTable ExecuteDataTableSchema(string sql) {
                return ExecuteDataTableSchema(sql, null);
            }
            /// <summary>   
            /// 执行一个查询语句,返回表列名和类型
            /// </summary>   
            /// <param name="sql">要执行的查询语句</param>   
            /// <param name="parameters">执行SQL查询语句所需要的参数</param>
            /// <returns></returns>
            public  DataTable ExecuteDataTableSchema(string sql, SqlParameter[] parameters) {
                return ExecuteDataTable(sql, parameters, CommandType.Text, SchemaType.Mapped);
            }
            #endregion
    
            #region ExecuteScalar
    
            /// <summary>
            /// 判断表是否存在
            /// </summary>
            /// <param name="tableName"></param>
            /// <returns></returns>
            public bool IsTabExists(string tableName) {
                string strsql = "select count(*) from sysobjects where id = object_id(N'[" + tableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
                object obj = ExecuteScalar(strsql);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) {
                    cmdresult = 0;
                }
                else {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0) {
                    return false;
                }
                return true;
            }
    
            /// <summary>
            /// 判断是否存在某表的某个字段
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="columnName">列名称</param>
            /// <returns>是否存在</returns>
            public  bool IsColumnExists(string tableName, string columnName) {
                string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
                object res = ExecuteScalar(sql);
                if (res == null) {
                    return false;
                }
                return Convert.ToInt32(res) > 0;
            }
    
            /// <summary>
            /// 校验某个字段值是否存在
            /// </summary>
            /// <param name="strSql"></param>
            /// <returns></returns>
            public  bool IsValueExists(string strSql) {
                object obj = ExecuteScalar(strSql);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) {
                    cmdresult = 0;
                }
                else {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0) {
                    return false;
                }
                return true;
            }
    
            /// <summary>
            /// 获取字段最大值
            /// </summary>
            /// <param name="fieldName"></param>
            /// <param name="tableName"></param>
            /// <returns></returns>
            public  int GetMaxId(string fieldName, string tableName) {
                string sql = "select max(" + fieldName + ")+1 from " + tableName;
                object obj = ExecuteScalar(sql);
                if (obj == null) {
                    return 1;
                }
                return int.Parse(obj.ToString());
            }
    
            #endregion
    
    
            /// <summary>
            /// 对数据库执行增删改操作
            /// </summary>
            /// <param name="strSql"></param>
            /// <param name="param"></param>
            /// <param name="commandType"></param>
            /// <returns></returns>
            public  int ExecuteNonQuery(string strSql, SqlParameter[] param, CommandType commandType) {
                int affectedRows = 0;
                //执行数据库操作
                using (var command = new SqlCommand()) {
                    //数据库连接
                    command.Connection = new SqlConnection(_connectionString);
                    try {
                        //打开连接
                        command.Connection.Open();
                        //执行类型
                        command.CommandType = commandType;
                        //数据库语句
                        command.CommandText = strSql;
                        //执行参数
                        if (param != null) command.Parameters.AddRange(param);
                        //数据库执行
                        affectedRows = command.ExecuteNonQuery();
                    }
                    catch (Exception ex) {
                        throw new Exception("数据库执行:" + ex);
                    }
                    finally {
                        //关闭连接
                        command.Connection.Close();
                        command.Connection.Dispose();
                        command.Parameters.Clear();
                    }
                }
                return affectedRows;
            }
    
            /// <summary>   
            /// 执行一个查询语句,返回一个包含查询结果的DataTable   
            /// </summary>   
            /// <param name="sql">要执行的查询语句</param>   
            /// <param name="parameters">执行SQL查询语句所需要的参数</param>
            /// <param name="commandType">执行的SQL语句的类型</param>
            /// <param name="schemaType">是否映射表结构</param>
            /// <returns></returns>
            public  DataTable ExecuteDataTable(string sql, SqlParameter[] parameters, CommandType commandType, SchemaType? schemaType) {
                //返回数据
                DataTable data = new DataTable();
    
                //判断是否有SQL语句
                if (string.IsNullOrEmpty(sql)) throw new Exception("SQL语句为空");
    
                //执行数据库操作
                using (var command = new SqlCommand()) {
                    //数据库连接
                    command.Connection = new SqlConnection(_connectionString);
                    try {
                        //打开连接
                        command.Connection.Open();
                        //执行类型
                        command.CommandType = commandType;
                        //数据库语句
                        command.CommandText = sql;
                        //执行参数
                        if (parameters != null) command.Parameters.AddRange(parameters);
                        using (DbDataAdapter adapter = new SqlDataAdapter(command)) {
                            //是否映射表结构
                            if (schemaType.HasValue) {
                                adapter.FillSchema(data, schemaType.Value);
                            }
                            else {
                                adapter.Fill(data);
                            }
                            data.AcceptChanges();
                        }
                    }
                    catch (Exception ex) {
                        throw new Exception("数据库执行:" + ex);
                    }
                    finally {
                        //关闭连接
                        command.Connection.Close();
                        command.Connection.Dispose();
                        command.Parameters.Clear();
                    }
                }
    
                return data;
            }
    
            /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="sqlStrList">多条SQL语句</param>        
            public  void ExecuteSqlTran(List<string> sqlStrList) {
                using (SqlConnection conn = new SqlConnection(_connectionString)) {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand {Connection = conn};
                    SqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    try {
                        for (int n = 0; n < sqlStrList.Count; n++) {
                            string strsql = sqlStrList[n];
                            if (strsql.Trim().Length > 1) {
                                cmd.CommandText = strsql;
                                cmd.ExecuteNonQuery();
                            }
                        }
                        tx.Commit();
                    }
                    catch (SqlException E) {
                        tx.Rollback();
                        throw new Exception(E.Message);
                    }
                    finally {
                        cmd.Dispose();
                        conn.Close();
                    }
                }
            }
    
            /// <summary>
            /// 执行分页存储过程
            ///         DataTable dt = Helper.HelperExecuteSql.GetListRunProcedure(AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex, strWhere, "caseInfo", "ID", "Up_CommonPage").Tables[0];
            /// </summary>
            /// <param name="pageSize"></param>
            /// <param name="pageIndex"></param>
            /// <param name="strWhere"></param>
            /// <param name="tableName"></param>
            /// <param name="keyName"></param>
            /// <param name="procedureName"></param>
            /// <returns></returns>
            public  DataSet GetListRunProcedure(int pageSize, int pageIndex, string strWhere, string tableName, string keyName, string procedureName) {
                SqlParameter[] parameters = {
                    new SqlParameter("@PageSize",SqlDbType.Int),
                    new SqlParameter("@CurrentIndex",SqlDbType.Int),
                    new SqlParameter("@StrWhere",SqlDbType.NVarChar,300),
                    new SqlParameter("@TableName",SqlDbType.NVarChar,50),
                    new SqlParameter("@KeyName",SqlDbType.NVarChar,50)      //主键
                };
                parameters[0].Value = pageSize;
                parameters[1].Value = pageIndex;
                parameters[2].Value = strWhere;
                parameters[3].Value = tableName;
                parameters[4].Value = keyName;
                return RunProcedure(procedureName, parameters, tableName);
            }
    
            #region Up_CommonPage存储过程
            /*        
    CREATE PROCEDURE [dbo].[Up_CommonPage] 
    (
    @PageSize INT,
    @CurrentIndex INT,
    @StrWhere NVARCHAR(300),   --有条件,直接写条件,没有条件要写1=1,有order by 也写在里面
    @TableName NVARCHAR(50),
    @KeyName NVARCHAR(50)
    )
    AS
     DECLARE @StrSql NVARCHAR(800)
     IF(@CurrentIndex=1)  --如果是第一页
        BEGIN
             SET @StrSql=N'select top '+CONVERT(NVARCHAR(10),@PageSize)+' * from '+@TableName+' where '+@StrWhere
        END
      ELSE
         BEGIN
            SET @StrSql=N'select top '+CONVERT(NVARCHAR(10),@PageSize)+' * from '+@TableName+' where '+@KeyName+' not in (select top '+CONVERT(NVARCHAR(10),@PageSize*(@CurrentIndex-1))+' '+@KeyName+' from '+@TableName+' where '+@StrWhere+') and '+@StrWhere
         END      
      EXECUTE (@StrSql)
    GO
          */
    
            #endregion
    
    
            public  DataSet RunProcedure(string storedProcName, SqlParameter[] parameters, string tableName) {
                return ExecuteDataSet(storedProcName, parameters, CommandType.StoredProcedure, tableName);
            }
    
            /// <summary>
            /// 获取dataset DataTable dt = ExecuteDataSet(sql).Tables[0];
            /// </summary>
            /// <param name="strSql"></param>
            /// <param name="parameters"></param>
            /// <returns></returns>
            public  DataSet ExecuteDataSet(string strSql, params SqlParameter[] parameters)
            {
                return ExecuteDataSet(strSql, parameters, CommandType.Text, "ds");
            }
    
            /// <summary>
            /// 查询sql结果或存储dataset
            /// </summary>
            /// <param name="strSql"></param>
            /// <param name="parameters"></param>
            /// <param name="commandType"></param>
            /// <param name="tableName">DataSet结果中的表名</param>
            /// <returns></returns>
            public  DataSet ExecuteDataSet(string strSql, SqlParameter[] parameters, CommandType commandType, string tableName) {
                //执行数据库操作
                using (var command = new SqlCommand()) {
                    //数据库连接
                    command.Connection = new SqlConnection(_connectionString);
                    try {
                        //打开连接
                        command.Connection.Open();
                        //执行类型
                        command.CommandType = commandType;
                        //数据库语句
                        command.CommandText = strSql;
                        //执行参数
                        if (parameters != null) command.Parameters.AddRange(parameters);
                        DbDataAdapter adapter = new SqlDataAdapter(command);
                        DataSet dataSet = new DataSet();
                        adapter.Fill(dataSet, tableName);
                        return dataSet;
                    }
                    catch (Exception ex) {
                        throw new Exception("数据库执行:" + ex);
                    }
                    finally {
                        //关闭连接
                        command.Connection.Close();
                        command.Connection.Dispose();
                        command.Parameters.Clear();
                    }
                }
            }
    
    
    
            /// <summary>
            /// 执行一条计算查询结果语句,
            /// </summary>
            /// <param name="sql"></param>
            /// <returns>返回查询结果,如查询条数</returns>
            public  object ExecuteScalar(string sql) {
                using (SqlConnection conn = new SqlConnection(_connectionString)) {
                    using (SqlCommand cmd = new SqlCommand(sql, conn)) {
                        try {
                            //打开连接
                            if (conn.State == System.Data.ConnectionState.Closed) {
                                conn.Open();
                            }
                            object obj = cmd.ExecuteScalar();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) {
                                return null;
                            }
                            else {
                                return obj;
                            }
                        }
                        catch (Exception ex) {
                            throw new Exception("数据库执行:" + ex);
                        }
                        finally {
                            //关闭连接
                            cmd.Connection.Close();
                            cmd.Connection.Dispose();
                        }
                    }
                }
            }
    
            /// <summary>
            /// 返回单个值的泛型版本
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="sql"></param>
            /// <param name="parameters"></param>
            /// <returns></returns>
            public  T ExcuteScalar<T>(string sql, params SqlParameter[] parameters) {
                using (SqlConnection conn = new SqlConnection(_connectionString)) {
                    using (SqlCommand cmd = new SqlCommand(sql, conn)) {
                        try {
                            //打开连接
                            if (conn.State == System.Data.ConnectionState.Closed) {
                                conn.Open();
                            }
                            if (parameters != null) cmd.Parameters.AddRange(parameters);
                            object obj = cmd.ExecuteScalar();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) {
                                return default(T);
                            }
                            else {
                                return (T)obj;
                            }
                        }
                        catch (Exception ex) {
                            throw new Exception("数据库执行:" + ex);
                        }
                        finally {
                            //关闭连接
                            cmd.Connection.Close();
                            cmd.Connection.Dispose();
                        }
                    }
                }
            }
    
            /// <summary>
            /// datatable批量写入
            /// </summary>
            /// <param name="dataTable"></param>
            /// <param name="strTableName"></param>
            /// <param name="batchSize"></param>
            public  void SqlBulkCopy2Db(DataTable dataTable, string strTableName) {
                using (IDbConnection dbConnection = new SqlConnection(_connectionString)) {
                    if (dbConnection.State != ConnectionState.Open) {
                        dbConnection.Open();
                    }
                    using (var transaction = dbConnection.BeginTransaction()) {
    
                        try {
                            using (SqlBulkCopy bulkCopy = new SqlBulkCopy((SqlConnection)dbConnection,
                                SqlBulkCopyOptions.Default,
                                (SqlTransaction)transaction)) {
                                bulkCopy.DestinationTableName = strTableName;
                                //bulkCopy.BatchSize = batchSize;
                                //for (int i = 0; i < dataTable.Columns.Count; i++) {
                                //    bulkCopy.ColumnMappings.Add(i, i);
                                //}
                                bulkCopy.WriteToServer(dataTable);
                            }
                            transaction.Commit();
                        }
                        catch (Exception exception) {
                            transaction.Rollback();
    
                            throw new Exception($"{strTableName}持久化异常", exception);
                        }
                    }
                }
            }
    
    
            /// <summary>
            /// SqlDataReader转换成DataTable
            /// </summary>
            /// <param name="dataReader"></param>
            /// <returns></returns>
            public  DataTable GetNewDataTable(SqlDataReader dataReader) {
                DataTable datatable = new DataTable();
                DataTable schemaTable = dataReader.GetSchemaTable();
    
                //动态添加列
                try {
                    foreach (DataRow myRow in schemaTable.Rows) {
                        DataColumn myDataColumn = new DataColumn();
                        myDataColumn.DataType = myRow.GetType();
                        myDataColumn.ColumnName = myRow[0].ToString();
                        datatable.Columns.Add(myDataColumn);
                    }
                    //添加数据
                    while (dataReader.Read()) {
                        DataRow myDataRow = datatable.NewRow();
                        for (int i = 0; i < schemaTable.Rows.Count; i++) {
                            myDataRow[i] = dataReader[i].ToString();
                        }
                        datatable.Rows.Add(myDataRow);
                    }
                    dataReader.Close();
                    return datatable;
                }
                catch (Exception ex) {
                    throw new Exception("转换出错出错!", ex);
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="paramName"></param>
            /// <param name="dbType">SqlDbType.Int etc</param>
            /// <param name="size"></param>
            /// <param name="value"></param>
            /// <returns></returns>
            public static SqlParameter MakeInParam(string paramName, SqlDbType dbType, int size, object value) {
                return MakeParam(paramName, dbType, size, ParameterDirection.Input, value);
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="paramName"></param>
            /// <param name="dbType"></param>
            /// <param name="size"></param>
            /// <returns></returns>
            public static SqlParameter MakeOutParam(string paramName, SqlDbType dbType, int size) {
                return MakeParam(paramName, dbType, size, ParameterDirection.Output, null);
            }
    
            public static SqlParameter MakeParam(string paramName, SqlDbType dbType, int size, ParameterDirection direction, object value) {
                SqlParameter parameter;
                if ((size > 0) && (size != 0x10)) {
                    parameter = new SqlParameter(paramName, dbType, size);
                }
                else {
                    parameter = new SqlParameter(paramName, dbType);
                }
                parameter.Direction = direction;
                if ((direction != ParameterDirection.Output) || (value != null)) {
                    parameter.Value = value;
                }
                return parameter;
            }
        }
    }
  • 相关阅读:
    ajax traditional
    阿里云OSS NET SDK 引用示范程序
    js对象的两种写法
    BZOJ NOIP提高组十连测第一场
    ikbc 时光机 F87 Ctrl 失灵 解决办法
    【读书笔记】阅读的危险
    51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
    【算法】求逆元模板
    【复习资料】软件工程之快速原型模型
    VirtualBox安装linux mint教程
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/6710978.html
Copyright © 2020-2023  润新知