当我打电话给这个
代码:
- 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
- }
- }
- }
内部发生什么这在网络层面如何工作?它会为每次调用Read或者是在内部执行任何批量读取来创建数据库的新的往返行程吗?
我在问,因为我只是读ODP.NET在OracleCommand和OracleDataReader中提供了FetchSize属性,我明白为定义每一次往返数据库应该预先载入多少条记录.我不知道sql Server是否以类似的方式工作,如果有一些类似的行为可以在某个地方进行配置.我在sqlCommand,sqlDataReader或CommandBehavior中没有找到任何这样的配置.
数据从
sql server流传输到
sqlConnection.PacketSize
属性大小的数据包中的客户端.如果您的客户端无法
快速读取结果,网卡上的缓冲区将被填满,协议会检测到这一点,并停止接收,从而使得
sql server的网卡发送缓冲区已满,并停止发送任何和所有数据.如果你想下到protocl级别,然后查看
TDS protcol.