我有一种情况,我正在为会话分配一些价值。我有一种情况,即该代码重复调用。有时这个代码会抛出对象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”] 为空。有些人可以告诉我为什么会这样。
实际上我正在创建一个缓存然后从该缓存中填充会话。这是基于我的要求。
答案 0 :(得分:0)
我怀疑dr[0][2]
为空,因此当您致电.ToString()
时,您将获得NRE。
答案 1 :(得分: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();
}
}
}