【发布时间】:2012-05-09 19:14:38
【问题描述】:
我相信在 JAVA 中,我们可以将数据读取器设置为指向其结果集的第一行。我有一个包含 20 多列的 SQLDataReader,我需要在使用整个结果集之前预处理一些列并计算一些值。第一次读取数据读取器后是否可以重新读取数据读取器以获取选定的列?还是我需要将结果存储在数据表中并稍后读取?
【问题讨论】:
标签: c# sql-server sqldatareader
我相信在 JAVA 中,我们可以将数据读取器设置为指向其结果集的第一行。我有一个包含 20 多列的 SQLDataReader,我需要在使用整个结果集之前预处理一些列并计算一些值。第一次读取数据读取器后是否可以重新读取数据读取器以获取选定的列?还是我需要将结果存储在数据表中并稍后读取?
【问题讨论】:
标签: c# sql-server sqldatareader
来自 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx 的 MSDN 文档
提供一种从 SQL Server 数据库中读取只进的行流的方法。
您可以一次读取一行,但是一旦您读取了下一行,就不能再回到一行。
您可以按任意顺序、任意次数读取一行中的列,还可以根据需要跳过字段。
while (reader.Read())
{
var a = reader[2]; // you can skip fields
var b = reader[0]; // you don't have to read the fields in order
var c = reader[2]; // you can re-read fields
}
【讨论】:
不,这是不可能的。
来自 MSDN 上的SqlDataReader:
提供一种从 SQL Server 数据库读取只进流行的方法。
(强调我的)
您可以将所有需要的数据读入一个集合,并根据需要多次迭代副本。
【讨论】:
也许您可以运行 2 个查询作为存储过程的一部分。第一个查询仅限于预先计算字段的字段,第二个查询仅限于其余字段。然后在你的 C# 中使用reader.ReadNext 方法。
另外,SQL 确实支持计算字段,这可能会使事情变得更简单。
但我个人会将整个数据读入List<T> 进行处理...
【讨论】: