【发布时间】:2013-04-17 16:46:55
【问题描述】:
我是 ADO.net 的新手
我需要从 DB 中检索一组行,然后逐一迭代并有条件地将它们发送到一些对象,这些对象可能从 DB 接收到行 UPDATE 或 DELETE。
从SqlDataReader 文档中我没有正确理解它是如何工作的(它是从数据库中读取所有行还是只读取其中一些行或一个接一个?)
来自MSDN:
结果在查询执行时返回,并存储在 客户端上的网络缓冲区,直到您使用 Read 请求它们 DataReader 的方法。
- 究竟何时返回结果?在
command.ExecuteReader()期间还是在reader.Read()期间? Result 的内容是什么 - 所有数据还是部分数据? - 什么是本地计算机上的“网络缓冲区”?
-
Read从哪里读取数据?来自数据库还是来自缓存?
会影响从数据库检索下一个数据的数据修改(UPDATE 或DELETE)吗?
代码存根:
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?
【问题讨论】:
-
您是否尝试过 SSMS 中的活动监视器,当您执行代码时,您会看到发送到服务器的 SQL。
-
还是不行,但我会做的。但我的问题更具理论性 - 我想了解它的具体工作原理,因为总会找到解决方法
-
请忽略之前对我超时的评论。您是否尝试过调试代码并在 SSMS 中使用活动监视器来查看正在执行的 SQL 以及何时执行,尝试单步执行代码,您将确切看到发生了什么。为了回答您的第一点,command.executereader() 方法会将命令提交到服务器。结果存储在客户端PC上看看这个链接ADO.NET。看看这本书,从 APress 开始 C# 5.0 数据库,ADO.NET 编程的优秀资源。
标签: c# sql-server ado.net sqldatareader sqldataadapter