代码之家  ›  专栏  ›  技术社区  ›  masoud ramezani

当DataReader变为空时?

  •  0
  • masoud ramezani  · 技术社区  · 15 年前

    我有以下代码:

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            DataRow searchedDR = ds.Tables[dr["name"].ToString()].Rows.Find(reader["ID"].ToString());
            if (searchedDR != null)
                ds.Tables[dr["name"].ToString()].Rows.Remove(searchedDR);
        }
    }
    

    当此代码块成功完成时,数据读卡器(读卡器)变为空? 原因是什么? 之后我需要和这个读者一起工作。解决方案是什么?

    5 回复  |  直到 15 年前
        1
  •  4
  •   Marc Gravell    15 年前

    数据阅读器是 软管 数据。当您使用它正在读取的所有数据时,它将变为“空”(或更好的类比:运行时是空的)。

    它不是一个存储设备(它不是一个桶)。如果以后需要数据,请将其存储在-a DataTable 或者一个类模型。

        2
  •  3
  •   Jørn Schou-Rode dscher    15 年前

    这个 IDataReader 定义只读、仅转发的数据提供程序。一旦你打电话给 Read() 方法,无法返回上一行。因为接口没有提供 Reset() 方法是重新开始的唯一方法,它是再次执行数据库命令。把读卡器想象成一个数据流——你可以请求下一行,但一旦读了,它就消失了。

    如果需要多次遍历数据库查询的结果,则需要将结果缓存到应用程序内存中。您可以手动对读卡器进行初始传递,但使用 IDataAdapter 相反。

        3
  •  1
  •   tvanfosson    15 年前

    取决于将产生多少数据。如果不是太多,您可以使用读卡器将数据读取到临时数据结构中,然后对这两个操作的数据结构进行迭代。如果有太多的数据无法有效地将其保存在内存中,那么除了创建一个新的数据读取器并重新执行该命令之外,您别无选择。

        4
  •  1
  •   Steffen    15 年前

    DataReader仅向前,不能后退一步。它用于快速、单向的数据读取操作。

    如果以后需要处理数据,则必须使用已将数据复制到其中的数据表,或重新对其进行关联。

        5
  •  1
  •   Adeel    15 年前

    数据存储器 是从数据库查询返回的数据流。执行查询时,第一行通过流返回到数据读取器。然后流保持连接到数据库,准备检索下一条记录。DataReader一次从数据库中读取一行,一次只能向前移动一条记录。当DataReader从数据库中读取行时,可以读取和计算每行中列的值,但不能编辑这些值。

    通常,我们使用DataReader ADO.NET控件,其中不需要像绑定下拉控件或数据中继器控件那样转到前一行。为了保持它的轻量,微软在数据阅读器控件中只支持前向功能。

    以后再使用 可计算的 或者创建一个自定义类来保存内容。

    资料来源: http://www.techbaba.com/q/2758-why+datareader+forward+only.aspx

    推荐文章