sqlsugar的说明: https://www.donet5.com/Doc/1/2246
配置sqlsugar:
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WinFrmMonitorTest1.DAL
{
public class SqlSugarHelper
{
public static string ConnectionString = string.Empty; //必填, 数据库连接字符串
public static SqlSugarClient db
{
get => new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = ConnectionString,
DbType = SqlSugar.DbType.Sqlite, //必填, 数据库类型
IsAutoCloseConnection = true, //默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作
InitKeyType = InitKeyType.SystemTable //默认SystemTable, 字段信息读取, 如:该属性是不是主键,是不是标识列等等信息
});
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WinFrmMonitorTest1.DAL
{
public class SqlSugarService
{
/// <summary>
/// 设置连接字符串
/// </summary>
/// <param name="ConnectionStr"></param>
public static void SetConnectionStr(string ConnectionStr)
{
SqlSugarHelper.ConnectionString = ConnectionStr;
}
}
}
public FrmLogin()
{
InitializeComponent();
this.Load += FrmLogin_Load;
}
string str2 = "\\Config\\Monitor.db;Pooling=true;FailIfMissing=false";
private void FrmLogin_Load(object sender, EventArgs e)
{
SqlSugarService.SetConnectionStr("Data Source=" + Application.StartupPath + str2);
}
配置数据仓库:
using Entitys;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WinFrmMonitorTest1.Service
{
public interface IModelRepository
{
Sysadmins GetSysadmin(string user, string pwd);
List<Sysadmins> GetSysadmins();
Product GetProduct(int Id);
List<Product> GetProducts();
//
Report GetReport(int Id);
List<Report> GetReports();
int InsertProduct(Product product);
//ActualData
ActualData GetActualData(int Id);
List<ActualData> GetActualDatas(DateTime t1, DateTime t2);
int InsertActualData(List<ActualData> actualDatas);
//ReportData
ReportData GetReportData(int Id);
DataTable GetReportDatas(DateTime t1, DateTime t2);
int InsertReportData(List<ReportData> reportDatas);
}
}
using Entitys;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WinFrmMonitorTest1.DAL;
namespace WinFrmMonitorTest1.Service
{
public class ModelRepository : IModelRepository
{
private SqlSugarClient _db = SqlSugarHelper.db;
public SqlSugarClient Db { get => _db; set => _db = value; }
/// <summary>
/// Product
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Product GetProduct(int Id)
{
return _db.Queryable<Product>().First(p => p.Id == Id);
}
public List<Product> GetProducts()
{
return _db.Queryable<Product>().ToList();
}
public int InsertProduct(Product product)
{
int count = _db.Insertable(product).ExecuteCommand();//官方推荐的
return count;
}
/// <summary>
/// Report
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Report GetReport(int Id)
{
return _db.Queryable<Report>().First(p => p.Id == Id);
}
public List<Report> GetReports()
{
return _db.Queryable<Report>().ToList();
}
/// <summary>
/// admins
/// </summary>
/// <param name="user"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public Sysadmins GetSysadmin(string user ,string pwd)
{
return _db.Queryable<Sysadmins>().First(p => p.LoginName == user && p.LoginPwd == pwd);
}
public List<Sysadmins> GetSysadmins()
{
return _db.Queryable<Sysadmins>().ToList();
}
/// <summary>
/// ActualData
/// </summary>
/// <param name="ActualData"></param>
/// <returns></returns>
public ActualData GetActualData(int Id)
{
return _db.Queryable<ActualData>().First(p => p.Id == Id);
}
public List<ActualData> GetActualDatas(DateTime t1, DateTime t2)
{
return _db.Queryable<ActualData>().Where(a => SqlFunc.Between(a.InsertTime, t1, t2)).ToList();
}
public int InsertActualData(List<ActualData> actualDatas)
{
int count = _db.Insertable(actualDatas).ExecuteCommand();//官方推荐的
return count;
}
public ReportData GetReportData(int Id)
{
return _db.Queryable<ReportData>().First(p => p.Id == Id);
}
//selcet返回部分结果, 也可以定义类返回List<Class1>list=db.Queryable<Student>().Select(it => new Class1{id=it.Id,name=it.Name}).ToList();
public DataTable GetReportDatas(DateTime t1, DateTime t2)
{
return _db.Queryable<ReportData>()
.Where(a => SqlFunc.Between(a.InsertTime, t1, t2))
.Select(a=>new
{
IntertTime=a.InsertTime,
Float1 = a.Float1,
Float2 = a.Float2,
Float3 = a.Float3,
Ushort1 = a.Ushort1,
Ushort2 = a.Ushort2
}).ToDataTable();
}
public int InsertReportData(List<ReportData> reportDatas)
{
int count = _db.Insertable(reportDatas).ExecuteCommand();//官方推荐的
return count;
}
}
}
写历史趋势
using Entitys;
using Newtonsoft.Json;
using NumSharp;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using WinFrmMonitorTest1.DAL;
using WinFrmMonitorTest1.Dtos;
using WinFrmMonitorTest1.Service;
namespace WinFrmMonitorTest1
{
public partial class HistoryChart : DockContent
{
public HistoryChart()
{
InitializeComponent();
this.Load += HistoryChart_Load;
}
private List<string> ParamList = new List<string>();
private List<string> NoteList = new List<string>();
private void HistoryChart_Load(object sender, EventArgs e)
{
this.chart_History.XDataType = SeeSharpTools.JY.GUI.StripChartX.XAxisDataType.String;
this.chart_History.DisplayPoints = 36000;
}
private void HistoryChart_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void Btn_HistoryConfig_Click(object sender, EventArgs e)
{
FrmHistoryConfig objFrm = new FrmHistoryConfig();
if (objFrm.ShowDialog() == DialogResult.OK)
{
this.ParamList = objFrm.ParamList;
this.NoteList = objFrm.SelList;
objFrm.Close();
}
}
private void Btn_Query_Click(object sender, EventArgs e)
{
Task tsk = Task.Run(() =>
{
QueryProcess(this.dtp_Start.Text, this.dtp_End.Text);
});
}
private void btn_LatestOne_Click(object sender, EventArgs e)
{
Task tsk = Task.Run(() =>
{
QueryProcess(DateTime.Now.AddHours(-1.0).ToString("yyyy-MM-dd HH:mm:ss"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
});
}
/// <summary>
/// 根据开始时间和结束时间进行查询
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
///
private void QueryProcess(string start, string end)
{
//做些判断
//对于参数进行一定的判断
DateTime t1 = Convert.ToDateTime(start);
DateTime t2 = Convert.ToDateTime(end);
if (t1 > t2)
{
MessageBox.Show("开始时间不能大于结束时间!", "查询提示");
return;
}
TimeSpan ts = t2 - t1;
if (ts.TotalHours > 10.0)
{
MessageBox.Show("查询间隔范围太大【10H】!", "查询提示");
return;
}
if (this.ParamList.Count == 0)
{
MessageBox.Show("至少要选择一个查询参数!", "查询提示");
return;
}
ModelRepository modelRepository = new ModelRepository();
DataTable actualdt = modelRepository.GetReportDatas(t1, t2);
if (actualdt != null)
{
int rowcount = actualdt.Rows.Count;
if (rowcount > 0)
{
Invoke(new Action(() =>
{
#region 数据解析
//清除数据
this.chart_History.Clear();
//设置曲线数量
this.chart_History.SeriesCount = ParamList.Count;
for (int i = 0; i < ParamList.Count; i++)
{
this.chart_History.Series[i].Name = NoteList[i];
//在这里设置每条曲线的属性
//曲线的宽度,枚举类型
this.chart_History.Series[i].Width = SeeSharpTools.JY.GUI.StripChartXSeries.LineWidth.Thick;
}
//i: 所定义的时间查询出的reportData/dataTable的条数
//j: 查询到的dataTable所对应的列数,即插入时间, Float1,Float2,Float3...等
//XData[i] = Convert.ToDateTime(actualdt.Rows[i][0]).ToString("HH:mm:ss");
//XData 即为dataTable的所有行的第0列,即插入时间
//YData[j, i] = Convert.ToDouble(actualdt.Rows[i][j + 1]);
//YData为dataTable的转置, 它的行数代表插入时间, Float1,Float2,Float3...等,
//随着时间增加列数, 由于dataTable多一列时间, 所以YData从第j+1列开始插入
//
//Y轴二维数组
double[,] YData = new double[ParamList.Count, rowcount];
string[] XData = new string[rowcount];
for (int i = 0; i < rowcount; i++)
{
for (int j = 0; j < ParamList.Count; j++)
{
if (actualdt.Rows[i][j + 1] is DBNull)
{
YData[j, i] = 0.0;
}
else
{
try
{
YData[j, i] = Convert.ToDouble(actualdt.Rows[i][j + 1]);
}
catch (Exception)
{
YData[j, i] = 0.0;
}
}
}
XData[i] = Convert.ToDateTime(actualdt.Rows[i][0]).ToString("HH:mm:ss");
}
this.chart_History.Plot(YData, XData);
#endregion
}));
}
}
}
}
}