我在global.asax写了如下代码
    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' 在会话启动时激发
        Session.Timeout = 60
        Session("ShoppingCart") = ""
    End Sub然后在某一页面写page_load写了如下代码
        Dim Cart As DataTable
        If Session("ShoppingCart") = Nothing Then
            Cart = New DataTable
            Cart.Columns.Add(New DataColumn("Title", GetType(String)))
            Cart.Columns.Add(New DataColumn("Price", GetType(String)))
            Session("ShoppingCart") = Cart
        End If 这个页面在首次运行时没有出现错误提示,但当刷新一下就会出现错误
“运算符对 类型“DataTable” 和 'Nothing' 无效”

解决方案 »

  1.   

    If Session("ShoppingCart") = Nothing Then
                Cart = New DataTable
                Cart.Columns.Add(New DataColumn("Title", GetType(String)))
                Cart.Columns.Add(New DataColumn("Price", GetType(String)))
                Session("ShoppingCart") = Cart
            End If 
    这里面的代码永远不会被执行,因为Session一开始就被初始化为"",而""和Nothing是不相等的
      

  2.   

    If Session("ShoppingCart") = Nothing Then
    改为
    If Session("ShoppingCart") is Nothing Then
      

  3.   

    回fancyf(凡瑞) :
    这一段是有执行的,我验证过了
    因为我试过在这个IF语结束后加了几段代码
    dim aaa as DataTable
    aaa=Session("ShoppingCart")
    label1.text=aaa.Columns.Count
    结果运行页面是label1显示“2”,这就证明那一段代码是有被执行的。
      

  4.   

    回hchxxzx(NET?摸到一点门槛) 
    如果按你照你所说的把"="改"is"的话,反尔出现fancyf(凡瑞)所说的情况,该段代码不能被执行
      

  5.   

    怪,在VB中竟然"" 等于 Nothing
    我对vb不熟,还以为Nothing相当于C#中的null呢
      

  6.   

    is nothing正解还可isdbnull(object)  //return: false true
      

  7.   

    回gxboy(Blin 小学生学.NET):
        is nothing是判断那个Session是否存在,所以这样的话,一开始那段代码根本没有执行到,因为那个Session一早就已经设定了。其实原因我想是因为DataTable对象是否有值不能用"="来进行判断。不知应该用什么来进行判断现在折衷的办法就是先不要在global里设定Session。