2012-07-05 47 views
0

我有一种情况,我分配一些会话的价值。我有一种情况是代码重复调用。此代码有时会抛出对象null的错误。我没有得到为什么发生这种情况,而我将值分配给it.My代码如何解决对象空错误?

if (HttpContext.Current.Cache["Cache"] == null) 
      { 
       CreateChanhe(); 
       DataTable dtcache= HttpContext.Current.Cache["HNS Connection"] as DataTable; //CreateConnectString(CCMMUtility.Encryptdata(txtPin.Text)); 
       string sqlFilter = "Sp = '" + classses.DecryptString(HttpContext.Current.Request.Cookies["Cookies"].Values["sp"].ToString(), classses.SP) + "'"; 
       DataRow[] dr = dtcache.Select(sqlFilter); 
       if (dr.Length > 0) 
       { 
        String[] Con = new String[2]; 
        Con[0] = dr[0][0].ToString(); 
        Con[1] = dr[0][1].ToString(); 
        sp= Con[1]; 
        HttpContext.Current.Session["Name"] = dr[0][2].ToString(); 
       } 
      } 

当我尝试做“添加监视”,而其调试说,“价值”有一定价值,但HttpContext.Current.Session [“Name”]为空。有人可以让我知道为什么会发生这种情况。

其实我正在创建一个缓存,然后从该缓存中填充会话。这是基于我的要求。

+1

此代码行似乎对我来说,我想应该有一些其他代码行导致此错误。你应该详细说明。 – yogi

+0

嗨, 当您尚未分配任何会话变量值时,您可能正在检查HttpContext.Current.Session [“Name”]值。 可能请发布您的代码,以便我可以分析更多。 –

+0

我已编辑了该代码请审查。 – Visions

回答

0

我怀疑dr[0][2]为空,所以当你打电话给.ToString()你会得到一个NRE。

+0

我已经检查过它的值,它不为空它有一定的价值。但是HttpContext.Current.Session [“Name”]为空 – Visions

+0

@Visions与执行代码的方法/功能相关。我猜!你的代码在application_start或者没有进行用户请求的事件中执行。 – adatapost

+0

我认为如果是这种情况(Application_Start),他会得到不同的异常。例如,如果您尝试在集成管道模式下运行的IIS7 +下的Application_Start中尝试使用HttpContext特定的东西,您将得到一个特定的异常,而不是NRE。对我来说,有两种可能性:无论是我在答案中已经表达的那种,还是在后台线程中运行此代码,显然他没有访问会话。 –

0

是否HttpContext.Current为空?如果这样包装像这样的空检查:

if (HttpContext.Current != null) 
{ 
if (HttpContext.Current.Cache["Cache"] == null) 
      { 
       CreateChanhe(); 
       DataTable dtcache= HttpContext.Current.Cache["HNS Connection"] as      DataTable; //CreateConnectString(CCMMUtility.Encryptdata(txtPin.Text)); 
       string sqlFilter = "Sp = '" + classses.DecryptString(HttpContext.Current.Request.Cookies["Cookies"].Values["sp"].ToString(), classses.SP) + "'"; 
       DataRow[] dr = dtcache.Select(sqlFilter); 
       if (dr.Length > 0) 
       { 
        String[] Con = new String[2]; 
        Con[0] = dr[0][0].ToString(); 
        Con[1] = dr[0][1].ToString(); 
        sp= Con[1]; 
        HttpContext.Current.Session["Name"] = dr[0][2].ToString(); 
       } 
      } 
} 
+0

我试过这个,但又得到同样的错误 – Visions

+0

你可以在HttpContext.Current.Session [“Name”]返回null的地方添加代码吗? –

+0

我在这里为会话分配了一些价值。 – Visions

相关问题