选看这样的一个例子:
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
|
请发表评论