Кэширование данных в общем классе - PullRequest
1 голос
/ 30 января 2012

Может кто-нибудь сказать мне, почему это не работает?Если я помещу тестовую функцию в код, она будет работать нормально.Если я помещу его в тестовый класс, данные всегда будут ничем.

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

Ответы [ 2 ]

1 голос
/ 30 января 2012

Вы должны вернуть некоторое значение DataTable обратно!

Обновление : я добавил SqlDependency.Start(connstring) при отсутствии этой строки, вы должны были увидеть ошибку. Это означает, что тест не является ничем

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

Конечный класс

0 голосов
/ 31 января 2012

Вот так я и сделал. Я до сих пор не понимаю, почему я должен пройти sqlcachedepency.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...