You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按ID比对DataGridView与MySQL数据触发MySqlException错误如何解决

报错修复与代码优化说明

错误直接原因

你触发报错的核心原因是:MySqlDataReader 调用 ExecuteReader() 后必须先执行Read()方法移动游标到返回的结果行,才能读取字段值,你跳过了这一步直接访问Quantity字段,因此抛出异常。

代码中存在的其他问题

  • SQL参数使用错误:你给@Stock加了单引号,会被MySQL识别为普通字符串而非参数,且你完全没有给@Stock赋值,没有传入当前DataGridView行对应的ID值,查询永远返回空结果
  • 资源未释放:每次循环创建的MySqlDataReader使用后没有关闭,会导致数据库连接泄漏,后续数据库操作会触发连接占用报错
  • 比较逻辑错误:你将库存数值转为字符串做大小比较,会出现"10" < "2"这类逻辑错误,必须转为数值类型比对
  • 变量名写错:第二个判断分支里的Sum_Result.Text不存在,你之前定义的是Sum_Quantity.Text
  • 结果覆盖问题:你遍历所有行的过程中每次都会给Sum_Outcome.Text赋值,最终文本框只会显示最后一行的比对结果,若要保留所有行的结果需要调整逻辑

修复后代码

Dim cmd As MySqlCommand
Dim READER As MySqlDataReader
' 先确认你的ID列在DataGridView的索引,我这里假设是第0列,你根据实际情况调整
Const ID_COL_INDEX As Integer = 0
Const TARGET_COL_INDEX As Integer = 4
For i = 0 To DataGridView1.Rows.Count - 1
    ' 跳过新行模板(如果DataGridView允许用户新增行的话)
    If DataGridView1.Rows(i).IsNewRow Then Continue For
    
    Dim Query As String = "SELECT Quantity FROM `database`.`stockroom` WHERE `ID`= @Stock"
    cmd = New MySqlCommand(Query, MysqlConn)
    ' 给参数赋值,取当前行的ID
    cmd.Parameters.AddWithValue("@Stock", DataGridView1.Rows(i).Cells(ID_COL_INDEX).Value.ToString())
    
    READER = cmd.ExecuteReader()
    ' 先调用Read判断有没有查询到结果
    If READER.Read() Then
        ' 转为数值类型比较
        Dim dbQty As Integer = READER.GetInt32("Quantity")
        Dim gridQty As Integer = Integer.Parse(DataGridView1.Rows(i).Cells(TARGET_COL_INDEX).Value.ToString())
        Sum_Quantity.Text = dbQty.ToString()
        
        If dbQty >= gridQty Then
            Sum_Outcome.Text = "Stock remains above or equals 0"
        Else
            Sum_Outcome.Text = "Stock falls below 0"
        End If
    Else
        ' 没有查询到对应ID的库存,可自定义提示
        Sum_Outcome.Text = "未查询到对应ID的库存数据"
    End If
    ' 用完立即关闭DataReader
    READER.Close()
Next

额外优化建议

如果你只需要获取单个查询值,建议直接用ExecuteScalar()替代MySqlDataReader,代码更简洁也不容易出资源泄漏问题,替换示例如下:

' 替换上述READER相关代码即可
Dim dbQty As Integer = Convert.ToInt32(cmd.ExecuteScalar())

内容的提问来源于stack exchange,提问作者Ali_D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:51:04