我是ADO.net的新手
我需要从DB检索一组行,然后迭代一对一并有条件地将它们发送到可能UPDATE
或DELETE
从DB接收行的某些对象。
从SqlDataReader
文档中我没有正确理解它是如何工作的(它是从DB读取所有行还是只读取其中的一些行或逐个读取?)
来自MSDN:
结果在查询执行时返回,并存储在 客户端上的网络缓冲区,直到您使用Read请求它们 DataReader的方法。
command.ExecuteReader()
期间或reader.Read()
期间?结果的内容是什么 - 所有数据还是部分数据? Read
从何处读取数据?来自DB还是来自Cache?会影响数据修改(UPDATE
或DELETE
)从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
}
}
}
或更好地将SqlDataAdapter
与DataSet
或DataTable
一起使用?
答案 0 :(得分:0)
对于您所描述的内容,最好使用SqlDataAdapter和DataTable - 它们被设计为服务器数据的“脱机缓存”,它将跟踪所做的任何更改,并且可以在SqlDataAdapter.Update时更新服务器的副本()被称为。
SqlDataReader被设计为来自服务器的只进,只读数据流 - 您必须构建自己的逻辑来更新服务器。
回答您的其他问题:
何时返回确切的结果?
ExecuteReader()完成时返回结果。根据您的查看方式,这些是部分或完整的结果 - 服务器已完全执行查询并将所有结果发送到客户端,但客户端一次只处理一个数据包的结果。
本地机器上的“网络缓冲区”是什么?
MSDN正在谈论的“网络缓冲区”是指存储从服务器读取的最新网络数据包的8Kb(或“数据包大小”连接字符串关键字设置的任何大小)字节数组。这是处理网络数据的应用程序的标准做法 - 您将一大块数据从网络复制到本地缓冲区,解析该数据,然后获取下一个块。
从哪里读取数据?从DB还是从Cache?
Read()处理来自网络缓冲区的数据,直到缓冲区中没有剩余数据,然后它将从网络读取下一个数据包到缓冲区,并继续处理。