SqlCommand.ExecuteReader在Close时传输数据,即使没有一个Read

本文关键字:有一个 Read 数据 ExecuteReader Close 传输 SqlCommand | 更新日期: 2023-09-27 17:55:04

给定一个通过TCP的数据库连接
当我执行以下代码时
然后我在任务管理器中看到SQL Server总是通过网络发送查询的数据(当Reader关闭时)-即使我们不读取/获取它们!

var command = new SqlCommand("SELECT TOP 100 Stamp, Blob", connection) { CommandTimeout = commandTimeout };
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection)
{
    // even if we do not read anything here
    //while (reader.Read())
    //{
        //var values = reader.GetValues();
        //if (check condition on values)
        //   break;
    //}
}

正常吗?原因是什么?有解决方案吗?

我们不想下载查询返回的所有数据

SqlCommand.ExecuteReader在Close时传输数据,即使没有一个Read

我相信TDS不具备跳过结果的能力。您不能告诉服务器不发送它们。相反,客户端必须在它们传入时跳过它们。

以下是一些选项:

  1. 接受这种行为
  2. 取消
  3. 关闭连接
  4. 修改查询,不返回您不需要的结果(为什么不能这样做?似乎是显而易见的解决方案。)