请想象一下这个方法原型:
protected void getChildren(int parentIdeaIdentifier, OleDbDataReader reader, ref string result, int level)
调用例如 getChildren(331, reader, "empty", 0);
假设阅读器 (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 次。仅当阅读器为 331 时才进行操作!如果是 331,则使用不同的参数再次递归调用此函数。
问题: 此 DataReader 不会从索引 [0] 重新开始,但会以某种方式记住它的状态。因此,如果我在第二级阅读器中再次进入此函数,则从它结束的地方开始,在这种情况下从索引 [2] 开始。
如何让 DataReader 从头开始?dataReader 是错误的数据结构吗?
非常感谢您的帮助!