首页 文章

在C#中多次读取SQLDataReader?

提问于
浏览
2

我相信JAVA我们可以设置数据读取器指向它的结果集的第一行 . 我有一个超过20列的SQLDataReader,我需要预处理一些列并在使用整个结果集之前计算一些值 . 第一次读取数据读取器后,是否可以重新读取数据读取器?或者我是否需要将结果存储在数据表中并稍后从中读取?

3 回答

  • 2

    来自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
    }
    
  • 4

    不,这是不可能的 .

    来自MSDN上的SqlDataReader

    提供从SQL Server数据库中读取仅向前行的流的方法 .

    (强调我的)

    您可以将所有需要的数据读入集合中,并根据需要迭代复制 .

  • 1

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

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

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

相关问题