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

NpgsqlDataReader读取数据时跳过第一行的问题排查

问题原因与修复方案

你的代码存在逻辑错误,核心问题是对DbDataReader的遍历逻辑理解错误:

  • while (r.Read())已经是在逐行遍历数据库返回的结果,每次Read()成功就表示当前指针定位到了一行有效数据。
  • 而foreach (var item in r)遍历的是当前行的所有列字段,不是行。你把列字段强制转成DbDataRecord本身就是错误操作,这会导致数据读取逻辑混乱,出现行数据丢失的情况。

你看到的“仅获取3行”是错误逻辑下的巧合结果,实际代码根本没有正确遍历所有返回行。

修复后的代码

connection.Open();
using (var r = command.ExecuteReader())
{
    // 逐行遍历结果集
    while (r.Read())
    {
        // 当前的DbDataReader实例本身就可转换为DbDataRecord
        var dbRecord = (System.Data.Common.DbDataRecord)r;
        result.Add(VisualTsTableMapper.MapFromDbRecord(dbRecord));
    }
}
connection.Close();

额外优化建议

可以把数据库连接也用using包裹,确保连接自动释放,避免手动关闭可能出现的遗漏:

using (var connection = new SqlConnection(yourConnectionString))
{
    connection.Open();
    using (var command = new SqlCommand(yourQuery, connection))
    using (var r = command.ExecuteReader())
    {
        while (r.Read())
        {
            var dbRecord = (System.Data.Common.DbDataRecord)r;
            result.Add(VisualTsTableMapper.MapFromDbRecord(dbRecord));
        }
    }
}

内容的提问来源于stack exchange,提问作者Kęstutis Ramulionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:36:22