0

我有一种情况,我正在为会话分配一些值。我有这种代码重复调用的情况。有时,此代码会引发对象 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();
                }
            }

当我在调试时尝试执行“添加手表”时,它说“值”有一些值,但HttpContext.Current.Session["Name"]为空。有人可以让我知道为什么会这样。

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

4

2 回答 2

0

我怀疑那dr[0][2]是空的,所以当你调用.ToString()它时,你会得到一个 NRE。

于 2012-07-05T06:01:48.707 回答
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();
                }
            }
}
于 2012-07-05T06:03:02.157 回答