Wu.Country@侠缘

勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!

导航

[导入]ASP.net里的几个逻辑问题!


选看这样的一个例子:

  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

posted on 2005-08-18 17:51  Wu.Country@侠缘  阅读(259)  评论(0编辑  收藏  举报