2

我是 ADO.net 的新手,我需要从 DB 中检索一组行,然后逐一迭代并有条件地将它们发送到可能UPDATEDELETE从 DB 接收行的某些对象。从SqlDataReader文档中我没有正确理解它是如何工作的(它是从数据库中读取所有行还是仅读取其中一些行或一个接一个?)来自MSDN

结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到您使用 DataReader 的 Read 方法请求它们。

  • 什么时候返回结果?期间command.ExecuteReader()还是期间reader.Read()?Result 的内容是什么 - 所有数据还是部分数据?
  • 什么是本地机器上的“网络缓冲区”?
  • 从哪里Read读取数据?来自数据库还是来自缓存?

是否会影响数据修改(UPDATEDELETE)从下一个数据的数据库中检索?代码存根:

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(queryString, connection))
{
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader());
    {
    while (reader.Read())
        {
            //ReadSingleRow...
        //Perform some checks and if TRUE send to a manager obeject whcih perform UPDATE or DELETE on this record
        }
    }
}

或更好地SqlDataAdapterDataSetDataTable在这里一起使用?

4

1 回答 1

0

对于您所描述的,最好使用 SqlDataAdapter 和 DataTable - 它们被设计为服务器数据的“离线缓存”,它将跟踪所做的任何更改并可以在 SqlDataAdapter.Update() 时更新服务器的副本叫。

SqlDataReader 被设计为来自服务器的只进、只读数据流——您必须构建自己的逻辑来更新服务器。

要回答您的其他问题:

什么时候返回结果?

ExecuteReader() 完成时返回结果。根据您的看法,这些是部分结果或完整结果 - 服务器已完全执行查询并将所有结果发送给客户端,但客户端一次只处理一个数据包。

什么是本地机器上的“网络缓冲区”?

MSDN 所说的“网络缓冲区”是指一个 8Kb(或由“数据包大小”连接字符串关键字设置的任何大小)字节数组,用于存储从服务器读取的最新网络数据包。这是处理网络数据的应用程序的标准做法——您将一大块数据从网络复制到本地缓冲区,解析该数据,然后获取下一个块。

Read 从哪里读取数据?来自数据库还是来自缓存?

Read() 处理来自网络缓冲区的数据,直到缓冲区中没有更多数据,然后它将从网络中读取下一个数据包到缓冲区,并继续处理。

于 2013-05-08T23:21:04.170 回答