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();
}
}
}
}
}