即使没有单个Read,SqlCommand.ExecuteReader也会在Close上传输数据

时间:2014-03-28 16:24:01

标签: c# sql-server ado.net .net-3.5

通过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;
    //}
}

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

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

1 个答案:

答案 0 :(得分:2)

我认为TDS无法跳过结果。您无法告诉服务器跳过发送它们。相反,客户端必须在流入时跳过它们。

以下是一些选项:

  1. 忍受此行为
  2. 取消命令
  3. 关闭连接
  4. 修改查询以不返回您不需要的结果(为什么不能这样做?看起来像显而易见的解决方案。)