这个项目是前人留下的,webform的,之前在客户那边用了一年半也完全没问题,最近发现登录不上去。输入了账户名和密码,单击登录后报错。
下面这个是登录button<INPUT type="submit" id="Submit1" name="Submit1" value=" " runat="server" onserverclick="Submit1_ServerClick" style="border-style:none; background: url(images/登录.png); width: 66px; height: 26px; margin-top: 0px;">下面这个Submit1_ServerClickprotected void Submit1_ServerClick(object sender, System.EventArgs e)
        {           if (!Page.IsValid) return;           string sql = "exec spLogon @LogonName,@LogonPwd";
           SqlParameter[] parameters ={
                        new SqlParameter("@LogonName", SqlDbType.NVarChar,15),
                       new SqlParameter("@LogonPwd", SqlDbType.NVarChar,20)};
           parameters[0].Value = LogonID.Text.Trim();           
           parameters[1].Value = Password.Text;     
           SqlDataReader dr = null;
          try
          {
            dr = DbHelperSQL.ExecuteReader(sql,parameters);
            if (dr.Read())
            {
                int id=Convert.ToInt32(dr[0]);
                TorionRole role = (TorionRole)Convert.ToInt32(dr[1]);
                string realname = dr[2].ToString();
                var user = new TorionUser(){ID=id,Role = role,RealName=realname};
                Session["TorionHR:CurrentUser"] = user;
                //write cookies to client
                Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim()); 
                Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
                FormsAuthentication.RedirectFromLoginPage("*", false);
            }
            else
            {
                ClientScript.RegisterStartupScript(this.GetType(), "faillogon", JScript.Alert("账号或密码不正确,请重新登录。"));
            }
          }
          finally
          {
            dr.Close();
          }
        }
下面是错误信息
“/Cynthia”应用程序中的服务器错误。 
________________________________________
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [NullReferenceException: 未将对象引用设置到对象的实例。]
   Cynthia.WEB.Logon.Submit1_ServerClick(Object sender, EventArgs e) +672
   System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) +105
   System.Web.UI.HtmlControls.HtmlInputButton.RaisePostBackEvent(String eventArgument) +106
   System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5087________________________________________
版本信息: Microsoft .NET Framework 版本:2.0.50727.1891; ASP.NET 版本:2.0.50727.1879这到底是错在什么地方了呢?? .net framework 版本问题??c# 登录

解决方案 »

  1.   

    根据你的编写,我预计 问题在:
    dr = DbHelperSQL.ExecuteReader(sql,parameters);它可能返回的对象是null
    也就是说,DbHelperSQL 对返回dr进行了封装,个人猜测可能进行了try 处理,所以返回的null问题可能是连接不到数据库,人为做360优化的时候,可能停止了数据库服务
      

  2.   

    楼上的方案试一下,我觉得可能性有80%简单的处理方法:让对方 用企业管理器打开数据库,不能够连接,就是正解如果连接上了,就要看的DbHelperSQL 内部的编写
      

  3.   

    目测应该是数据库里面的东西变了 TorionRole role = (TorionRole)Convert.ToInt32(dr[1]);应该是这个没有查询到吧,还有 这个TorionRole 应该是一个实体类,怎么一个int就转换了? 不解 
      

  4.   

    用客户的电脑远程连接数据库,
    1.看看能否正常登陆数据库
    2.看看存储过程spLogon是否能正常运行。是否有人修改了这个存储过程
      

  5.   

    估计是跟新补丁了造成1433端口拒绝访问或者被其他进程使用造成的,运行netstat -an看看1433端口是否在监听
      

  6.   

    Cynthia.WEB.Logon.Submit1_ServerClick(Object sender, EventArgs e) +672看看672行是哪行
      

  7.   

    十之八九是这里,close 之前判等一下 dr 是不是 null          finally
              {
                dr.Close();
              }
      

  8.   

    估计是360把SQL服务停了,我遇到过这种情况
      

  9.   

    1.存储过程是否找到啊
    2.加个catch捕获一下异常
      

  10.   

    Response.Cookies["CookiesUser"]是否存在,这里是最大可能出现Null的,因为你直接访问了它的属性。
      

  11.   

    楼上说的是的 cookies被清除了 。
                   //write cookies to client
                    Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim()); 
                    Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
      这里可能会出问题。加个判断
     if( Request.Cookies["CookiesUser"]!==null)
    {
                    //write cookies to client
                    Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim()); 
                    Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
      
    }
      

  12.   

    支持4楼,应该是连不上数据库了,按webconfig配置,用udl测试一下吧,看能否连接成功。
      

  13.   

    结贴咯,确实是连不上数据库了。重启了SQL~~~
    谢谢各位大大们~~~