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

VB.NET中MySqlDataReader读取存储过程结果集丢失首行问题

问题原因

你丢失首行的核心原因是代码中多余调用了result.Read()方法:

  • MySqlDataReader的Read()方法会将指针向前移动到下一行,你在调用RData.Load(result)之前手动执行了一次result.Read(),已经读取了当前结果集的第一行
  • DataTable.Load()方法内部会自动从DataReader的当前指针位置开始,遍历所有剩余行加载到DataTable中,因此第一行被你提前读取后,Load方法就看不到这一行数据了
修复方案

直接删除While result.HasRows代码块里的result.Read()调用即可,修改后代码如下:

Dim RData As DataTable = New DataTable

comando.CommandText = String.Format("call EmailPagoCliente({0},{1},{2},{3})", numCliente, IDPR, IDRes, IDCC)
conex.Open()
result = comando.ExecuteReader
While result.HasRows
    RData.Clear()
    RData.Load(result)
    correo.Data = RData.Copy
End While
conex.Close()
补充说明
  • 如果你需要判断当前结果集是否为空,可以直接通过加载后的RData.Rows.Count判断,不需要提前读取行
  • 多结果集遍历的逻辑不需要调整,DataTable.Load()加载完当前结果集后,会自动将DataReader的指针移动到下一个结果集的起始位置,result.HasRows可以正常判断下一个结果集是否存在数据
  • 你提到的存储过程逻辑没问题,就是因为客户端代码多了一次Read调用导致的首行丢失,和存储过程本身无关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:06:03