using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Text; 
 | 
using System.Data.SqlClient; 
 | 
using System.Data; 
 | 
using System.Windows.Forms; 
 | 
  
 | 
namespace Pub_Class 
 | 
{ 
 | 
    public class ClsSqlHelper : IDisposable 
 | 
    { 
 | 
        private SqlConnection MainCn;//创建连接对象 
 | 
        public string strCon; 
 | 
        SqlTransaction MainTran; 
 | 
        public string sServer; 
 | 
        public string sDataBase; 
 | 
        public string sUser; 
 | 
        public string sPassword; 
 | 
        //public string sTextBox = "HXErp_Test.ini"; 
 | 
        public string sTextBox = "HXErp.ini"; 
 | 
        //开始事务 
 | 
        public void BeginTran() 
 | 
        { 
 | 
            if (!this.CnOpen()) 
 | 
                return; 
 | 
            MainTran = MainCn.BeginTransaction(); 
 | 
        } 
 | 
        //结束事务 
 | 
        public void Commit() 
 | 
        { 
 | 
            MainTran.Commit(); 
 | 
            CnClose(); 
 | 
        } 
 | 
        //回滚事务 
 | 
        public void RollBack() 
 | 
        { 
 | 
            MainTran.Rollback(); 
 | 
            CnClose(); 
 | 
        } 
 | 
  
 | 
        public ClsSqlHelper() 
 | 
        { 
 | 
            if (ClsPub.isStrNull(ClsPub.AppPath) == "") 
 | 
            { 
 | 
                ClsPub.AppPath = System.Environment.CurrentDirectory; 
 | 
                //ClsPub.AppPath = @"C:\Windows\System32"; 
 | 
            } 
 | 
            sServer = ClsIni.ReadIni("Erp", "Server", ClsPub.AppPath + @"\" + sTextBox); 
 | 
            sDataBase = ClsIni.ReadIni("Erp", "DataBase", ClsPub.AppPath + @"\" + sTextBox); 
 | 
            sUser = ClsIni.ReadIni("Erp", "UserName", ClsPub.AppPath + @"\" + sTextBox); 
 | 
            sPassword = ClsIni.ReadIni("Erp", "PassWord", ClsPub.AppPath + @"\" + sTextBox); 
 | 
            // 
 | 
        } 
 | 
  
 | 
        public bool CheckOpen() 
 | 
        { 
 | 
            if (sServer == "" || sServer == "没有找到!") 
 | 
            { 
 | 
                throw new Exception("错误的服务器名!!" + System.Environment.CurrentDirectory); 
 | 
            } 
 | 
            if (sDataBase == "" || sDataBase == "没有找到!") 
 | 
            { 
 | 
                throw new Exception("错误的数据库名!!" + System.Environment.CurrentDirectory); 
 | 
            } 
 | 
            SqlConnection oCn = new SqlConnection("Data Source=" + sServer + ";DataBase=master;User ID=" + sUser + ";PWD=" + sPassword + ";max pool size=32767"); 
 | 
            try 
 | 
            { 
 | 
                oCn.Open(); 
 | 
                return true; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                //e.Message = e.Message + "," + sServer + "," + sDataBase;  
 | 
                //e. 
 | 
                //throw (e); 
 | 
                ClsPub.sErrInfo = e.Message + "," + sServer + "," + sDataBase; 
 | 
                throw new Exception(e.Message + "," + sServer + "," + sDataBase); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private bool CnOpen()//OPEN数据库连接 
 | 
        { 
 | 
            if (sServer == "" || sServer == "没有找到!") 
 | 
            { 
 | 
                throw new Exception("错误的服务器名!" + System.Environment.CurrentDirectory); 
 | 
            } 
 | 
            if (sDataBase == "" || sDataBase == "没有找到!") 
 | 
            { 
 | 
                throw new Exception("错误的数据库名!"); 
 | 
            } 
 | 
            if (MainCn == null) 
 | 
            { 
 | 
                MainCn = new SqlConnection("Data Source=" + sServer + ";DataBase=" + sDataBase + ";User ID=" + sUser + ";PWD=" + sPassword + ";max pool size=32767"); 
 | 
            } 
 | 
            if (MainCn.State == System.Data.ConnectionState.Closed) 
 | 
            { 
 | 
                try 
 | 
                { 
 | 
                    MainCn.Open(); 
 | 
                    return true; 
 | 
                } 
 | 
                catch (Exception e) 
 | 
                { 
 | 
                    ClsPub.sErrInfo = e.Message + "," + sServer + "," + sDataBase; 
 | 
                    throw new Exception(e.Message + "," + sServer + "," + sDataBase); 
 | 
                } 
 | 
            } 
 | 
            else 
 | 
                return true; 
 | 
        } 
 | 
  
 | 
        public void CnClose()//关闭数据库连接 
 | 
        { 
 | 
            if (MainCn != null) 
 | 
                MainCn.Close(); 
 | 
        } 
 | 
  
 | 
        public void CnDispose()//释放资源 
 | 
        { 
 | 
            if (MainCn != null) 
 | 
            { 
 | 
                MainCn.Dispose(); 
 | 
                MainCn = null; 
 | 
            } 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 转换参数 
 | 
        /// </summary> 
 | 
        /// <param name="ParamName">存储过程名称或命令文本</param> 
 | 
        /// <param name="DbType">参数类型</param></param> 
 | 
        /// <param name="Size">参数大小</param> 
 | 
        /// <param name="Value">参数值</param> 
 | 
        /// <returns>新的 parameter 对象</returns> 
 | 
        public 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> 
 | 
        /// <param name="Direction">参数方向</param> 
 | 
        /// <param name="Value">参数值</param> 
 | 
        /// <returns>新的 parameter 对象</returns> 
 | 
        private SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
 | 
        { 
 | 
            SqlParameter param; 
 | 
            if (Size > 0) 
 | 
                param = new SqlParameter(ParamName, DbType, Size); 
 | 
            else 
 | 
                param = new SqlParameter(ParamName, DbType); 
 | 
            param.Direction = Direction; 
 | 
            if (!(Direction == ParameterDirection.Output && Value == null)) 
 | 
                param.Value = Value; 
 | 
            return param; 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 执行SQL无返回值 
 | 
        /// </summary> 
 | 
        /// <param name="procName"></param> 
 | 
        /// <param name="sErrMessage"></param> 
 | 
        /// <returns></returns> 
 | 
        public void RunProc(string procName) 
 | 
        { 
 | 
            if (!this.CnOpen()) 
 | 
            { 
 | 
                return; 
 | 
                //sErrMessage = "连接数据库失败!"; 
 | 
            } 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = procName; 
 | 
                SqlCommand cmd = new SqlCommand(procName, MainCn); 
 | 
                cmd.CommandTimeout = 600; 
 | 
                cmd.Transaction = MainTran; 
 | 
                cmd.ExecuteNonQuery(); 
 | 
                return; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
  
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                throw (e); 
 | 
                //return; 
 | 
            } 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 执行 
 | 
        /// </summary> 
 | 
        /// <param name="procName"></param> 
 | 
        /// <param name="sErrMessage"></param> 
 | 
        /// <returns></returns> 
 | 
        public void RunProc(string procName, ref string sErr) 
 | 
        { 
 | 
            if (!this.CnOpen()) 
 | 
            { 
 | 
                sErr = "连接数据库失败!"; 
 | 
                return; 
 | 
  
 | 
            } 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = procName; 
 | 
                SqlCommand cmd = new SqlCommand(procName, MainCn); 
 | 
                cmd.CommandTimeout = 600; 
 | 
                cmd.Transaction = MainTran; 
 | 
                cmd.ExecuteNonQuery(); 
 | 
                return; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                sErr = e.Message; 
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                throw (e); 
 | 
                //return; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 递入参数执行SQL并返回DATASET 
 | 
        /// </summary> 
 | 
        /// <param name="procName">执行语句</param> 
 | 
        /// <param name="prams">参数</param> 
 | 
        /// <param name="tbName">表名</param> 
 | 
        /// <param name="sErrMessage">异常信息</param> 
 | 
        /// <returns></returns> 
 | 
        public DataSet RunProcReturn(string procName, SqlParameter[] prams, string tbName) 
 | 
        { 
 | 
            SqlDataAdapter dap = CreateDataAdaper(procName, prams); 
 | 
            if (dap == null) 
 | 
                return null; 
 | 
            DataSet ds = new DataSet(); 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = procName; 
 | 
                dap.Fill(ds, tbName); 
 | 
                return ds; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                throw (e); 
 | 
                return null; 
 | 
            } 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 执行SQL并返回DATASET 
 | 
        /// </summary> 
 | 
        /// <param name="procName">执行语句</param> 
 | 
        /// <param name="tbName">表名</param> 
 | 
        /// <param name="sErrMessage">异常信息</param> 
 | 
        /// <returns></returns> 
 | 
        public DataSet RunProcReturn(string procName, string tbName) 
 | 
        { 
 | 
            SqlDataAdapter dap = CreateDataAdaper(procName, null); 
 | 
            DataSet ds = new DataSet(); 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = procName; 
 | 
                dap.Fill(ds, tbName); 
 | 
                return ds; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                throw (e); 
 | 
                return null; 
 | 
            } 
 | 
        } 
 | 
        /// <summary> 
 | 
        /// 执行SQL并返回DATASET和错误信息 
 | 
        /// </summary> 
 | 
        /// <param name="procName">执行语句</param> 
 | 
        /// <param name="tbName">表名</param> 
 | 
        /// <param name="sErrMessage">异常信息</param> 
 | 
        /// <returns></returns> 
 | 
        public DataSet RunProcReturn(string procName, string tbName, ref string sErr) 
 | 
        { 
 | 
            SqlDataAdapter dap = CreateDataAdaper(procName, null); 
 | 
            DataSet ds = new DataSet(); 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = procName; 
 | 
                dap.Fill(ds, tbName); 
 | 
                return ds; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                sErr = e.Message; 
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                return null; 
 | 
            } 
 | 
        } 
 | 
        private SqlDataAdapter CreateDataAdaper(string procName, SqlParameter[] prams) 
 | 
        { 
 | 
            if (this.CnOpen()) 
 | 
            { 
 | 
                SqlDataAdapter dap = new SqlDataAdapter(procName, MainCn); 
 | 
                dap.SelectCommand.CommandType = CommandType.Text; 
 | 
                dap.SelectCommand.CommandTimeout = 600; 
 | 
                dap.SelectCommand.Transaction = MainTran; 
 | 
                if (prams != null) 
 | 
                { 
 | 
                    foreach (SqlParameter parameter in prams) 
 | 
                        dap.SelectCommand.Parameters.Add(parameter); 
 | 
                } 
 | 
                dap.SelectCommand.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, 
 | 
                    ParameterDirection.ReturnValue, false, 0, 0, 
 | 
                    string.Empty, DataRowVersion.Default, null)); 
 | 
                return dap; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                return null; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private SqlCommand CreateCommand(string procName, SqlParameter[] prams) 
 | 
        { 
 | 
            if (this.CnOpen()) 
 | 
            { 
 | 
                SqlCommand cmd = new SqlCommand(procName, MainCn); 
 | 
                cmd.CommandType = CommandType.Text; 
 | 
                cmd.CommandTimeout = 600; 
 | 
                cmd.Transaction = MainTran; 
 | 
                if (prams != null) 
 | 
                { 
 | 
                    foreach (SqlParameter parameter in prams) 
 | 
                        cmd.Parameters.Add(parameter); 
 | 
                } 
 | 
                cmd.Parameters.Add( 
 | 
                    new SqlParameter("ReturnValue", SqlDbType.Int, 4, 
 | 
                    ParameterDirection.ReturnValue, false, 0, 0, 
 | 
                    string.Empty, DataRowVersion.Default, null)); 
 | 
                return cmd; 
 | 
            } 
 | 
            else 
 | 
                return null; 
 | 
        } 
 | 
  
 | 
        public bool CreateCommand(string procName, byte[] FileList, ref string sErr) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                if (this.CnOpen()) 
 | 
                { 
 | 
                    SqlCommand cmd = new SqlCommand(procName, MainCn); 
 | 
                    cmd.CommandTimeout = 600; 
 | 
                    cmd.Parameters.AddWithValue("@FileList", FileList); 
 | 
                    cmd.ExecuteNonQuery(); 
 | 
                    return true; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    sErr = "连接失败!"; 
 | 
                    return false; 
 | 
                } 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                sErr = e.Message; 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
        } 
 | 
  
 | 
        public SqlDataReader RunReader(string sSQL, string tbName, ref string sErr) 
 | 
        { 
 | 
            if (!this.CnOpen()) 
 | 
            { 
 | 
                sErr = "连接数据库失败!"; 
 | 
                return null; 
 | 
            } 
 | 
            try 
 | 
            { 
 | 
                ClsPub.sSQLInfo = sSQL; 
 | 
                SqlCommand cmd = new SqlCommand(sSQL, MainCn); 
 | 
                cmd.CommandTimeout = 600; 
 | 
                //cmd.Transaction = MainTran; 
 | 
                return cmd.ExecuteReader(); 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                ClsPub.sErrInfo = e.Message; 
 | 
                sErr = e.Message; 
 | 
                return null; 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 批量插入数据库 
 | 
        /// </summary> 
 | 
        /// <param name="TableName">目标表</param> 
 | 
        /// <param name="dt">源数据</param> 
 | 
        public bool SqlBulkCopyByDatatable(string TableName, DataTable dt) 
 | 
        { 
 | 
            string connectionString = $"Data Source={sServer};DataBase={sDataBase};User ID={sUser};PWD={sPassword}"; 
 | 
            using (SqlConnection conn = new SqlConnection(connectionString)) 
 | 
            { 
 | 
                using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) 
 | 
                { 
 | 
                    try 
 | 
                    { 
 | 
                        sqlbulkcopy.DestinationTableName = TableName; 
 | 
                        for (int i = 0; i < dt.Columns.Count; i++) 
 | 
                        { 
 | 
                            sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 
 | 
                        } 
 | 
                        sqlbulkcopy.WriteToServer(dt); 
 | 
                        return true; 
 | 
                    } 
 | 
                    catch (System.Exception ex) 
 | 
                    { 
 | 
                        //ex.Message; 
 | 
                        return false; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        #region IDisposable 成员 
 | 
  
 | 
        public void Dispose() 
 | 
        { 
 | 
            throw new Exception("The method or operation is not implemented."); 
 | 
        } 
 | 
  
 | 
        #endregion 
 | 
    } 
 | 
} 
 |