小弟做了一个网页用户的密码修改,但是出现了一个问题解决不了,下面密码修改的后台代码以及运行后的错误显示,烦请路过的大侠们帮们解决一二,不胜感激!
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class changecode : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.Session["memberlogin"] == null)
        {
            Response.Redirect("login.aspx");
        }
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {        string code = FunStr(ToMD5(Oldcode.Text.ToString()));
        string newcode = FunStr(ToMD5(Newcode.Text.ToString()));
        SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connstr"]);
        SqlCommand selectCmd = new SqlCommand("select * from userinformation where name='" + Session["name"].ToString() + "'and code='" + code + "'",conn);
        try
        {
            conn.Open();
            SqlDataReader sdr = selectCmd.ExecuteReader();
            if (sdr.Read())
            {
                Response.Write("change");
                sdr.Close();
                SqlCommand updateCmd = new SqlCommand("update userinformation set code='" + newcode + "' where name='" + Session["name"].ToString() + "'", conn);
                int i = updateCmd.ExecuteNonQuery();
                if (i > 0)
                {
                    Response.Write("<script language=javascript>alert('成功修改密码!')</script>");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('修改密码失败!')</script>");
                }
            }
            else
            {
                Response.Write("<script language=javascript>alert('您输入的密码错误,检查后重新输入!')</script>");
            }
        }
        catch (System.Exception ee)
        {
            Response.Write("<script language=javascript>alert('" + ee.Message.ToString() + "')</script>");
        }
        finally
        {
            conn.Close();
        }
    }
    protected void btnReset_Click(object sender, EventArgs e)
    {
        Oldcode.Text = "";
        Newcode.Text = "";
        Confirmcode.Text = "";
    }
    protected void btnBack_Click(object sender, EventArgs e)
    {
        Response.Redirect("choose.aspx");
    }    public static string FunStr(string str)
    {
        str = str.Replace("&", "&amp;");
        str = str.Replace("<", "&lt;");
        str = str.Replace(">", "&gt");
        str = str.Replace("'", "''");
        str = str.Replace("*", "");
        str = str.Replace("\n", "<br/>");
        str = str.Replace("\r\n", "<br/>");
        str = str.Replace("select", "");
        str = str.Replace("insert", "");
        str = str.Replace("update", "");
        str = str.Replace("delete", "");
        str = str.Replace("create", "");
        str = str.Replace("drop", "");
        str = str.Replace("delcare", "");
        str = str.Replace(" ", "&nbsp;");        str = str.Trim();
        if (str.Trim().ToString() == "")
            str = "无";
        return str;
    }
    public string ToMD5(string str)
    {
        return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").Substring(8, 16);
    }
}
未将对象引用设置到对象的实例。
说明:执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息:System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 26:         string newcode = FunStr(ToMD5(Newcode.Text.ToString()));
行 27:         SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connstr"]);
行 28:         SqlCommand selectCmd = new SqlCommand("select * from userinformation where name='" + Session["name"].ToString() + "'and code='" + code + "'");
行 29:         try
行 30:         {
源文件:d:\XXX版网站\changecode.aspx.cs    行:28 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   changecode.btnSubmit_Click(Object sender, EventArgs e) in d:\XXX版网站\changecode.aspx.cs:28
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.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

解决方案 »

  1.   

    Session["name"]==null?"":Session["name"].ToString()
      

  2.   


    请问这个需要修改哪里,是要把name给改成memberlogin吗?因为我前台设计是不需要输入用户名的,所以要根据session里面的信息来寻找要修改的用户资料。。
      

  3.   


    我需要把session中的信息提取出来,但是不知道怎么去修改了,烦请帮忙解决一下哈~
      

  4.   

    原来以为懂了,一听,不懂了,你Session["name"]应该在登录时写入用户名    上述语句你就抄吧
      

  5.   

    在Session["name"]赋值后加断点调试,查看是否正确赋值
    又或者你把  “name”写错了?
    另  会不会你只试了一次?由于登录时间过长Session超时,会被自动清空,从而取到null我在瞎猜了确认下有没赋值吧
      

  6.   

    出现了这样的nullreferenceexception这样的错误,请记住可以说是绝大部分都是引用类型为Null了,然后你还在使用这个引用类型就会出现这样的错误,你的上面是引用Session["name"]这个为null了导致的,
    避免的方法就是用引用变量之前先判断一下是否为Null
    if(Session["name"]!=null)
    {
        //use Session["name"]
    }
    我想你的Session["name"]是不是没有赋值呢,还是丢失了啊,Session这个是很容易丢失的。
      

  7.   

    在没有运行代码之前,先设置一下断点,然后F5运行到那边。然后按F11或者是F10运行,然后看看你的变量是不是跟你想的是一样的。
      

  8.   

    楼主引用了为空的Session["name"],所以报错了,再引用之前加个判断是否为空就可以了。
      

  9.   

    session如果没值你转换就会出错
      

  10.   

    Session["name"] 在哪里赋值的,如果根本没赋值,那怎么能用...
    Session["memberlogin"] 这里存的是什么,你所说的 根据session里面的信息来寻找要修改的用户资料 应该把Session["memberlogin"]的值取出来加以分析处理得到你要的用户信息,,,
      

  11.   

    修改之前 你先判断Session["name"]是否有值。没值先登录。 懂?
      

  12.   

     Session["name"].ToString()为空  
    把28行这段代码改为 SqlCommand selectCmd = new SqlCommand("select * from userinformation where name='" + Session["name"]==null?"":Session["name"].ToString() + "'and code='" + code + "'");
      

  13.   

     new SqlCommand("select * from userinformation where name='" + Session["name"].ToString() + "'and code='" + code + "'",conn);
    把这段sql语句的拼写放在外面,用stringbulider,拼写时判断。string sqlstr="select * from userinformation where name="
    if(session["name"]!=null)
    {
    sqlstr.append(session["name"].tostring());
    }
    注意所有的参数拼加都判断下
      

  14.   

    string sql="select * from userinformation where name='" + Session["name"].ToString() + "'and code='" + code + "'";加断点一步一步调试 看看sql这句话 并复制到查询分析器中 看看执行的结果是什么  能不能执行
      

  15.   


    为什么加上这个之后出来一个错误“当前上下文不存在名称sqlstr”
      

  16.   

    Session["name"]为空 也可能session过期了 判断一下是否为空