20211124_ZNZT_upperpc/MonitoringTechnology/DataAccess/DBHelper.cs
2023-02-03 08:31:48 +08:00

397 lines
16 KiB
C#

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;
/// <summary>
/// 增删改
/// </summary>
/// <param name="sql">增删改</param>
/// <param name="cmdType">1代表是查询过程 2 是代表存储过程</param>
/// <param name="paras"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 查询一个值
/// </summary>
/// <param name="sql"></param>
/// <param name="cmdType"></param>
/// <param name="paras"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 查询多行值
/// </summary>
/// <param name="sql"></param>
/// <param name="cmdType"></param>
/// <param name="paras"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
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;
}
/// <summary>
/// 填充DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="cmdType"></param>
/// <param name="paras"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 填充DataTable 一个结果集
/// </summary>
/// <param name="sql"></param>
/// <param name="cmdType"></param>
/// <param name="paras"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 事务 一系列的sql语句 针对增删该查
/// </summary>
/// <param name="listSQL"></param>
/// <returns></returns>
public static bool ExecuteTrans(List<string> 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();
}
}
}
/// <summary>
/// 执行事务 每个操作分装到cmdInfo中
/// </summary>
/// <param name="listCmd"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static bool ExecuteTrans(List<CmdInfo> 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();
}
}
}
/// <summary>
/// 构造SqlCommand
/// </summary>
/// <param name="conn"></param>
/// <param name="sql"></param>
/// <param name="cmdType"></param>
/// <param name="trans"></param>
/// <param name="paras"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 对数据库插入数据---定制化,需要改动
/// </summary>
/// <param name="tablename">表名</param>
/// <param name="stationId">站点ID</param>
/// <param name="RecordTime">数据记录时间</param>
/// <param name="key">需要插入的值的名称</param>
/// <param name="value">值</param>
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);
}
/// <summary>
/// 查询表AlarmItemModel中最新的十条数据
/// </summary>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public ObservableCollection<AlarmItemModel> Query_AlarmItemModelList()
{
using (MySqlConnection conn = new MySqlConnection(ConnStr))
{
conn.Open();
ObservableCollection<AlarmItemModel> alarmItemModels = new ObservableCollection<AlarmItemModel>();
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<DateTime>("F_CreateDate"),
F_Time = dr.Field<DateTime>("F_Time"),
F_Message = dr.Field<string>("F_Message"),
F_Len = dr.Field<string>("F_Len")
});
s++;
}
return alarmItemModels;
}
catch (MySqlException ex)
{
throw new Exception("执行查询表AlarmItemModel数据出现异常", ex);
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 查询表MonitoringSensorModel中最新的十五条数据
/// </summary>
/// <returns></returns>
public ObservableCollection<ElectricalEnvironmentalModel> Query_monitoringSensorModelsList()
{
using (MySqlConnection conn = new MySqlConnection(ConnStr))
{
conn.Open();
ObservableCollection<ElectricalEnvironmentalModel> ElectricalEnvironmental = new ObservableCollection<ElectricalEnvironmentalModel>();
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<DateTime>("F_CreateDate"),
F_DatetimeSensor = dr.Field<DateTime>("F_DatetimeSensor"),
F_Tem = dr.Field<float>("F_Tem"),
F_Hum = dr.Field<float>("F_Hum"),
F_Pressure = dr.Field<float>("F_Pressure"),
}) ;
m++;
}
return ElectricalEnvironmental;
}
catch (MySqlException ex)
{
throw new Exception("执行查询表MonitoringSensorModel数据出现异常", ex);
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 查询表MonitoringSensorModel中最新的一条数据
/// </summary>
/// <returns></returns>
/// <exception cref="Exception"></exception>
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<int>("F_Id");
monitoringSensorModel.F_Tem = dr.Field<float>("F_Tem");
monitoringSensorModel.F_CreateDate = dr.Field<DateTime>("F_CreateDate");
monitoringSensorModel.F_DatetimeSensor = dr.Field<DateTime>("F_DatetimeSensor");
monitoringSensorModel.F_Hum = dr.Field<float>("F_Hum");
monitoringSensorModel.F_Pressure = dr.Field<float>("F_Pressure");
monitoringSensorModel.F_AccelerationX = dr.Field<float>("F_AccelerationX");
monitoringSensorModel.F_AccelerationY = dr.Field<float>("F_AccelerationY");
monitoringSensorModel.F_AccelerationZ = dr.Field<float>("F_AccelerationZ");
monitoringSensorModel.F_AngularVelocityX = dr.Field<float>("F_AngularVelocityX");
monitoringSensorModel.F_AngularVelocityY = dr.Field<float>("F_AngularVelocityY");
monitoringSensorModel.F_AngularVelocityZ = dr.Field<float>("F_AngularVelocityZ");
monitoringSensorModel.F_DegreesX = dr.Field<float>("F_DegreesX");
monitoringSensorModel.F_DegreesY = dr.Field<float>("F_DegreesY");
monitoringSensorModel.F_DegreesZ = dr.Field<float>("F_DegreesZ");
}
return monitoringSensorModel;
}
catch (MySqlException ex)
{
throw new Exception("执行查询表MonitoringSensorModel数据出现异常", ex);
}
finally
{
conn.Close();
}
}
}
}
}