DataSet存入Session的函数,在页面Astring MktLimitDisID = Guid.NewGuid().ToString(); //产生新Guid DataSet ds = (DataSet)Session["dsMktSF"]; bool check = true; //日期查核
if(ds!=null)
{
for(int i=0; i<=ds.Tables[0].Rows.Count-1; i++)
{
if(! this.CompareDate(ds.Tables[0].Rows[i]["SDate"].ToString(), ds.Tables[0].Rows[i]["EDate"].ToString(), SDate))
{
check = false; break;
} if(! this.CompareDate(ds.Tables[0].Rows[i]["SDate"].ToString(), ds.Tables[0].Rows[i]["EDate"].ToString(), EDate))
{
check = false; break;
} if(ds.Tables[0].Rows[i]["SDate"].ToString() == SDate && ds.Tables[0].Rows[i]["EDate"].ToString() == EDate)
{
check = false; break;
}
} if(check)
{
DataRow drow; drow = ds.Tables[0].NewRow(); drow["MktLimitDisID"] = MktLimitDisID; if(Request.Params["MktID"]==null)
{
drow["MktID"]=DBNull.Value;
}
else
{
drow["MktID"] = Request["MktID"];
} drow["LimitPrice"] = SFPrice; drow["SDate"] = " " + SDate; drow["EDate"] = " " + EDate; drow["Status"] = "";

if(count==null||count=="")
{
drow["Num"]=DBNull.Value;
}
else
{
drow["Num"]=count;
} ds.Tables[0].Rows.Add(drow); Session["dsMktSF"] = ds; ds.Dispose(); Response.Write("OK"); Response.End();
}
else
{
Session["dsMktSF"] = ds; ds.Dispose(); Response.Write("日期有重复区间");
DataTable dt=new DataTable();
dt.Columns.Add("Date",typeof(string));
dt.Columns.Add("ID",typeof(Guid));
dt.Columns.Add("No",typeof(string));
for(int i=0; i<=ds.Tables[0].Rows.Count-1; i++)
{

if(! this.CompareDate(ds.Tables[0].Rows[i]["SDate"].ToString(), ds.Tables[0].Rows[i]["EDate"].ToString(), SDate))
{
DataRow row=dt.NewRow();
row["Date"]=ds.Tables[0].Rows[i]["SDate"].ToString().Substring(0,16)+"~"+ds.Tables[0].Rows[i]["EDate"].ToString().Substring(0,16);
row["ID"]= new Guid(ds.Tables[0].Rows[i]["MktID"].ToString());
row["No"]=(GemSTMarket.MarketModify.GetProNo(new Guid(ds.Tables[0].Rows[i]["MktID"].ToString()))).ProNo;
dt.Rows.Add(row);
} if(! this.CompareDate(ds.Tables[0].Rows[i]["SDate"].ToString(), ds.Tables[0].Rows[i]["EDate"].ToString(), EDate))
{
DataRow row=dt.NewRow();
row["Date"]=ds.Tables[0].Rows[i]["SDate"].ToString().Substring(0,16)+"~"+ds.Tables[0].Rows[i]["EDate"].ToString().Substring(0,16);
row["ID"]= new Guid(ds.Tables[0].Rows[i]["MktID"].ToString());
row["No"]=(GemSTMarket.MarketModify.GetProNo(new Guid(ds.Tables[0].Rows[i]["MktID"].ToString()))).ProNo;
dt.Rows.Add(row);
} if(ds.Tables[0].Rows[i]["SDate"].ToString() == SDate && ds.Tables[0].Rows[i]["EDate"].ToString() == EDate)
{
DataRow row=dt.NewRow();
row["Date"]=ds.Tables[0].Rows[i]["SDate"].ToString().Substring(0,16)+"~"+ds.Tables[0].Rows[i]["EDate"].ToString().Substring(0,16);
if(ds.Tables[0].Rows[i]["MktID"].ToString()=="")
{
row["ID"]=DBNull.Value;
}
else
{
row["ID"]= new Guid(ds.Tables[0].Rows[i]["MktID"].ToString());
}
GemSTMarket.MyProInfo myproinfo=GemSTMarket.MarketModify.GetProNo(new Guid(ds.Tables[0].Rows[i]["MktID"].ToString()));
if(myproinfo==null)
{
return;
}
else
{
row["No"]=(GemSTMarket.MarketModify.GetProNo(new Guid(ds.Tables[0].Rows[i]["MktID"].ToString()))).ProNo;
}
dt.Rows.Add(row);
}

}
Session["dtMktWN"]=dt;
Response.Write("<script>window.open ('../Market/MarketAdd_07_Warning.aspx','时间重覆提醒','height=370, width=600, top=70,left=230, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');</script>");
Response.End();
}
}
else
{
ds=new DataSet();
DataTable dt=new DataTable();
dt.Columns.Add("MktLimitDisID",typeof(Guid));
dt.Columns.Add("MktID",typeof(Guid));
dt.Columns.Add("LimitPrice",typeof(decimal));
dt.Columns.Add("SDate",typeof(DateTime));
dt.Columns.Add("EDate",typeof(DateTime));
dt.Columns.Add("Status",typeof(string));
dt.Columns.Add("Num",typeof(int));
ds.Tables.Add(dt); DataRow drow; drow = ds.Tables[0].NewRow(); drow["MktLimitDisID"] = MktLimitDisID; if(Request.Params["MktID"]==null||Request.Params["MktID"]=="")
{
drow["MktID"]="2943A433-990E-452D-9EBA-B926BEA65F14"; 
}
else
{
drow["MktID"] = Request.Params["MktID"];
} drow["LimitPrice"] = SFPrice; drow["SDate"] = " " + SDate; drow["EDate"] = " " + EDate; drow["Status"] = "";

if(count==null||count=="")
{
drow["Num"]=DBNull.Value;
}
else
{
drow["Num"]=count;
} ds.Tables[0].Rows.Add(drow); Session["dsMktSF"] = ds; ds.Dispose();
Response.Write("OK"); Response.End();
所有没注明的变量都是参数传入的。跟踪此页面,Session全都有值在另一页面取Session
会发现drow["MktLimitDisID"]和drow["MktID"]里面没有任何值!而其它值依然存在!注意红色字体,那是关键,其中必定有一个影响到了这两个值的存取。
当删除此两句时在另一页面可正常取到所有Session中的值。引发问题:如果是当前页面产生的对象里面的数据类型值时,存入Session时是否是存的对象的地址?或者说对象被web页面序列化后的某种规则,当对象销毁,序列化找不到参照物而导致无法取出Session中的值?

解决方案 »

  1.   

    我的印象中,SESSION是单独开发出一块空间进行保存值的,一个访问的SESSION的ID也是唯一的才对。 是不是时间超过导致SESSION无效引起的?
      

  2.   

    Session["dsMktSF"] = ds.Copy();
    如何?
      

  3.   

    Session如果是超时,不会取得到值呀。我这里只是其它有两个值销失了,而不是取不到值!!!
      

  4.   

    ds.Dispose();
    Response.End();
    这两句注掉就没事了。
      

  5.   

    本来是想借此计论一下,关于Web序列化问题的!对此比较模糊!