如何从SQL Server获取数据到SqlDataReader?

Lad*_*nka 17 .net sql-server oracle ado.net odp.net

当我调用此代码时:

using (var connection = new SqlConnection(connectionString))
{
    var command = new SqlCommand("SELECT * FROM Table", connection);
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while(reader.Read())
        {
            // Do something here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

内部会发生什么?这在网络层面如何运作?是否会为每次调用进行新的数据库往返,Read或者内部是否有批量读取?

我这么问是因为我刚才读的ODP.NET提供FetchSize两个属性OracleCommandOracleDataReader我的理解是多少记录应通过单次往返于数据库中预装的定义.我想知道SQL Server是否以类似的方式工作,并且是否存在可以在某处配置的类似行为.我没有找到任何这样的配置SqlCommand,SqlDataReaderCommandBehavior.

Mla*_*dic 11

数据从Sql server以SqlConnection.PacketSize属性中的大小的数据包流式传输到客户端.如果你的客户端无法快速读取结果,网卡上的缓冲区就会被填满,协议就会检测到并停止接收,从而使sql server的网卡发送缓冲区已满,并停止发送任何和所有数据.如果你想要进入protocl级别,那么请查看TDS protcol .