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

获取tblStocks表中以11开头的最新Item_Code报错排查及实现

解决System.InvalidOperationException错误并获取最新Item_Code

问题根源

你的代码触发System.InvalidOperationException: 'No data exists for the row/column.'有三个核心原因:

  1. SQL语句中错误地将@item_code用作列别名,@是参数占位符的标识,不能直接当别名使用
  2. 调用ExecuteReader后,没有调用DataReader.Read()方法定位到数据行,DataReader初始位置在第一行之前,直接访问列会报错
  3. LAST()函数依赖数据存储顺序,兼容性差,且不一定能准确获取"最新"的Item_Code(通常我们需要的是最大的编码值)

修正后的完整代码

' 修改SQL语句,用MAX()获取最大的Item_Code,使用合法别名
Dim sql As String = "SELECT MAX(Item_Code) AS latest_item FROM tblStocks WHERE Item_Code LIKE '11%'"

' 使用Using语句自动释放资源,避免内存泄漏
Using cmd As New OleDbCommand(sql, cn)
    Using dr As OleDbDataReader = cmd.ExecuteReader()
        ' 先判断是否有数据行
        If dr.Read() Then
            ' 读取列值,注意用别名latest_item
            txtAvailable.Text = dr("latest_item").ToString()
        Else
            ' 没有符合条件的数据时的处理
            txtAvailable.Text = "无匹配数据"
        End If
    End Using
End Using

关键修正点说明

  • SQL语句优化:用MAX(Item_Code)替代LAST(Item_Code),因为你的Item_Code是递增的编码格式,MAX()能直接获取最大(最新)的符合条件的值,且兼容大多数数据库;同时将别名改为latest_item,避免参数占位符冲突
  • DataReader读取逻辑:必须调用dr.Read()来移动到第一行数据,返回值为True表示存在有效数据,此时才能安全访问列值
  • 资源管理:用Using语句包裹OleDbCommand和OleDbDataReader,确保数据库连接相关资源能自动释放,避免连接泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:46:02