未将对象引用设置到对象的实例。如何解决?
“/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; --------------------编程问答--------------------
--------------------编程问答-------------------- Application["Counter"] 这个东西是空的 --------------------编程问答--------------------
正解... --------------------编程问答-------------------- 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
--------------------编程问答-------------------- 引用类型 在使用前 判断是否为空 --------------------编程问答-------------------- 全局变量赋值有问题。。。。用时也要先判断再使用。。 --------------------编程问答--------------------
但我已经引用了啊
Application.Lock();
Application["Counter"] = Count;
Application["OnLineCounter"] = 0;
Application.UnLock(); --------------------编程问答-------------------- --------------------编程问答--------------------
你第一次访问页面的时候,在执行这个之前先执行的Application["Counter"] = (int)Application["Counter"] + 1;这个操作吧。。 --------------------编程问答--------------------
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();取出正确值了。。 --------------------编程问答--------------------
好的,我再试一试^ --------------------编程问答-------------------- 你沒有先判斷,用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