SQLHELPER

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Security.Cryptography;
using System.Linq;
using WHC.Framework.Commons;
using System.Xml;


namespace DX.method
{
    public class SQLHelper
    {
        //getSqlConnection a = new getSqlConnection();
        //static string strConn = a.G_Str_ConnectionString;
        //连接字符串
        //ConfigurationManager;
        public static string strConn = GetConnectionString("sqlserver");
        
        //static string strConn = "Data Source=132.147.128.82,23332;database=WinFramework;uid=sa;pwd=manager";


        /// <summary>
        ///  执行SQL语句,返回受影响的行数(用于insert,delete,update等)
        /// </summary>
        /// <param name="strSQL">SQL语句</param>
        /// <returns>受影响的行数</returns>
        /// <summary>
        /// 读取程序的config文件Enterprise Library的数据库链接地址
        /// </summary>
        /// <param name="keyName">键名</param>
        /// <returns></returns>
        public static string GetConnectionString(string keyName)
        {
            string strReturn = string.Empty;
            try
            {
                XmlDocument document = new XmlDocument();
                document.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.Replace(".vshost", ""));


                XmlNodeList nodes = document.GetElementsByTagName("add");
                for (int i = 0; i < nodes.Count; i++)
                {
                    //获得将当前元素的key属性
                    XmlAttribute att = nodes[i].Attributes["name"];
                    //根据元素的第一个属性来判断当前的元素是不是目标元素
                    if (att != null && (att.Value == keyName))
                    {
                        att = nodes[i].Attributes["connectionString"];
                        if (att != null)
                        {
                            strReturn = att.Value;
                            break;
                        }
                    }
                }
            }
            catch
            {; }


            return strReturn;
        }
        public static int ExecuteSql(string strSQL)
        {
            //using: 释放资源
            //SqlConnection: 连接数据源
            //connectionString:用于连接数据源的字符串
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                //SqlCommand对数据源执行SQl命令
                //SqlCommand(CommandText, CommandString):strSQL需执行的SQL命令字符串,conn指定执行SQL命令需连接的数据源
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        int rows = cmd.ExecuteNonQuery();//执行SQL语句,返回受影响的行数。如rows>0,说明执行成功
                        return rows;
                    }
                    catch (System.Data.SqlClient.SqlException e)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw e;
                    }
                }
            }
        }


        /// <summary>
        /// 执行带参数的非查询SQL
        /// </summary>
        /// <param name="strSQL">SQL语句</param>
        /// <param name="values">参数</param>
        /// <returns>受影响行数</returns>
        public static int ExecuteCommand(string strSQL, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        cmd.Parameters.AddRange(values);
                        int rows = cmd.ExecuteNonQuery();//执行SQL语句,返回受影响的行数。如rows>0,说明执行成功
                        return rows;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw new Exception(string.Format("执行{0}失败:{1}", strSQL, ex.Message));
                    }
                }
            }
        }


        /// <summary>
        ///  执行查询SQL语句,返回SqlDataReader(只进记录集) ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>SqlDataReader</returns>
        public static SqlDataReader ExecuteReader(string strSQL)
        {
            SqlConnection conn = new SqlConnection(strConn);
            {
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        //CommandBehavior.CloseConnection 能够保证当SqlDataReader对象被关闭时,其依赖的连接也会被自动关闭。
                        SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);


                        return myReader;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw new Exception(string.Format("执行{0}失败:{1}", strSQL, ex.Message));
                    }
                }
            }


        }


        /// <summary>
        ///  执行带参数的查询SQL语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <param name="values">参数</param>
        /// <returns>SqlDataReader</returns>
        public static SqlDataReader ExecuteReader(string strSQL, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        //CommandBehavior.CloseConnection 能够保证当SqlDataReader对象被关闭时,其依赖的连接也会被自动关闭。
                        cmd.Parameters.AddRange(values);
                        SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        return myReader;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw new Exception(string.Format("执行{0}失败:{1}", strSQL, ex.Message));
                    }
                }
            }
        }




        ///DataReader和DataSet的区别
        ///1.获取数据的方式:
        ///    DataReader(在线-一直占用SqlConnection连接,其它操作就可以不可使用,占用内存较小)
        ///    DataSet(离线-将数据一次性读入内存,然后断开连接,其它操作就可以使用,比较消耗资源)
        ///2.获取数据的机制
        ///    DataReader是通过IDbCommand.ExecuteReader来读取数据。
        ///    DataSet则是通过DbDataAdapter.Fill来填充数据
        ///3.其它区别
        ///    DataReader读取速度快于DataSet。
        ///    DataReader是数据提供者类,DataSet是一般性类,借助于DbDataAdapter来填充数据。
        ///...............................等




        /// <summary>
        ///  执行查询SQL语句,返回离线记录集
        /// </summary>
        /// <param name="strSQL">SQL语句</param>
        /// <returns>离线记录DataSet</returns>
        public DataSet getDataTablebySQL(string strSQL)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        DataSet ds = new DataSet();
                        SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);
                        myAdapter.Fill(ds);
                        return ds;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw new Exception(string.Format("执行{0}失败:{1}", strSQL, ex.Message));
                    }
                }
            }
        }


        /// <summary>
        ///  执行带参数的查询SQL,返回离线记录集
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        public DataSet getDataTablebySQL(string strSQL, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand cmd = new SqlCommand(strSQL, conn))
                {
                    try
                    {
                        conn.Open();//打开数据源连接
                        DataSet ds = new DataSet();
                        cmd.Parameters.AddRange(values);
                        SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);
                        myAdapter.Fill(ds);
                        return ds;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        conn.Close();//出异常,关闭数据源连接
                        throw new Exception(string.Format("执行{0}失败:{1}", strSQL, ex.Message));
                    }
                }
            }
        }










        #region 执行查询,返回DataTable对象-----------------------






        public static DataTable GetTable(string strSQL)
        {
            return GetTable(strSQL, null);
        }
        public static DataTable GetTable(string strSQL, SqlParameter[] pas)
        {
            return GetTable(strSQL, pas, CommandType.Text);
        }
        /// <summary>
        /// 执行查询,返回DataTable对象
        /// </summary>
        /// <param name="strSQL">sql语句</param>
        /// <param name="pas">参数数组</param>
        /// <param name="cmdtype">Command类型</param>
        /// <returns>DataTable对象</returns>
        public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype)
        {
            DataTable dt = new DataTable(); ;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
                da.SelectCommand.CommandType = cmdtype;
                if (pas != null)
                {
                    da.SelectCommand.Parameters.AddRange(pas);
                }
                da.Fill(dt);
            }
            return dt;
        }






        #endregion








        #region 执行查询,返回DataSet对象-------------------------








        public static DataSet GetDataSet(string strSQL)
        {
            return GetDataSet(strSQL, null);
        }


        public static DataSet GetDataSet(string strSQL, SqlParameter[] pas)
        {
            return GetDataSet(strSQL, pas, CommandType.Text);
        }
        /// <summary>
        /// 执行查询,返回DataSet对象
        /// </summary>
        /// <param name="strSQL">sql语句</param>
        /// <param name="pas">参数数组</param>
        /// <param name="cmdtype">Command类型</param>
        /// <returns>DataSet对象</returns>
        public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype)
        {
            DataSet dt = new DataSet(); ;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
                da.SelectCommand.CommandType = cmdtype;
                if (pas != null)
                {
                    da.SelectCommand.Parameters.AddRange(pas);
                }
                da.Fill(dt);
            }
            return dt;
        }
        #endregion










        #region 执行非查询存储过程和SQL语句-----------------------------








        public static int ExcuteProc(string ProcName)
        {
            return ExcuteSQL(ProcName, null, CommandType.StoredProcedure);
        }


        public static int ExcuteProc(string ProcName, SqlParameter[] pars)
        {
            return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure);
        }


        public static int ExcuteSQL(string strSQL)
        {
            return ExcuteSQL(strSQL, null);
        }


        public static int ExcuteSQL(string strSQL, SqlParameter[] paras)
        {
            return ExcuteSQL(strSQL, paras, CommandType.Text);
        }


        /// 执行非查询存储过程和SQL语句
        /// 增、删、改
        /// </summary>
        /// <param name="strSQL">要执行的SQL语句</param>
        /// <param name="paras">参数列表,没有参数填入null</param>
        /// <param name="cmdType">Command类型</param>
        /// <returns>返回影响行数</returns>
        public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType)
        {
            int i = 0;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                cmd.CommandType = cmdType;
                if (paras != null)
                {
                    cmd.Parameters.AddRange(paras);
                }
                conn.Open();
                i = cmd.ExecuteNonQuery();
                conn.Close();
            }
            return i;


        }




        #endregion
















        #region 执行查询返回第一行,第一列---------------------------------








        public static int ExcuteScalarSQL(string strSQL)
        {
            return ExcuteScalarSQL(strSQL, null);
        }


        public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras)
        {
            return ExcuteScalarSQL(strSQL, paras, CommandType.Text);
        }
        public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras)
        {
            return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure);
        }
        /// <summary>
        /// 执行SQL语句,返回第一行,第一列
        /// </summary>
        /// <param name="strSQL">要执行的SQL语句</param>
        /// <param name="paras">参数列表,没有参数填入null</param>
        /// <returns>返回影响行数</returns>
        public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType)
        {
            int i = 0;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                cmd.CommandType = cmdType;
                if (paras != null)
                {
                    cmd.Parameters.AddRange(paras);
                }
                conn.Open();
                i = Convert.ToInt32(cmd.ExecuteScalar());
                conn.Close();
            }
            return i;


        }




        #endregion


















        #region 查询获取单个值------------------------------------








        /// <summary>
        /// 调用不带参数的存储过程获取单个值
        /// </summary>
        /// <param name="ProcName"></param>
        /// <returns></returns>
        public static object GetObjectByProc(string ProcName)
        {
            return GetObjectByProc(ProcName, null);
        }
        /// <summary>
        /// 调用带参数的存储过程获取单个值
        /// </summary>
        /// <param name="ProcName"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static object GetObjectByProc(string ProcName, SqlParameter[] paras)
        {
            return GetObject(ProcName, paras, CommandType.StoredProcedure);
        }
        /// <summary>
        /// 根据sql语句获取单个值
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        public static object GetObject(string strSQL)
        {
            return GetObject(strSQL, null);
        }
        /// <summary>
        /// 根据sql语句 和 参数数组获取单个值
        /// </summary>
        /// <param name="strSQL"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static object GetObject(string strSQL, SqlParameter[] paras)
        {
            return GetObject(strSQL, paras, CommandType.Text);
        }


        /// <summary>
        /// 执行SQL语句,返回首行首列
        /// </summary>
        /// <param name="strSQL">要执行的SQL语句</param>
        /// <param name="paras">参数列表,没有参数填入null</param>
        /// <returns>返回的首行首列</returns>
        public static object GetObject(string strSQL, SqlParameter[] paras, CommandType cmdtype)
        {
            object o = null;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                cmd.CommandType = cmdtype;
                if (paras != null)
                {
                    cmd.Parameters.AddRange(paras);


                }


                conn.Open();
                o = cmd.ExecuteScalar();
                conn.Close();
            }
            return o;


        }






        #endregion




        /// <summary>
        /// md5加密
        /// </summary>
        /// <param name="strPwd"></param>
        /// <returns></returns>
        public static string GetMD5(string strPwd)
        {
            string pwd = "";
            //实例化一个md5对象
            MD5 md5 = MD5.Create();
            // 加密后是一个字节类型的数组
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd));
            //翻转生成的MD5码        
            s.Reverse();
            //通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            //只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位
            for (int i = 3; i < s.Length - 1; i++)
            {
                //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
                //进一步对生成的MD5码做一些改造
                pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString("X");
            }
            return pwd;
        }




        #region 查询获取DataReader------------------------------------








        /// <summary>
        /// 调用不带参数的存储过程,返回DataReader对象
        /// </summary>
        /// <param name="procName">存储过程名称</param>
        /// <returns>DataReader对象</returns>
        public static SqlDataReader GetReaderByProc(string procName)
        {
            return GetReaderByProc(procName, null);
        }
        /// <summary>
        /// 调用带有参数的存储过程,返回DataReader对象
        /// </summary>
        /// <param name="procName">存储过程名</param>
        /// <param name="paras">参数数组</param>
        /// <returns>DataReader对象</returns>
        public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras)
        {
            return GetReader(procName, paras, CommandType.StoredProcedure);
        }
        /// <summary>
        /// 根据sql语句返回DataReader对象
        /// </summary>
        /// <param name="strSQL">sql语句</param>
        /// <returns>DataReader对象</returns>
        public static SqlDataReader GetReader(string strSQL)
        {
            return GetReader(strSQL, null);
        }
        /// <summary>
        /// 根据sql语句和参数返回DataReader对象
        /// </summary>
        /// <param name="strSQL">sql语句</param>
        /// <param name="paras">参数数组</param>
        /// <returns>DataReader对象</returns>
        public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras)
        {
            return GetReader(strSQL, paras, CommandType.Text);
        }
        /// <summary>
        /// 查询SQL语句获取DataReader
        /// </summary>
        /// <param name="strSQL">查询的SQL语句</param>
        /// <param name="paras">参数列表,没有参数填入null</param>
        /// <returns>查询到的DataReader(关闭该对象的时候,自动关闭连接)</returns>
        public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype)
        {
            SqlDataReader sqldr = null;
            SqlConnection conn = new SqlConnection(strConn);
            SqlCommand cmd = new SqlCommand(strSQL, conn);
            cmd.CommandType = cmdtype;
            if (paras != null)
            {
                cmd.Parameters.AddRange(paras);
            }
            conn.Open();
            //CommandBehavior.CloseConnection的作用是如果关联的DataReader对象关闭,则连接自动关闭
            sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return sqldr;
        }






        #endregion








        #region 批量插入数据---------------------------------------------








        /// <summary>
        /// 往数据库中批量插入数据
        /// </summary>
        /// <param name="sourceDt">数据源表</param>
        /// <param name="targetTable">服务器上目标表</param>
        public static void BulkToDB(DataTable sourceDt, string targetTable)
        {
            SqlConnection conn = new SqlConnection(strConn);
            SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);   //用其它源的数据有效批量加载sql server表中
            bulkCopy.DestinationTableName = targetTable;    //服务器上目标表的名称
            bulkCopy.BatchSize = sourceDt.Rows.Count;   //每一批次中的行数


            try
            {
                conn.Open();
                if (sourceDt != null && sourceDt.Rows.Count != 0)
                    bulkCopy.WriteToServer(sourceDt);   //将提供的数据源中的所有行复制到目标表中
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
                if (bulkCopy != null)
                    bulkCopy.Close();
            }


        }


        #endregion




    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值