当DataSet存入Session之后引发的问题!
DataSet存入Session的函数,在页面A
- C# code
string 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;
[color=#FF0000]ds.Dispose();[/color]
Response.Write("OK");
[color=#FF0000]Response.End();[/color]
所有没注明的变量都是参数传入的。跟踪此页面,Session全都有值。。。
在另一页面取Session
会发现drow["MktLimitDisID"]和drow["MktID"]里面没有任何值!而其它值依然存在!
注意红色字体,那是关键,其中必定有一个影响到了这两个值的存取。
当删除此两句时在另一页面可正常取到所有Session中的值。
引发问题:如果是当前页面产生的对象里面的数据类型值时,存入Session时是否是存的对象的地址?或者说对象被web页面序列化后的某种规则,当对象销毁,序列化找不到参照物而导致无法取出Session中的值?
[解决办法]
厉害,楼主牛人
[解决办法]
粉牛
[解决办法]
我的印象中,SESSION是单独开发出一块空间进行保存值的,一个访问的SESSION的ID也是唯一的才对。
是不是时间超过导致SESSION无效引起的?
[解决办法]
Session["dsMktSF"] = ds.Copy();
如何?