using AutomaticApp.Common; using AutomaticApp.Models; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows.Markup; namespace AutomaticApp.DataAccess { public class DBHelper { //连接钥匙 private static readonly string ConnStr = ConfigurationManager.ConnectionStrings["db"].ConnectionString; private static readonly string ConnStr_Server = ConfigurationManager.ConnectionStrings["db_Sever"].ConnectionString; MySqlConnection conn = null; /// /// 增删改 /// /// 增删改 /// 1代表是查询过程 2 是代表存储过程 /// /// public static int ExecuteNonQuery(string sql, int cmdType, params MySqlParameter[] paras) { int count = 0; using (MySqlConnection conn = new MySqlConnection(ConnStr)) { MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); count = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); //清空数组集合 conn.Close(); } ////向服务器发送数据 //if (tools.TcpClientCheck(ConnStr_Server.Split(';')[0].Split('=')[1], 3306)) //{ // using (MySqlConnection conn = new MySqlConnection(ConnStr_Server)) // { // MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); // count = cmd.ExecuteNonQuery(); // cmd.Parameters.Clear(); //清空数组集合 // conn.Close(); // } //} return count; } /// /// 查询一个值 /// /// /// /// /// public static object ExecuteScalar(string sql, int cmdType, params MySqlParameter[] paras) { object o = 0; using (MySqlConnection conn = new MySqlConnection(ConnStr)) { MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); o = cmd.ExecuteScalar(); cmd.Parameters.Clear(); conn.Close(); } return o; } /// /// 查询多行值 /// /// /// /// /// /// public static MySqlDataReader ExecuteReader(string sql, int cmdType, params MySqlParameter[] paras) { MySqlDataReader dr = null; MySqlConnection conn = new MySqlConnection(ConnStr); MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); try { dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); } catch (MySqlException ex) { conn.Close(); throw new Exception("执行查询异常", ex); } return dr; } /// /// 填充DataSet /// /// /// /// /// public static DataSet GetDataSet(string sql, int cmdType, MySqlParameter[] paras) { DataSet ds = new DataSet(); using (MySqlConnection conn = new MySqlConnection(ConnStr)) { MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); MySqlDataAdapter da = new MySqlDataAdapter(cmd); //conn.Open(); da.Fill(ds); conn.Close(); } return ds; } /// /// 填充DataTable 一个结果集 /// /// /// /// /// public static DataTable GetDataTable(string sql, int cmdType, MySqlParameter[] paras) { DataTable dt = new DataTable(); using (MySqlConnection conn = new MySqlConnection(ConnStr)) { MySqlCommand cmd = BuildCommand(conn, sql, cmdType, null, paras); MySqlDataAdapter da = new MySqlDataAdapter(cmd); //conn.Open(); da.Fill(dt); conn.Close(); } return dt; } /// /// 事务 一系列的sql语句 针对增删该查 /// /// /// public static bool ExecuteTrans(List listSQL) { using (MySqlConnection conn = new MySqlConnection(ConnStr)) { conn.Open(); MySqlTransaction trans = conn.BeginTransaction(); //MySqlCommand cmd = conn.CreateCommand(); //cmd.Transaction = trans; MySqlCommand cmd = BuildCommand(conn, "", 1, trans); try { for (int i = 0; i < listSQL.Count; i++) { cmd.CommandText = listSQL[i]; cmd.ExecuteNonQuery(); } trans.Commit(); return true; } catch (MySqlException ex) { trans.Rollback();//回滚 throw new Exception("执行事务出现异常", ex); } finally { trans.Dispose(); cmd.Dispose(); conn.Close(); } } } /// /// 执行事务 每个操作分装到cmdInfo中 /// /// /// /// public static bool ExecuteTrans(List listCmd) { using (MySqlConnection conn = new MySqlConnection(ConnStr)) { conn.Open(); MySqlTransaction trans = conn.BeginTransaction(); //MySqlCommand cmd = conn.CreateCommand(); //cmd.Transaction = trans; MySqlCommand cmd = BuildCommand(conn, "", 1, trans); try { for (int i = 0; i < listCmd.Count; i++) { cmd.CommandText = listCmd[i].CommandText; if (listCmd.Count == 2) cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Clear(); //很重要 if (cmd.Parameters != null && cmd.Parameters.Count > 0) cmd.Parameters.AddRange(listCmd[i].Parameters); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); //很重要 } trans.Commit(); return true; } catch (MySqlException ex) { trans.Rollback();//回滚 throw new Exception("执行事务出现异常", ex); } finally { trans.Dispose(); cmd.Dispose(); conn.Close(); } } } /// /// 构造SqlCommand /// /// /// /// /// /// /// private static MySqlCommand BuildCommand(MySqlConnection conn, string sql, int cmdType, MySqlTransaction trans, params MySqlParameter[] paras) { MySqlCommand cmd = new MySqlCommand(sql, conn); if (cmdType == 2) cmd.CommandType = CommandType.StoredProcedure; //代表是存储过程 if (paras != null && paras.Length > 0) cmd.Parameters.AddRange(paras); if (conn.State == ConnectionState.Closed) conn.Open(); if (trans != null) cmd.Transaction = trans; return cmd; } /// /// 对数据库插入数据 /// /// 表名 /// 站点ID /// 数据记录时间 /// 需要插入的值的名称 /// 值 public static void insertData(string tablename, int stationId, DateTime RecordTime, string key, object value) { //首先判断数据库中是否有这一条数据 string sql = string.Format("select id from {0} where RecordTime = '{1}'", tablename, RecordTime); if (ExecuteScalar(sql, 1) == null) { string valuechange = typeof(string).Equals(value.GetType()) ? "'{5}'" : "{5}"; sql = string.Format("insert into {0}(StationID,RecordTime,DataTime,{1}) VALUES({2},'{3}','{4}'," + valuechange + ");", tablename, key, stationId, RecordTime, System.DateTime.Now, value.ToString()); } else { //如果数据不同才更新 if (ExecuteScalar(string.Format("select {0} from {1} where id = {2}", key, tablename,Convert.ToInt32(ExecuteScalar(sql, 1))), 1) != value) { string valuechange = typeof(string).Equals(value.GetType()) ? "'{2}'" : "{2}"; sql = string.Format("update {0} set {1}=" + valuechange + " where RecordTime='{3}'", tablename, key, value.ToString(), RecordTime); } } ExecuteNonQuery(sql, 1); } public static void InsertAlarmInfo(AlarmInfo alarmInfo) { //首先判断数据库中是否有这一条数据 string sql = string.Format("select id from alarminfo where ParaName = '{0}';", alarmInfo.ParaName); if (ExecuteScalar(sql, 1) == null) //如果没有那就新增一条信息 { sql = string.Format("insert into alarminfo(StationID,RecordTime,DataTime,ParaName,ParaState,IsHandled) VALUES({0},'{1}','{2}','{3}','{4}',{5})", alarmInfo.StationID, alarmInfo.RecordTime, alarmInfo.DataTime, alarmInfo.ParaName, alarmInfo.ParaState, 0); } else //如果有那就更新这条信息 { sql = string.Format("update alarminfo set ParaState='{0}',IsHandled={1},RecordTime='{2}',DataTime='{3}' where ParaName = '{4}'", alarmInfo.ParaState, alarmInfo.IsHandled, alarmInfo.RecordTime, alarmInfo.DataTime, alarmInfo.ParaName); } ExecuteNonQuery(sql, 1); sql = string.Format("insert into alarminfohis(StationID,RecordTime,DataTime,ParaName,ParaState,IsHandled) VALUES({0},'{1}','{2}','{3}','{4}',{5})", alarmInfo.StationID, alarmInfo.RecordTime, alarmInfo.DataTime, alarmInfo.ParaName, alarmInfo.ParaState, 0); ExecuteNonQuery(sql, 1); } public static void InsertSwitchInfo(SwitchInfo switchInfo) { //首先判断数据库中是否有这一条数据 string sql = string.Format("select id from switchinfo where SwitchName = '{0}';", switchInfo.SwitchName); if (ExecuteScalar(sql, 1) == null) //如果没有那就新增一条信息 { sql = string.Format("insert into switchinfo(StationID,RecordTime,DataTime,SwitchName,SwitchState) VALUES({0},'{1}','{2}','{3}','{4}')", switchInfo.StationID, switchInfo.RecordTime, switchInfo.DataTime, switchInfo.SwitchName, switchInfo.SwitchState); } else //如果有那就更新这条信息 { sql = string.Format("update switchinfo set SwitchState='{0}',RecordTime='{1}',DataTime='{2}' where SwitchName = '{3}'", switchInfo.SwitchState, switchInfo.RecordTime, switchInfo.DataTime, switchInfo.SwitchName); } ExecuteNonQuery(sql, 1); sql = string.Format("insert into switchinfohis(StationID,RecordTime,DataTime,SwitchName,SwitchState) VALUES({0},'{1}','{2}','{3}','{4}')", switchInfo.StationID, switchInfo.RecordTime, switchInfo.DataTime, switchInfo.SwitchName, switchInfo.SwitchState); ExecuteNonQuery(sql, 1); } } }