using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EquipmentCollectionForm { public class DBHelper { private SqlConnection MainCn;//创建连接对象 SqlTransaction MainTran; public string sServer; public string sDataBase; public string sUser; public string sPassword; //开始事务 public void BeginTran() { if (!this.CnOpen()) return; MainTran = MainCn.BeginTransaction(); } //结束事务 public void Commit() { MainTran.Commit(); CnClose(); } //回滚事务 public void RollBack() { MainTran.Rollback(); CnClose(); } public DBHelper() { sServer = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sServer"); //"10.11.18.195"; sDataBase = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sDataBase"); //"HX_LMESsys_test"; sUser = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sUser"); //"HX_USER"; sPassword = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sPassword");// "lc@841022"; } public static String GetConfigKey(String configPath, String key) { Configuration ConfigurationInstance = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = configPath }, ConfigurationUserLevel.None); if (ConfigurationInstance.AppSettings.Settings[key] != null) return ConfigurationInstance.AppSettings.Settings[key].Value; else return string.Empty; } 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) { 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; } } /// /// 执行SQL无返回值 /// /// /// /// public void RunProc(string procName) { if (!this.CnOpen()) { return; //sErrMessage = "连接数据库失败!"; } try { SqlCommand cmd = new SqlCommand(procName, MainCn); cmd.CommandTimeout = 600; cmd.Transaction = MainTran; cmd.ExecuteNonQuery(); return; } catch (Exception e) { throw (e); //return; } } /// /// 执行 /// /// /// /// 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; } } /// /// 递入参数执行SQL并返回DATASET /// /// 执行语句 /// 参数 /// 表名 /// 异常信息 /// 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; } } /// /// 执行SQL并返回DATASET /// /// 执行语句 /// 表名 /// 异常信息 /// 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; } } /// /// 执行SQL并返回DATASET和错误信息 /// /// 执行语句 /// 表名 /// 异常信息 /// 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; } } public static Int64 isLong(object message) { try { return Convert.ToInt64(message); } catch (Exception e) { return 0; } } public static string isStrNull(object message) { try { if (message == null) { return ""; } else { return message.ToString().Trim(); } } catch (Exception e) { return ""; } } public static int isInt(object message) { try { return Convert.ToInt16(message); } catch (Exception e) { return 0; } } public Int64 CreateBillID_Prod(string BillCode, ref string sReturn) { try { string BillType = ""; DataSet Ds; Int64 lID; Ds = RunProcReturn("exec h_p_Xt_GetMaxBillID '" + BillCode + "'", "h_p_Xt_GetMaxBillID"); if (Ds == null || Ds.Tables[0].Rows.Count == 0) { lID = -1; } else { lID = DBHelper.isLong(Ds.Tables[0].Rows[0]["HBillNo"]); } CnClose(); CnDispose(); Ds = null; return lID; } catch (Exception e) { return -2; } } //得到最大单据号 public string CreateBillCode(string BillCode, ref string sReturn, bool Add) { Int64 BillCodeMode; string Profix; Int64 Glida; Int32 CodeLen; string sBillNo = ""; char c = Convert.ToChar("0"); string sKjYear = DateTime.Today.Year.ToString(); string sPeriod = DateTime.Today.Month.ToString(); string sDay = DateTime.Today.Day.ToString(); //得到单据号表 信息 DataSet Ds = new DataSet(); Ds = RunProcReturn("Select * from Gy_BillNumber where BillCode='" + BillCode.Trim() + "'", "Gy_BillNumber"); if (Ds.Tables[0].Rows.Count != 0) { BillCodeMode = DBHelper.isLong(Ds.Tables[0].Rows[0]["BillCodeMode"].ToString()); Profix = DBHelper.isStrNull(Ds.Tables[0].Rows[0]["Profix"].ToString()); Glida = DBHelper.isLong(Ds.Tables[0].Rows[0]["Glida"].ToString()); CodeLen = DBHelper.isInt(Ds.Tables[0].Rows[0]["CodeLen"].ToString()); } else { return ""; } // string sStr; switch (BillCodeMode) { case 0: switch (Glida) { case 0://纯流水号 Ds = RunProcReturn("Select * from Gy_MaxNum where BillCode='" + BillCode.Trim() + "'", "Gy_MaxNum"); if (Ds.Tables[0].Rows.Count != 0) { sStr = new string(c, CodeLen - (Ds.Tables[0].Rows[0]["NowNumBer"].ToString()).Length); sBillNo = Profix.Trim() + sStr + Ds.Tables[0].Rows[0]["NowNumBer"].ToString().Trim(); } else //插入新记录 { sStr = new string(c, CodeLen - 1); RunProc("insert into Gy_MaxNum(BillCode,NowNumber) values('" + BillCode.Trim() + "',1)"); sBillNo = Profix.Trim() + sStr + 1; } if (Add == true) { RunProc("update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" + BillCode.Trim() + "'"); } return sBillNo; case 1://根据 YY年+MM月 日 + 流水号 生成单据号 (日 采用了 仓库的字段) sKjYear = sKjYear.Substring(2, 2); sPeriod = "0" + sPeriod; sPeriod = sPeriod.Substring(sPeriod.Length - 2, 2); sDay = ""; Ds = RunProcReturn("Select * from Gy_MaxNum where BillCode='" + BillCode.Trim() + "' and KjYear='" + sKjYear + "' and Period='" + sPeriod + "' and whcode='" + sDay + "'", "Gy_MaxNum"); if (Ds.Tables[0].Rows.Count != 0) { sStr = new string(c, CodeLen - (Ds.Tables[0].Rows[0]["NowNumBer"].ToString()).Length); sBillNo = Profix.Trim() + sKjYear + sPeriod + sDay + sStr + Ds.Tables[0].Rows[0]["NowNumBer"].ToString().Trim(); } else //插入新记录 { sStr = new string(c, CodeLen - 1); RunProc("insert into Gy_Maxnum(BillCode,Kjyear,Period,whcode,NowNumber) values('" + BillCode.Trim() + "','" + sKjYear + "','" + sPeriod + "','" + sDay + "',1)"); sBillNo = Profix.Trim() + sKjYear + sPeriod + sDay + sStr + "1"; } if (Add == true) { RunProc("update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" + BillCode.Trim() + "' and KjYear='" + sKjYear + "' and Period='" + sPeriod + "' and whcode='" + sDay + "'"); } return sBillNo; case 2: //根据年+月+日 生成单据号 Ds = RunProcReturn("Select * from Gy_MaxNum where BillCode='" + BillCode.Trim() + "' and KjYear='" + sKjYear + "' and Period='" + sPeriod + "' and whcode='" + sDay + "'", "Gy_MaxNum"); if (Ds.Tables[0].Rows.Count != 0) { sStr = new string(c, CodeLen - (Ds.Tables[0].Rows[0]["NowNumBer"].ToString()).Length); sBillNo = Profix.Trim() + sKjYear + DBHelper.isStrNull(("0" + sPeriod)).Substring(DBHelper.isStrNull(("0" + sPeriod)).Length - 2, 2) + DBHelper.isStrNull(("0" + sDay)).Substring(DBHelper.isStrNull(("0" + sDay)).Length - 2, 2) + sStr + Ds.Tables[0].Rows[0]["NowNumBer"].ToString().Trim(); } else //插入新记录 { sStr = new string(c, CodeLen - 1); RunProc("insert into Gy_Maxnum(BillCode,Kjyear,Period,whcode,NowNumber) values('" + BillCode.Trim() + "','" + sKjYear + "','" + sPeriod + "','" + sDay + "',1)"); sBillNo = Profix.Trim() + sKjYear + DBHelper.isStrNull(("0" + sPeriod)).Substring(DBHelper.isStrNull(("0" + sPeriod)).Length - 2, 2) + DBHelper.isStrNull(("0" + sDay)).Substring(DBHelper.isStrNull(("0" + sDay)).Length - 2, 2) + sStr + 1; } if (Add == true) { RunProc("update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" + BillCode.Trim() + "' and KjYear='" + sKjYear + "' and Period='" + sPeriod + "' and whcode='" + sDay + "'"); } return sBillNo; default: return sBillNo; } case 1: return sBillNo; default: return sBillNo; } CnClose(); CnDispose(); } } }