堆栈跟踪信息:
[NullReferenceException: 未将对象引用设置到对象的实例。]
   jsj.sch.Page_Load(Object sender, EventArgs e)
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +29
   System.Web.UI.Page.ProcessRequestMain() +724

解决方案 »

  1.   

    1. 试试bool bLoginOK = false;try
    {
        SqlDataReader myDataReader;
        SqlCommand myCommand = new SqlCommand( logsql,con.link);
        myDataReader = myCommand.ExecuteReader();   if(myDataReader.Read())
       {
          Session["username"]=myDataReader["username"].ToString();
          Session["rights"]=myDataReader["schright"].ToString();
          bLoginOK = true;
        }
      
        myDataReader.Close();
    }
    catch (Exception ex)
    {
      Response.Write("Something is wrong:" + ex.Message);
    }
    finally
    {
        con.link.Close();
    }if (!bLoginOK)
      Response.Redirect("index.aspx");
    2.
    为什么一会儿,
    con.open();
    而另一个地方却
    con.link.Close();
    ?3. 你验证的方法很不好,参看
    Don't Require sa Permissions
    http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityTips/default.aspx
      

  2.   

    问题是不是出在
    Session["username"]=myDataReader["username"].ToString();
    Session["rights"]=myDataReader["schright"].ToString();
    你可以去掉这2句话看看
      

  3.   

    一般的用户登陆,当登陆成功的时候,才给session付值。
    if(mesg=="ok")
    {Session["username"]=myDataReader["username"].ToString();
    Session["rights"]=myDataReader["schright"].ToString();}这是我的代码:没有出现异常
    string name=this.user.Text.ToString().Trim();
    string psd=this.psw.Text.ToString().Trim();
    string conn=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\mydba.mdb;";
    string sql="select * from login where name='"+name+"'and password='"+psd+"'";
    OleDbConnection oleconn=new OleDbConnection(conn);
    oleconn.Open();
    try
    {
    OleDbDataReader myDataReader;
    OleDbCommand cmd=new OleDbCommand(sql,oleconn);
    myDataReader = cmd.ExecuteReader();
    while(myDataReader.Read())
    { }
    }
    catch
    {

    }
      

  4.   

    原因 1。你的 Connection 对象 con 使用的帐号数据是否也来自 uname.Text 和 upwd.Text,如果是,当提供的用户名和密码不对的时候, con 肯定要出问题。
    原因 2。当你在 try...catch 中使用 Redirect 的时候,系统会抛出一个 ThreadAbortException 异常,你需要捕获这个异常。在代码中加这样一段try
    {
    SqlDataReader myDataReader;
    SqlCommand myCommand = new SqlCommand( logsql,con.link);
    myDataReader = myCommand.ExecuteReader();
    while(myDataReader.Read())
    {
    Session["username"]=myDataReader["username"].ToString();
    Session["rights"]=myDataReader["schright"].ToString();
    }
    myDataReader.Close();
    }
    catch
    {
    try
    {
    Response.Redirect("index.aspx");
    }
    catch(ThreadAbortException)
    {
      //ignore
    }
    }
    }
      

  5.   

    谢谢诸位!按照saucer的方法,问题已经解决!
    TO: saucer(思归, MS .NET MVP) 
    关于“2”:
    open()是我在一个文件中定义的打开数据库连接的函数。
    link是SqlConnection的一个对象。
    原代码如下:public void open()

    string linkstr="server=localhost;uid=****;pwd=****;database=mydb"+";";
    link=new SqlConnection(linkstr);
    link.Open();
    }