选择一组行并UPDATE或REMOVE some:SqlDataReader或SqlDataAdapter + DataSet

时间:2013-04-17 16:46:56

标签: c# sql-server ado.net sqldatareader sqldataadapter

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

  

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

  • 何时返回确切的结果? command.ExecuteReader()期间或reader.Read()期间?结果的内容是什么 - 所有数据还是部分数据?
  • 本地计算机上的“网络缓冲区”是什么?
  • Read从何处读取数据?来自DB还是来自Cache?

会影响数据修改(UPDATEDELETE)从DB检索下一个数据吗? 代码存根:

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一起使用?

1 个答案:

答案 0 :(得分:0)

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

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

回答您的其他问题:

  

何时返回确切的结果?

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

  

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

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

  

从哪里读取数据?从DB还是从Cache?

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