VB.NET 2017串口读取RFID值无法查询MySQL数据库问题
问题分析与解决方案
你遇到的问题主要来自两个核心点:跨线程UI访问冲突和串口读取的RFID数据包含多余控制字符,下面我会逐个拆解并给出可直接复用的修复方案:
1. 跨线程操作UI控件的隐患
SerialPort的DataReceived事件是在后台工作线程触发的,而WinForms的所有控件都只能在创建它们的**主线程(UI线程)**中被修改。直接在后台线程里给txtRFID.Text赋值,轻则导致程序无响应,重则抛出线程安全异常,这是你刷卡时程序异常的主要原因之一。
修复方案:用Invoke切换到UI线程更新控件
修改你的串口读取代码,通过Invoke方法安全地在UI线程中更新文本框:
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim id As String = SerialPort1.ReadLine() ' 先清除串口返回的回车、换行等多余控制字符 id = id.Trim(ControlChars.Cr, ControlChars.Lf) ' 注意:如果每次刷卡是独立的RFID值,不要用累加,直接替换即可 returnStr = id ' 切换到UI线程更新控件 If txtRFID.InvokeRequired Then txtRFID.Invoke(Sub() txtRFID.Text = returnStr) Else txtRFID.Text = returnStr End If End Sub
2. 串口数据的多余字符导致查询失败
你复制粘贴的是纯RFID字符串,但刷卡时串口返回的id通常会附带换行符(\n)、回车符(\r)这类控制字符。这些额外字符会让你的SQL查询条件@rfid和数据库中存储的纯RFID值不匹配,最终触发Catch块的"未注册"报错。
修复方案:清洗读取到的串口数据
上面的代码已经加入了id.Trim(ControlChars.Cr, ControlChars.Lf)来精准去除回车和换行符,如果还存在其他空白字符,可以直接用id.Trim()清除所有首尾空白:
id = id.Trim()
额外的稳定性优化建议
为了避免后续出现其他异常,建议给查询逻辑加上防护:
- 先判断输入是否为空,避免无效查询:
Private Sub txtRFID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRFID.TextChanged If String.IsNullOrWhiteSpace(txtRFID.Text) Then ' 清空所有UI显示 lblMName.Text = "" lblFName.Text = "" lblLName.Text = "" lblCourse.Text = "" lblYear.Text = "" PictureBox1.Image = Nothing Return End If Try ' 原有的查询代码... adapter.Fill(table) ' 先检查查询结果是否为空,避免索引越界异常 If table.Rows.Count > 0 Then lblMName.Text = table(0)(5).ToString() lblFName.Text = table(0)(4).ToString() lblLName.Text = table(0)(3).ToString() lblCourse.Text = table(0)(10).ToString() lblYear.Text = table(0)(11).ToString() imgByte = table(0)(12) Dim ms As New MemoryStream(imgByte) PictureBox1.Image = Image.FromStream(ms) Else MessageBox.Show("Card not registered in database !") txtRFID.Text = "" returnStr = "" End If adapter.Dispose() Catch ex As Exception MessageBox.Show($"Error: {ex.Message}") txtRFID.Text = "" returnStr = "" End Try End Sub
内容的提问来源于stack exchange,提问作者Riki Pearl
相关产品推荐
相关产品推荐

