选看这样的一个例子:
public void FindParentID(long int_ChildID,long[] arr_parIDs,int int_times)
{
SqlDataReader obj_dataReader;
SqlCommand obj_command = new SqlCommand("select s_parID from t_cpyNewsSort where s_id="+int_ChildID.ToString(),this.obj_conn);
obj_dataReader = obj_command.ExecuteReader();
if(obj_dataReader.Read())
{
long log_ParID = obj_dataReader.GetInt64(0);
obj_dataReader.Close();
this.TraceMsg(log_ParID.ToString());
arr_parIDs.SetValue(log_ParID,int_times);
if(log_ParID!=-1)
{
FindParentID(log_ParID,arr_parIDs,++int_times);
}
}
else
{
obj_dataReader.Close();
}
}
这一句让我想了关半天也没想明白为什么要放在前面。这样试过,
public void FindParentID(long int_ChildID,long[] arr_parIDs,int int_times)
{
SqlDataReader obj_dataReader;
SqlCommand obj_command = new SqlCommand("select s_parID from t_cpyNewsSort where s_id="+int_ChildID.ToString(),this.obj_conn);
obj_dataReader = obj_command.ExecuteReader();
if(obj_dataReader.Read())
{
long log_ParID = obj_dataReader.GetInt64(0);
this.TraceMsg(log_ParID.ToString());
arr_parIDs.SetValue(log_ParID,int_times);
if(log_ParID!=-1)
{
FindParentID(log_ParID,arr_parIDs,++int_times);
}
}
obj_dataReader.Close();
}
结果是该函数不能迭代调用了。不理解,唯一的解释就是: obj_dataReader对像不是在迭代的时候重新建立的,而是在使用同一个对像。不明白这是为什么,难道程序的运行结构不再是原来的栈内存模式??
还有这一个:
private bool CheckUser()
{
FormsIdentity id = (FormsIdentity)User.Identity;
if(User.Identity.IsAuthenticated)
{
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
TraceMsg(ticket.UserData.ToString());
string str_UserData = ticket.UserData;
if(str_UserData.IndexOf("_027NetAdmin")!=-1)
{
str_adminPower = str_UserData.Substring(str_UserData.IndexOf(",")+1);
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
FormsIdentity id = (FormsIdentity)User.Identity;上面的两个换位置后也出现错误,这个我好理解,因为如果用户没有取得认证的时候,显示Identity是不存在的,当然也就不可能给FormsIdenity赋值了。但我郁闷的是MSDN上的示例就是那样做的。说明一个问题:MS自己都不是很清楚这些个Framework的完整结构,所以它里面也是有错误的(逻辑错误),也就更别说第三方公司提供的一些示例了,所以最后决定了:只能相信自己了。
文章来源:http://computer.mblogger.cn/wucountry/posts/44262.aspx