小弟最近在学asp.net ,做了一个登陆的界面,下面是登陆代码一部分,不过session有个问题让我困惑很久了。想请教下高手啊其中Session["TPop"] =dss.Tables[0].Rows[0][15].ToString();这行有问题,
通过断点调试时,监视到dss.Tables[0].Rows[0][15].ToString()的值为"a"   但Session["TPop"]值为""但前面有行Session["SPop"] = dss.Tables[0].Rows[0][14].ToString();却是正常的 能把值给Session["SPop"]. 始终想不通为什么??????
————————————————————————分割线 下面是代码————————————————————————
protected void btnLogin_Click(object sender, EventArgs e)
    {
        if (txtName.Text == string.Empty)
        {
            Response.Write("<script language=javascript>alert('登录名不能为空!')</script>");
            return;
        }
        else
        {
            if (Request.QueryString["id"] == "0")
            {
                Session["ID"] = "0";
                DataSet ds = null;
                DataSet dss = null;
                usermanage.UserName = txtName.Text;
                usermanage.UserPwd = txtPwd.Text;
                ds = usermanage.Login(usermanage);
                dss = usermanage.GetAllUser("tb_User");                if (ds.Tables[0].Rows.Count > 0) 
                {
                    Session["Name"] = txtName.Text;
                    Session["Pop"] = "学生";
                    Session["SPop"] = dss.Tables[0].Rows[0][14].ToString();
                    Response.Redirect("Default.aspx");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('用户名称或密码不正确!')</script>");
                }
            }
            if (Request.QueryString["id"] == "1")
            {
                Session["ID"] = "1";
                DataSet ds = null;
                DataSet dss = null;
                hostmanage.HostName = txtName.Text;
                hostmanage.HostPwd = txtPwd.Text;
                ds = hostmanage.Login(hostmanage);
                dss = hostmanage.GetAllHost("tb_Host");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    Session["Name"] = txtName.Text;
                    Session["Pop"] = "教师";
                    Session["TPop"] =dss.Tables[0].Rows[0][15].ToString();
                    Response.Redirect("Default.aspx");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('教师名称或密码不正确!')</script>");
                }
            }
            if (Request.QueryString["id"] == "2")
            {
                Session["ID"] = "2";
                DataSet ds = null;
                adminmanage.AdminName = txtName.Text;
                adminmanage.AdminPwd = txtPwd.Text;
                ds = adminmanage.Login(adminmanage);
                if (ds.Tables[0].Rows.Count > 0 )
                {
                    Session["Name"] = txtName.Text;
                    Session["Pop"] = "管理员";
                    Response.Redirect("Default.aspx");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('管理员名称或密码不正确!')</script>");
                }
            }
        }
    }

解决方案 »

  1.   

    Could you confirm your debug result any more time?
      

  2.   

    你把它分开写试试
    string aa = dss.Tables[0].Rows[0][15].ToString(); 
    Session["TPop"] = aa;
      

  3.   

    直接输出 dss.Tables[0].Rows[0][15].ToString()看看
      

  4.   

    你看  dss.Tables[0].Rows.count 有没有16个。如果有 16个  dss.Tables[0].Rows[0][15].ToString() 
     才有可能有值
      

  5.   

     if (Request.QueryString["id"] == "0") 
         dss = usermanage.GetAllUser("tb_User"); 
         Session["SPop"] = dss.Tables[0].Rows[0][14].ToString(); 
     
     
     if (Request.QueryString["id"] == "1") 
          dss = hostmanage.GetAllHost("tb_Host"); 
           Session["TPop"] =dss.Tables[0].Rows[0][15].ToString();  Request.QueryString["id"] 传进来的值只能满足一个条件,根据你的代码,等于"0" or "1" or "2" 所以只有当Request.QueryString["id"] ="1" 时,Session["TPop"]才会有可能不为空(当然是你的数据库字段要不为空)
      

  6.   

    Session["SPop"] = dss.Tables[0].Rows[0][14].ToString();却是正常的,有值
    这样当然  Session["TPop"]  就是为空了,因为没给它赋值