首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在共享类中缓存数据

在共享类中缓存数据
EN

Stack Overflow用户
提问于 2012-01-31 00:41:26
回答 2查看 229关注 0票数 1

有没有人能告诉我为什么这个不起作用?如果我将测试函数放到它后面的代码中,它会工作得很好。如果我把它放到测试类中,数据总是什么都不是。

代码语言:javascript
运行
复制
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ASPxGridView1.DataSource = TestClass.Test()
    ASPxGridView1.DataBind()
    ASPxLabel1.Text = Now
End Sub
End Class

Public Class TestClass
Public Shared Function Test() As DataTable
    Test = DirectCast(HttpContext.Current.Cache("Test"), DataTable)
    If Test Is Nothing Then
        Dim sql As String = "SELECT field1,field2,field3 FROM test "
        Using conn As New SqlConnection(Materials.Conn)
            Using cmd As New SqlCommand(sql, conn)
                Dim dep As New SqlCacheDependency(cmd)
                Test = New DataTable
                conn.Open()
                Test.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
                HttpContext.Current.Cache.Insert("Test", Test, dep, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(24))
            End Using
        End Using
    End If
End Function
End Class
EN

回答 2

Stack Overflow用户

发布于 2012-01-31 01:06:48

您必须返回一些DataTable值!

更新:我添加了SqlDependency.Start(connstring),但没有这一行,您应该会看到错误。这表明Test不是Nothing

代码语言:javascript
运行
复制
Public Class TestClass
Public Shared Function Test() As DataTable
    Test = DirectCast(HttpContext.Current.Cache("Test"), DataTable)
    If Test Is Nothing Then
        Dim sql As String = "SELECT * from categories"
        Dim constring As String = ConfigurationManager.ConnectionStrings("HalloweenConnectionString").ConnectionString
        Using conn As New SqlConnection(constring)
            Using cmd As New SqlCommand(sql, conn)
                Dim dep As New SqlCacheDependency(cmd)
                SqlDependency.Start(constring)
                Test = New DataTable
                conn.Open()
                Test.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
                HttpContext.Current.Cache.Insert("Test", Test, dep, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(24))
            End Using
        End Using
    End If
End Function

结束类

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 23:08:15

这就是我最终怎么做的。我仍然不清楚为什么我必须通过sqlcachedepency。

代码语言:javascript
运行
复制
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Dim dep As SqlCacheDependency = Nothing
    ASPxGridView1.DataSource = TestClass.Test(dep)
    ASPxGridView1.DataBind()
    ASPxLabel1.Text = Now
End Sub
End Class

Public Class TestClass
Public Shared Function Test(ByRef dep As SqlCacheDependency) As DataTable
    Test = DirectCast(HttpRuntime.Cache("Test"), DataTable)
    If Test Is Nothing Then
        Dim sql As String = "SELECT field1,field2,field3 FROM test "
        Using conn As New SqlConnection(Materials.Conn)
            Using cmd As New SqlCommand(sql, conn)
                dep = New SqlCacheDependency(cmd)
                Test = New DataTable
                conn.Open()
                Test.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
                HttpRuntime.Cache.Insert("Test", Test, dep, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(24))
            End Using
        End Using
    End If
End Function
End Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9067384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档