M
mycwcgr_new
Unregistered / Unconfirmed
GUEST, unregistred user!
C#中, 对数据库的操作,使用递归调用出错(出错信息为OleDbCommand是当前正忙的Open,Fectching。)
下面的程序,NewQueryNode是一个递归调用,出错信息为OleDbCommand是当前正忙的Open,Fectching。
我猜想是由于在递归调用时,有些变量如reader没有执行reader.Close()靠造成的。
不过我仍然非常奇怪:按理,每次递归调用NewQueryNode,它使用新的内存空间,变量之间应互不干扰啊!!
public void NewFillTree(int userID,int parentID) //临时放在此处用于测试目的
{
try
{
ConstClass.databaseConnect.Open();
//打开Access数据库连接
OleDbCommand myCommand=new OleDbCommand();
myCommand.Connection=ConstClass.databaseConnect;
NewQueryNode(myCommand,userID,parentID);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
ConstClass.databaseConnect.Close();
}
}
private void NewQueryNode(OleDbCommand myCommand,int userID,int rootID) //临时放在此处用于测试目的
{
myCommand.CommandText="select * from categorytable where UserID="+userID
+" and ParentID="+rootID
+" and ElderBrotherID=0";
OleDbDataReader reader=myCommand.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader["Name"].ToString());
rootID=int.Parse(reader["NodeID"].ToString());
NewQueryNode(myCommand,userID,rootID);
//递归调用
}
reader.Close();
}
当我将程序作如下改动时,中间过程MessageBox.Show(reader["Name"].ToString());的执行正常,但在程序结束时显示错误“阅读器关闭时Read的尝试无效”
private void NewQueryNode(OleDbCommand myCommand,int userID,int rootID) //临时放在此处用于测试目的
{
myCommand.CommandText="select * from categorytable where UserID="+userID
+" and ParentID="+rootID
+" and ElderBrotherID=0";
OleDbDataReader reader=myCommand.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader["Name"].ToString());
rootID=int.Parse(reader["NodeID"].ToString());
reader.Close();
//加了一行
NewQueryNode(myCommand,userID,rootID);
}
}
下面的程序,NewQueryNode是一个递归调用,出错信息为OleDbCommand是当前正忙的Open,Fectching。
我猜想是由于在递归调用时,有些变量如reader没有执行reader.Close()靠造成的。
不过我仍然非常奇怪:按理,每次递归调用NewQueryNode,它使用新的内存空间,变量之间应互不干扰啊!!
public void NewFillTree(int userID,int parentID) //临时放在此处用于测试目的
{
try
{
ConstClass.databaseConnect.Open();
//打开Access数据库连接
OleDbCommand myCommand=new OleDbCommand();
myCommand.Connection=ConstClass.databaseConnect;
NewQueryNode(myCommand,userID,parentID);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
ConstClass.databaseConnect.Close();
}
}
private void NewQueryNode(OleDbCommand myCommand,int userID,int rootID) //临时放在此处用于测试目的
{
myCommand.CommandText="select * from categorytable where UserID="+userID
+" and ParentID="+rootID
+" and ElderBrotherID=0";
OleDbDataReader reader=myCommand.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader["Name"].ToString());
rootID=int.Parse(reader["NodeID"].ToString());
NewQueryNode(myCommand,userID,rootID);
//递归调用
}
reader.Close();
}
当我将程序作如下改动时,中间过程MessageBox.Show(reader["Name"].ToString());的执行正常,但在程序结束时显示错误“阅读器关闭时Read的尝试无效”
private void NewQueryNode(OleDbCommand myCommand,int userID,int rootID) //临时放在此处用于测试目的
{
myCommand.CommandText="select * from categorytable where UserID="+userID
+" and ParentID="+rootID
+" and ElderBrotherID=0";
OleDbDataReader reader=myCommand.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader["Name"].ToString());
rootID=int.Parse(reader["NodeID"].ToString());
reader.Close();
//加了一行
NewQueryNode(myCommand,userID,rootID);
}
}