2023-02-03 00:31:48 +00:00
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" ) ,
2023-03-31 07:02:21 +00:00
F_Len = dr . Field < int > ( "F_Len" )
2023-02-03 00:31:48 +00:00
} ) ;
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 ( ) ;
}
}
}
}
}