using Google.Protobuf.WellKnownTypes; using MonitoringTechnology.Models; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Data; namespace MonitoringTechnology.DataAccess { public class DBHelper { //连接钥匙 private static readonly string ConnStr = ConfigurationManager.ConnectionStrings["db"].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(); } 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) { sql = string.Format("insert into {0}(StationID,RecordTime,DataTime,{1}) VALUES({2},'{3}','{4}',{5});", tablename, key, stationId, RecordTime, System.DateTime.Now, value.ToString()); } else { sql = string.Format("update {0} set {1}={2} where RecordTime='{3}'", tablename, key, value.ToString(), RecordTime); } ExecuteNonQuery(sql, 1); } /// /// 查询表AlarmItemModel中最新的十条数据 /// /// /// public ObservableCollection Query_AlarmItemModelList() { using (MySqlConnection conn = new MySqlConnection(ConnStr)) { conn.Open(); ObservableCollection alarmItemModels = new ObservableCollection(); string sql = @"select * from alarmitemmodel ORDER BY F_CreateDate DESC LIMIT 30"; try { int s = 01; MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); //创建一个DataTable用于接收数据库中的数据 DataTable table = new DataTable(); int count = adapter.Fill(table); //循环遍历 foreach (DataRow dr in table.AsEnumerable()) { alarmItemModels.Add(new AlarmItemModel { F_SerialNo = s, F_CreateDate = dr.Field("F_CreateDate"), F_Time = dr.Field("F_Time"), F_Message = dr.Field("F_Message"), F_Len = dr.Field("F_Len") }); s++; } return alarmItemModels; } catch (MySqlException ex) { throw new Exception("执行查询表AlarmItemModel数据出现异常", ex); } finally { conn.Close(); } } } /// /// 查询表MonitoringSensorModel中最新的十五条数据 /// /// public ObservableCollection Query_monitoringSensorModelsList() { using (MySqlConnection conn = new MySqlConnection(ConnStr)) { conn.Open(); ObservableCollection ElectricalEnvironmental = new ObservableCollection(); string sql = @"select F_Id,F_CreateDate,F_DatetimeSensor,F_Tem,F_Hum,F_Pressure from monitoringsensormodel ORDER BY F_CreateDate DESC LIMIT 30"; try { int m = 01; MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); //创建一个DataTable用于接收数据库中的数据 DataTable table = new DataTable(); int count = adapter.Fill(table); //循环遍历 foreach (DataRow dr in table.AsEnumerable()) { ElectricalEnvironmental.Add(new ElectricalEnvironmentalModel { F_SerialNo = m, F_CreateDate = dr.Field("F_CreateDate"), F_DatetimeSensor = dr.Field("F_DatetimeSensor"), F_Tem = dr.Field("F_Tem"), F_Hum = dr.Field("F_Hum"), F_Pressure = dr.Field("F_Pressure"), }) ; m++; } return ElectricalEnvironmental; } catch (MySqlException ex) { throw new Exception("执行查询表MonitoringSensorModel数据出现异常", ex); } finally { conn.Close(); } } } /// /// 查询表MonitoringSensorModel中最新的一条数据 /// /// /// public MonitoringSensorModel Query_MonitoringSensorFirst() { using (MySqlConnection conn = new MySqlConnection(ConnStr)) { conn.Open(); MonitoringSensorModel monitoringSensorModel = new MonitoringSensorModel(); string sql = @"select * from monitoringsensormodel ORDER BY F_CreateDate DESC LIMIT 1"; try { MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); //创建一个DataTable用于接收数据库中的数据 DataTable table = new DataTable(); int count = adapter.Fill(table); //循环遍历 foreach (DataRow dr in table.AsEnumerable()) { monitoringSensorModel.F_Id = dr.Field("F_Id"); monitoringSensorModel.F_Tem = dr.Field("F_Tem"); monitoringSensorModel.F_CreateDate = dr.Field("F_CreateDate"); monitoringSensorModel.F_DatetimeSensor = dr.Field("F_DatetimeSensor"); monitoringSensorModel.F_Hum = dr.Field("F_Hum"); monitoringSensorModel.F_Pressure = dr.Field("F_Pressure"); monitoringSensorModel.F_AccelerationX = dr.Field("F_AccelerationX"); monitoringSensorModel.F_AccelerationY = dr.Field("F_AccelerationY"); monitoringSensorModel.F_AccelerationZ = dr.Field("F_AccelerationZ"); monitoringSensorModel.F_AngularVelocityX = dr.Field("F_AngularVelocityX"); monitoringSensorModel.F_AngularVelocityY = dr.Field("F_AngularVelocityY"); monitoringSensorModel.F_AngularVelocityZ = dr.Field("F_AngularVelocityZ"); monitoringSensorModel.F_DegreesX = dr.Field("F_DegreesX"); monitoringSensorModel.F_DegreesY = dr.Field("F_DegreesY"); monitoringSensorModel.F_DegreesZ = dr.Field("F_DegreesZ"); } return monitoringSensorModel; } catch (MySqlException ex) { throw new Exception("执行查询表MonitoringSensorModel数据出现异常", ex); } finally { conn.Close(); } } } } }