读书人

当DataSet存入Session之后引发的有关问

发布时间: 2011-12-12 22:59:56 作者: rapoo

当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();
如何?

读书人网 >C#

热点推荐