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

代码初始运行几次后为何出现空SqlDataReader?

问题排查与修复方案

针对你代码中出现的空数据阅读器问题,结合代码细节整理出以下修复点:


1. 修复连接初始化的语法错误

原代码中SqlConnection的using语句缺少闭合括号,会导致连接创建失败,直接引发数据阅读器为空:

// 错误写法
using (SqlConnection sqlConnection = new SqlConnection(_sqlConnectionStr)
// 修复后
using (SqlConnection sqlConnection = new SqlConnection(_sqlConnectionStr))

2. 循环读取所有结果行

原代码用if (dataReader.Read())仅读取第一行数据,若结果集为空则直接跳过,需改为while循环遍历所有行:

// 错误写法
if (dataReader.Read())
// 修复后
while (dataReader.Read())
{
    System.Diagnostics.Debug.WriteLine(dataReader);
    requests.Add(new Request() // 确保类型与List<Request>匹配
    {
        com = dataReader.GetFieldValue<int>(0),
        req = dataReader.GetFieldValue<Guid>(1),
        st = dataReader.GetFieldValue<int>(3),
    });
}

3. 修正Debug输出的未定义变量

原代码中queryString未声明,直接输出会引发异常中断执行,替换为实际的查询变量:

// 错误写法
System.Diagnostics.Debug.WriteLine(queryString);
// 修复后
System.Diagnostics.Debug.WriteLine(query);

4. 统一对象类型匹配

方法返回List<Request>,但原代码添加的是RequestHeader实例,若两者无继承关系会导致类型错误,需替换为Request类型实例:

// 错误写法
requests.Add(new RequestHeader()
// 修复后(确保Request类包含对应属性)
requests.Add(new Request()
{
    com = dataReader.GetFieldValue<int>(0),
    req = dataReader.GetFieldValue<Guid>(1),
    st = dataReader.GetFieldValue<int>(3),
});

5. 验证查询语句拼接的合法性

确保initial基础查询结尾包含WHERE 1=1,否则拼接条件时会出现SQL语法错误(比如SELECT ... AND id=@Id):

// 示例initial的正确格式
string initial = "SELECT com, req, xxx, st FROM YourTable WHERE 1=1";

6. 确认字段索引与类型匹配

检查initial对应的SELECT语句中,第0列是int类型的com、第1列是Guid类型的req、第3列是int类型的st,索引或类型不匹配会抛出异常,导致阅读器无法正常读取数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:02:55