当前位置:编程学习 > C#/ASP.NET >>

未将对象引用设置到对象的实例。如何解决?

“/myweb”应用程序中的服务器错误。
--------------------------------------------------------------------------------

未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误: 


行 49:         // 在新会话启动时运行的代码
行 50:         Application.Lock();
行 51:         Application["Counter"] = (int)Application["Counter"] + 1;
行 52:         Application["OnLineCounter"] = (int)Application["OnLineCounter"] + 1;
行 53:         Session.Timeout = 1;
 
--------------------编程问答-------------------- (int)Application["Counter"]  这个是空的,空引用

给他一个初始值 Application["Counter"]=0; --------------------编程问答-------------------- Application["Counter"] = ((int)(Application["Counter"]??0)) + 1; --------------------编程问答--------------------
引用 1 楼 kk297173176 的回复:
(int)Application["Counter"]  这个是空的,空引用

给他一个初始值 Application["Counter"]=0;

--------------------编程问答-------------------- Application["Counter"]  这个东西是空的 --------------------编程问答--------------------
引用 2 楼 sandy945 的回复:
Application["Counter"] = ((int)(Application["Counter"]??0)) + 1;

正解... --------------------编程问答-------------------- Application["Counter"]为null,检查你的赋值
或者加个预防
Application["Counter"] = (int)(Application["Counter"] == null ? 0 : Application["Counter"]) + 1; --------------------编程问答-------------------- 二元操作符  ??
a??b
如果a非空,则返回a;否则返回b. --------------------编程问答-------------------- 这句用VB要怎样写:
Application["Counter"] = (int)(Application["Counter"] == null ? 0 : Application["Counter"]) + 1
 
--------------------编程问答-------------------- 引用类型 在使用前 判断是否为空 --------------------编程问答-------------------- 全局变量赋值有问题。。。。用时也要先判断再使用。。 --------------------编程问答--------------------
引用 1 楼 kk297173176 的回复:
(int)Application["Counter"] 这个是空的,空引用

给他一个初始值 Application["Counter"]=0;


但我已经引用了啊

         Application.Lock();
        Application["Counter"] = Count;
        Application["OnLineCounter"] = 0;
        Application.UnLock(); --------------------编程问答-------------------- --------------------编程问答--------------------
引用 11 楼 spark823 的回复:
引用 1 楼 kk297173176 的回复:
(int)Application["Counter"] 这个是空的,空引用

给他一个初始值 Application["Counter"]=0;


但我已经引用了啊

  Application.Lock();
Application["Counter"] = Count;
Application["OnLineCounter"……

你第一次访问页面的时候,在执行这个之前先执行的Application["Counter"] = (int)Application["Counter"] + 1;这个操作吧。。 --------------------编程问答--------------------
引用 13 楼 liuyileneal 的回复:
引用 11 楼 spark823 的回复:
引用 1 楼 kk297173176 的回复:
(int)Application["Counter"] 这个是空的,空引用

给他一个初始值 Application["Counter"]=0;


但我已经引用了啊

Application.Lock();
Application["Counter"] = Count;
Applic……


void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Initial Catalog=Personweb_Data.MDF;Integrated Security=True");  //Integrated Security=True uid=sa;pwd="
        conn.Open();
        System.Data.SqlClient.SqlCommand commond = new System.Data.SqlClient.SqlCommand("select * from VisitInfo", conn);
        int Count = (int)commond.ExecuteScalar();
        conn.Close();
        
        //System.IO.StreamReader objReader = new System.IO.StreamReader(Server.MapPath("Counter.txt"));
        //int Count = int.Parse(objReader.ReadLine());
        //objReader.Close();
        
        Application.Lock();
        Application["Counter"] = Count;
        Application["OnLineCounter"] = 0;
        Application.UnLock();

    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Initial Catalog=Personweb_Data.MDF;Integrated Security=True");
        conn.Open();
        string commandText=string .Format ("update  VisitInfo set VisitCount={0} ",Application ["Counter"].ToString ());
        System.Data.SqlClient.SqlCommand commond = new System.Data.SqlClient.SqlCommand(commandText  , conn);
        commond.ExecuteNonQuery ();
        conn.Close();
        
        //int Counter = (int)Application["Counter"];
        //System.IO.StreamWriter objWriter = new System.IO.StreamWriter(Server.MapPath("Counter.txt"), false);
        //objWriter.WriteLine(Counter);
        //objWriter.Close();
    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
        Application.Lock();
        Application["Counter"] = (int)Application["Counter"] + 1;
        Application["OnLineCounter"] = (int)Application["OnLineCounter"] + 1;
        Session.Timeout = 1;
        
        //当新用户登录的时候,Counter变量加1
        Application.UnLock();
       

    } --------------------编程问答-------------------- 你再运行下试试,我这并没有遇到问题。。。 --------------------编程问答-------------------- 单步调试,确保你的int Count = (int)commond.ExecuteScalar();取出正确值了。。 --------------------编程问答--------------------
引用 15 楼 liuyileneal 的回复:
你再运行下试试,我这并没有遇到问题。。。


好的,我再试一试^ --------------------编程问答-------------------- 你沒有先判斷,用Session和Application應該判斷一下
if(Application["Counter"]!=null)
{
}
else
{

} --------------------编程问答--------------------
引用 18 楼 wubing1111 的回复:
你沒有先判斷,用Session和Application應該判斷一下
if(Application["Counter"]!=null)
{
}
else
{

}



<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Initial Catalog=Personweb_Data.MDF;Integrated Security=True");  //Integrated Security=True uid=sa;pwd="
        conn.Open();
        System.Data.SqlClient.SqlCommand commond = new System.Data.SqlClient.SqlCommand("select * from VisitInfo", conn);
        int Count = (int)commond.ExecuteScalar();
        conn.Close();
        
        //System.IO.StreamReader objReader = new System.IO.StreamReader(Server.MapPath("Counter.txt"));
        //int Count = int.Parse(objReader.ReadLine());
        //objReader.Close();
        
        Application.Lock();
        Application["Counter"] = Count;
        Application["OnLineCounter"] = 0;
        Application.UnLock();

    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Initial Catalog=Personweb_Data.MDF;Integrated Security=True");
        conn.Open();
        string commandText=string .Format ("update  VisitInfo set VisitCount={0} ",Application ["Counter"].ToString ());
        System.Data.SqlClient.SqlCommand commond = new System.Data.SqlClient.SqlCommand(commandText  , conn);
        commond.ExecuteNonQuery ();
        conn.Close();
        
        //int Counter = (int)Application["Counter"];
        //System.IO.StreamWriter objWriter = new System.IO.StreamWriter(Server.MapPath("Counter.txt"), false);
        //objWriter.WriteLine(Counter);
        //objWriter.Close();
    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
        Application.Lock();
        Application["Counter"] = (int)Application["Counter"] + 1;
        Application["OnLineCounter"] = (int)Application["OnLineCounter"] + 1;
        Session.Timeout = 1;
        
        //当新用户登录的时候,Counter变量加1
        Application.UnLock();
       

    }

    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。
        Application.Lock();
        Application["OnLineCounter"] = (int)Application["OnLineCounter"] - 1;
        //当用户退出后,Counter变量减1
        Application.UnLock();
    }
       
</script>

应该添加到什么地方啊? --------------------编程问答-------------------- 他说的是加在
 void Session_Start(object sender, EventArgs e)  
  {
  // 在新会话启动时运行的代码
if(!=null)//加在这吧。。
{
  Application.Lock();
  Application["Counter"] = (int)Application["Counter"] + 1;
  Application["OnLineCounter"] = (int)Application["OnLineCounter"] + 1;
  Session.Timeout = 1;
  }
else
{
}  
  //当新用户登录的时候,Counter变量加1
  Application.UnLock();
    

  }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,