20220510_191_upperpc/AutomaticApp/DataAccess/DBHelper.cs

313 lines
13 KiB
C#
Raw Normal View History

2023-07-27 02:57:34 +00:00
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;
/// <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();
}
////向服务器发送数据
//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;
}
/// <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)
{
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);
}
}
}