Public Function GetData() As DataTable        Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("connstr").ConnectionString)
        Dim cmd As SqlCommand = conn.CreateCommand
        With cmd
            .CommandText = "select customerid,companyname from customers"
        End With
        Dim da As New SqlDataAdapter(cmd)
        Dim ds As New DataSet
        Try
            da.Fill(ds, "customers")
        Catch ex As Exception
            Throw ex
        Finally
            conn.Dispose()
            cmd.Dispose()
            da.Dispose()
            ds.Dispose()
        End Try        Return ds.Tables("customers")    End Function一段很简单的代码,看finally中,ds.dispose方法已经销毁了这个对象,为何 
Return ds.Tables("customers") 能返回正确的结果集,并能够正确的呈现到dataview控件上?

解决方案 »

  1.   

    B/S跟C/S中的数据缓存机制不一相!
      

  2.   

    DS缓存可能是没有被立即清除,NET中的内存资源回收机制是每过一段时间检测一次
      

  3.   

    LZ,把你dataview绑定的代码贴出来.还有你设个中断看看dispose后ds对象还在不在.
      

  4.   

    dispose实现了IDispose接口,目的是通知垃圾回收器回收资源.
    而垃圾回收器将在该对象超出使用域后进行垃圾回收.