ADO.net DataReader 被递归调用 -> 不会在新的递归框架的开头再次启动

ADO.net DataReader is called recursivley -> does not start again at the beginning in new recursive frame

请想象一下这个方法原型:

protected void getChildren(int parentIdeaIdentifier, OleDbDataReader reader, ref string result, int level)

电话是getChildren(331, reader, "empty", 0);

假设 reader (OleDbDataReader) 有这些简化的 4 个条目:

[0]: reader["Idea_ID"]: "148"
[1]: reader["Idea_ID"]: "72"
[2]: reader["Idea_ID"]: "331"
[3]: reader["Idea_ID"]: "331"

所以现在请看一下这个小的递归方法:

protected void getChildren(int parentIdeaIdentifier, OleDbDataReader reader, ref string parentAndChildren, int level)
    {
            while (reader.Read())   //4 times in our case
            {
                if (Convert.ToInt32(reader["Parent_Idea_Identifier"].ToString()) == parentIdeaIdentifier)
                {
                    ideaIdentifier = Convert.ToInt32(reader["Idea_Identifier"].ToString());
                     //parentAndChildren = "do something";
                      getChildren(ideaIdentifier, reader, ref parentAndChildren, level - 1);

                }
                else
                    continue;
            }
    }

了解这个方法的作用并不重要! 但是问题来了:

如果函数是第一次进入,while循环总共4次。 操作仅在例如如果 reader 是 331! 如果是 331,将使用不同的参数再次递归调用此函数。

问题: 此 DataReader 不会再次从索引 [0] 开始,但会以某种方式记住其状态。因此,如果我在第 2 级再次进入此函数,reader 从它结束的地方开始,在本例中是从 index[2].

如何让 DataReader 重新从头开始? dataReader 是错误的数据结构吗?

非常感谢您的帮助!

是的,结构错误。

使用数据适配器填充 DataTable 并使用该 DataTable 而不是您的 DataReader。

或者正如 stuartd 指出的那样,您可以从 reader:

创建 DataTable
DataTable dt = new DataTable();
dt.Load(reader);

因此,您可以在 Rows 集合上使用 foreach,而不是 while 循环。