asp.net中的奇怪数据集

时间:2010-12-17 09:21:33

标签: c# asp.net session dataset

我已经构建了一个名为Transaction_Time的数据集。

我在Page_Load

上打了电话
Transaction_Time tranTme = new Transaction_Time();

把它放在会话中。

Session["Transaction"] = tranTme;

然后我调用该会话并转换为数据集。

DataSet dstTranTime = (DataSet)Session["Transaction"];

我收到了以下错误。

无法将“Transaction_Time”类型的对象强制转换为“System.Data.DataSet”。

[InvalidCastException: Unable to cast object of type 'Transaction_Time' to type 'System.Data.DataSet'.]
   Transaction_Time.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\William29_11_2010\Transaction_Time.aspx.cs:47
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

其他一些页面也可以。但对于某些页面,它没有。

我做错了什么或者...... ???

2 个答案:

答案 0 :(得分:3)

你输入typeof(Transaction_Time)并尝试输出typeof(DataSet)。这将失败,直到 Transaction_Time不是从DataSet派生的。尝试读取Transaction_Time而不是DataSet。

   Transaction_Time tranTme = new Transaction_Time(); 
   ....
   Session["Transaction"] = tranTme; 
   ....
   Transaction_Time dstTranTime = Session["Transaction"] as Transaction_Time; 

   if (dstTranTime == null)
       System.Dignostics.Trace.WriteLine("Ups! Expecting Transaction_Time, but got {0}", Session["Transaction"] );

答案 1 :(得分:2)

看起来你可能有两个名为Transaction_Time的类。如果您创建了一个名为Transaction_Time的类并从DataSet中派生它,那么您就有一个名为Transaction_Time的类,该类派生自,例如,Page。然后编译器可能会混淆你的意思,你可能偶尔会存储页面Transaction_Time而不是DataSet Transaction_Time。

在创建Transaction_Time类并使用完全限定名称时要明确,或者重命名其中一个类,以使名称不含糊。这应该可以解决你的问题(假设我的假设是正确的)。