数据页面展示
添加定时器执行每个表数据的生成计划
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Data.SqlClient; // 连接数据客户端
// 命名空间在这里
namespace file_upload
{public partial class From1 : Form{// 自己定义的类,在这里是获取数据库里面返回的数据private DatabaseAccess dbAccess = new DatabaseAccess();
// 定义成全局的,然后改变某一个属性就行好private Timer GDSSTimer;// 添加一个定时器private Timer KYSSTimer;
// 换成自己的数据 这要加一个转义字符private string connectionString = "Data Source=MOGFPLQEEJOTGON\\SQLEXPRESS;Initial Catalog=hm_dataaccess;User ID=frank;Password=root123";private string pathTime;private string titleTime;
// 这个是 program 来调用的顺序public From1(){// 初始化窗口里面的全部的控件InitializeComponent();GDSSTimers(); // 然后再开启定时任务 供电实时信息KYSSTimers(); // 空压机实时信息}
private void CDSS_data(object sender, EventArgs e){formatString(out pathTime, out titleTime);
// 这里写好条件在执行sql 的时候要给这个变量添加具体的数据string query = "SELECT * FROM data_GDSS";
// 生成一个集合类的对象var collection = dbAccess.GetCollectionByField<GDSS>(connectionString, query, MapFunction);
string filePath = @"C:\exchange\360981021073_GDSS_" + pathTime + ".txt"; // 指定文件路径
string fileContent = "360981021073;流舍煤矿;" + titleTime + "~"; // 文件内容foreach (GDSS item in collection){//MessageBox.Show(item.print()); // 在盒子中打印一下数据// 36098102107351MN36101001000000000011;36101;电压;3609810210730051000001;27.25;V;0;2024-071513:58:55fileContent += item.cdcode + ";" + item.cdtypecode + ";" + item.cdtypename + ";" +item.sbcode + ";" + item.cdvalue + ";" + item.dw + ";" + item.cdstatus + ";" + titleTime + "~";}fileContent += "||"; // 最后在文件的结尾添加一个结束的符号
try{// 确保文件目录存在var directory = Path.GetDirectoryName(filePath);// 如果没有目录就重新生成一个if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}// 写入指定的字符写入到txt中来File.WriteAllText(filePath, fileContent);//MessageBox.Show("文件生成成功!");}catch (Exception ex){// 这里站位符没有起到作用MessageBox.Show("生成文件时发生错误: {0}", ex.Message.ToString());}}
// KYSS 数据生成事件private void KYSS_data(object sender, EventArgs e) {formatString(out pathTime, out titleTime);
string kyss = "SELECT * FROM data_KYSS";var kyssList = dbAccess.GetCollectionByField<KYSS>(connectionString, kyss, KyssList);
string filePath1 = @"C:\exchange\360981021073_KYSS_" + pathTime + ".txt";string fileContent1 = "360981021073;流舍煤矿;" + titleTime + "~";
foreach (KYSS item in kyssList){//MessageBox.Show(item.print()); // 在盒子中打印一下数据// 36098102107351MN36101001000000000011;36101;电压;3609810210730051000001;27.25;V;0;2024-071513:58:55fileContent1 += item.cdcode + ";" + item.cdtypecode + ";" + item.cdtypename + ";" +item.sbcode + ";" + item.cdvalue + ";" + item.dw + ";" + item.cdstatus + ";" + titleTime + "~";}fileContent1 += "||";
try{// 确保文件目录存在var directory = Path.GetDirectoryName(filePath1);// 如果没有目录就重新生成一个if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}// 写入指定的字符写入到txt中来File.WriteAllText(filePath1, fileContent1);//MessageBox.Show("文件生成成功!");}catch (Exception ex){// 这里站位符没有起到作用MessageBox.Show("生成文件时发生错误: {0}", ex.Message.ToString());}}/// <summary>/// 将日期转化为我们需要的格式/// </summary>/// <param name="pathTime">yyyyMMddHHmmss</param>/// <param name="titleTime">yyyy-MM-dd HH:mm:ss</param>private static void formatString(out string pathTime, out string titleTime){// 不管几个文件时间都是共用的,这一点没有变化的DateTime nowtime = DateTime.Now; //获取当前的时间pathTime = nowtime.ToString("yyyyMMddHHmmss");// 路径文件的名字titleTime = nowtime.ToString("yyyy-MM-dd HH:mm:ss");// 文件标题的名字}
// 给每一个记录添加数据// 这里是委托来算出每一个对象参数的值private GDSS MapFunction(SqlDataReader reader){// 根据你的数据表结构,创建和返回你的数据对象return new GDSS{ // 符号出问题呢id = (int)reader["id"],cdcode = reader["cdcode"] as string,cdtypecode = reader["cdtypecode"] as string, // 测点类型编码cdtypename = reader["cdtypename"] as string ,// 测点类型名称sbcode = reader["sbcode"] as string, // 设备编码 cdvalue = reader["cdvalue"] as string, // 实时数据dw = reader["dw"] as string, // 单位cdstatus = (int) reader["cdstatus"], // 测点状态datatime = reader["datatime"] as string, // 写入时间uploadtime = reader["uploadtime"] as string // 上传时间};}/// <summary>/// 读取完数据的添加/// </summary>/// <param name="reader">数据读取器 </param>/// <returns></returns>private KYSS KyssList(SqlDataReader reader){// 根据你的数据表结构,创建和返回你的数据对象return new KYSS{ // 符号出问题呢id = (int)reader["id"],cdcode = reader["cdcode"] as string,cdtypecode = reader["cdtypecode"] as string, // 测点类型编码cdtypename = reader["cdtypename"] as string,// 测点类型名称sbcode = reader["sbcode"] as string, // 设备编码 cdvalue = reader["cdvalue"] as string, // 实时数据dw = reader["dw"] as string, // 单位cdstatus = (int)reader["cdstatus"], // 测点状态datatime = reader["datatime"] as string, // 写入时间uploadtime = reader["uploadtime"] as string // 上传时间};}// 定义定时器来处理我们要想处理的事件private void GDSSTimers(){// 创建Timer实例 事件源GDSSTimer = new Timer();
// 设置定时器间隔(例如,2000毫秒)GDSSTimer.Interval = 1000 * 60;
// 设置定时器事件处理程序 GDSSTimer.Tick += new EventHandler(CDSS_data);//这里的事件是我们自己定义的
// 启动定时器GDSSTimer.Start();}
private void KYSSTimers(){// 创建Timer实例 事件源KYSSTimer = new Timer();
// 设置定时器间隔(例如,2000毫秒)KYSSTimer.Interval = 1000 * 60;
// 设置定时器事件处理程序 KYSSTimer.Tick += new EventHandler(KYSS_data);//
// 启动定时器KYSSTimer.Start();}/// <summary>/// 设置定时器的执行时间/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){string time = comboBox1.Text;// 获取选中文本的信息int sec = Convert.ToInt32(time);GDSSTimer.Interval = sec * 1000; // 1000KYSSTimer.Interval = sec * 1000; // 1000}}
}
连接数据库,读取数据到list中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; // 添加数据连接对象
namespace file_upload
{/// <summary>/// 这是我们自己定义的一共工具类啊/// </summary>class DatabaseAccess{public List<T> GetCollectionByField<T>(string connectionString, string sql, Func<SqlDataReader, T> mapFunction){var results = new List<T>(); // 定义一个集合来返回数据using (var connection = new SqlConnection(connectionString)) // 要连接的数据库{using (var command = new SqlCommand(sql, connection)) // 创建执行终端{//command.Parameters.AddWithValue("@value", value); // 在执行具体的sql语句要添加相应的参数connection.Open(); // 打开连接using (SqlDataReader reader = command.ExecuteReader()) // 读取数据库里面的数据{while (reader.Read()){// 将一条数据添加到集合里面results.Add(mapFunction(reader));}}connection.Close();}}return results;}}
}
供电实时信息类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace file_upload
{// 供电实时信息类class GDSS{public Int32 id { set; get; } // 主键唯一的public string cdcode { set; get; } // 测点编码public string cdtypecode { set; get; } // 测点类型编码public string cdtypename { set; get; } // 测点类型名称public string sbcode { set; get; } // 设备编码 public string cdvalue { set; get; } // 实时数据public string dw { set; get; } // 单位public Int32 cdstatus { set; get; } // 测点状态public string datatime { set; get; } // 写入时间public string uploadtime { set; get; } // 上传时间
// 测试有没有从数据库中读取到数据
public string print() {return "id = " + id + " cdcode = " + cdcode + " cdtypecode = " + cdtypecode + " cdtypename = " + cdtypename+ " sbcode = " + sbcode + " cdvalue = " + cdvalue + " dw = " + dw + " cdstatus = " + cdstatus + " datatime = "+datatime + " uploadtime = " + uploadtime;}}
}