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(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); } } } }