186 lines
6.7 KiB
C#
186 lines
6.7 KiB
C#
using MQTT_WinformV1.Model;
|
||
using MQTT_WinformV1.Service;
|
||
using MqttClient;
|
||
using MySql.Data.MySqlClient;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Timers;
|
||
using System.Windows.Forms;
|
||
|
||
namespace MQTT_WinformV1
|
||
{
|
||
public partial class FormDataZF : Form
|
||
{
|
||
private System.Timers.Timer _timer;
|
||
private DataUploadService _upLoadService;
|
||
public DataTable sendDb = new DataTable();
|
||
public FormDataZF()
|
||
{
|
||
InitializeComponent();
|
||
_upLoadService = new DataUploadService();
|
||
}
|
||
|
||
private void FormDataZF_Load(object sender, EventArgs e)
|
||
{
|
||
timer1.Enabled = true;
|
||
initDBData();
|
||
button2_Click(null,null);
|
||
button1_Click(null,null);
|
||
}
|
||
|
||
private void initDBData()
|
||
{
|
||
this.txtIP.Text = Globalstatic.localIP;
|
||
this.txtPort.Text = Globalstatic.localPort;
|
||
this.txtUser.Text = Globalstatic.localUser;
|
||
this.txtPwd.Text = Globalstatic.localPwd;
|
||
this.txtDBName.Text = Globalstatic.localDBName;
|
||
|
||
this.txtMesIP.Text = Globalstatic.mesIP;
|
||
this.txtMesPort.Text = Globalstatic.mesPort;
|
||
this.txtMesDB.Text = Globalstatic.mesDBName;
|
||
}
|
||
|
||
private void _timer_Tick(object sender, ElapsedEventArgs e)
|
||
{
|
||
|
||
DataUpload();
|
||
}
|
||
|
||
|
||
//数据上传
|
||
private async Task DataUpload()
|
||
{
|
||
if (TestDbConnection(this.txtIP.Text.Trim(), this.txtPort.Text, this.txtUser.Text, this.txtDBName.Text, this.txtPwd.Text))
|
||
{
|
||
AppendLog("开始上传数据");
|
||
int count = await _upLoadService.QueryDataAsync(this.txtIP.Text.Trim(), this.txtPort.Text, this.txtDBName.Text, this.txtUser.Text, this.txtPwd.Text);
|
||
AppendLog(count.ToString() + "条数据已上传!");
|
||
}
|
||
}
|
||
|
||
private void AppendLog(string message)
|
||
{
|
||
try
|
||
{
|
||
if (InvokeRequired)
|
||
{
|
||
BeginInvoke(new Action<string>(AppendLog), message);
|
||
return;
|
||
}
|
||
|
||
string timeStamped = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}\r\n";
|
||
textBoxLog.AppendText(timeStamped);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
private void button1_Click(object sender, EventArgs e)
|
||
{
|
||
int min;
|
||
if (!int.TryParse(txtLUploadPL.Text, out min) || min <= 0)
|
||
{
|
||
min = 30;
|
||
}
|
||
// 设置定时器(转换为毫秒)
|
||
_timer = new System.Timers.Timer(min * 60 * 1000);
|
||
_timer.Elapsed += _timer_Tick;
|
||
_timer.AutoReset = true; // 是否重复
|
||
_timer.Enabled = true; // 开始计时
|
||
// 方法:立即执行一次
|
||
_timer_Tick(null, null);
|
||
}
|
||
|
||
private async void button2_Click(object sender, EventArgs e)
|
||
{
|
||
//sendDb = await _upLoadService.getSendDB();
|
||
//bindingSource1.DataSource = sendDb;
|
||
}
|
||
|
||
// 测试数据库连接的核心方法
|
||
private bool TestDbConnection(string ip, string port, string user, string dbName, string pwd)
|
||
{
|
||
// 1. 基础参数校验
|
||
if (string.IsNullOrWhiteSpace(ip) || string.IsNullOrWhiteSpace(port) ||
|
||
string.IsNullOrWhiteSpace(user) || string.IsNullOrWhiteSpace(dbName))
|
||
{
|
||
MessageBox.Show("IP、端口、用户名、数据库名不能为空!", "参数错误",
|
||
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return false;
|
||
}
|
||
|
||
// 2. 拼接连接字符串(MySQL)
|
||
MySqlConnectionStringBuilder connStrBuilder = new MySqlConnectionStringBuilder();
|
||
connStrBuilder.Server = ip;
|
||
|
||
// 补充:端口解析异常处理(避免非数字端口崩溃)
|
||
if (!uint.TryParse(port, out uint portNum))
|
||
{
|
||
MessageBox.Show("端口格式错误!请输入数字(如3306)", "连接失败",
|
||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return false;
|
||
}
|
||
connStrBuilder.Port = portNum; // 端口转无符号整数
|
||
connStrBuilder.UserID = user;
|
||
connStrBuilder.Password = pwd;
|
||
connStrBuilder.Database = dbName;
|
||
connStrBuilder.CharacterSet = "utf8mb4"; // 字符集(避免中文乱码)
|
||
|
||
// 3. 尝试连接数据库
|
||
using (MySqlConnection conn = new MySqlConnection(connStrBuilder.ConnectionString))
|
||
{
|
||
try
|
||
{
|
||
conn.Open(); // 打开连接(同步,WinForm UI 会短暂阻塞,简单场景够用)
|
||
return true;
|
||
}
|
||
catch (MySqlException ex)
|
||
{
|
||
// 替换 switch 表达式为传统 switch 语句
|
||
string errorMsg = "";
|
||
switch (ex.Number)
|
||
{
|
||
case 0:
|
||
errorMsg = "无法连接到数据库服务器!请检查IP/端口是否正确";
|
||
break;
|
||
case 1045:
|
||
errorMsg = "用户名或密码错误!";
|
||
break;
|
||
case 1049:
|
||
errorMsg = "指定的数据库不存在!";
|
||
break;
|
||
default:
|
||
errorMsg = "数据库连接失败:" + ex.Message;
|
||
break;
|
||
}
|
||
MessageBox.Show(errorMsg, "连接失败",
|
||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("未知错误:" + ex.Message, "连接失败",
|
||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private void button2_Click_1(object sender, EventArgs e)
|
||
{
|
||
if (TestDbConnection(this.txtIP.Text.Trim(), this.txtPort.Text, this.txtUser.Text, this.txtDBName.Text, this.txtPwd.Text))
|
||
{
|
||
MessageBox.Show("数据库连接成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
}
|
||
}
|
||
}
|