2012-05-09 42 views
2

我相信在JAVA中,我们可以将数据读取器设置为指向结果集的第一行。我有一个SQLDataReader,有超过20列,我需要预先处理一些列并计算一些值,然后才使用整个结果集。第一次阅读数据阅读器之后是否可以重新阅读数据阅读器以获取所选列?或者我需要将结果存储在数据表中并在稍后读取?在C#中多次读取SQLDataReader?

回答

4

从MSDN文档在http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

提供从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 
} 
2

不,这是不可能的。

SqlDataReader MSDN上:

提供从SQL Server数据库读取行的只进的方式。

(重点煤矿)

你可以阅读所有需要的数据到一个集合和经常你要遍历副本。

1

也许你可以运行2个查询作为sproc的一部分。第一个查询限于预先计算的字段的字段,其余字段的第二个查询。然后在你的C#中使用reader.ReadNext方法。

或者,SQL不支持计算字段,这可能会使事情变得更简单。

但个人而言,我会将整个数据读入List<T>进行处理...