25. maj 2005 - 11:42Der er
19 kommentarer og 1 løsning
Opdatering af cache ?
Hejsa,
Jeg har lavet følgende som smider en række kategorier i en cache til visning på en side :
Public Shared Function getCategory(ByVal Language As String) Dim Source As DataView = CType(HttpContext.Current.Cache("Category"), DataView) If Source Is Nothing Then Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source End If Return Source End Function
På min aspx side laver jeg så følgende for smide dem i en dropdownbox :
Men når jeg så tilføjer en ny kategori til databasen bliver den ikke vist i dropdownboxen. Hvad gør jeg forkert her ? Eller hvad skal der til for at cachen opdateres når der er nye data i databasen som ikke ligger i cachen ?
Lige nu tjekker du bare om der ligger noget i din cache, og hvis der gør, så viser returnere du den cachede liste. Hvis du vil tjekke om der er kommet nye data til, bliver du ligeledes nødt til at tjekke for opdateringer i databasen, og derefter opdatere cachen.
Så... ----- Code ----- If Source Is Nothing Then Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source Else Dim intRows As Integer
If intRows <> ProductsData.GetCategoryCount(Language).("tbl_products_cat").Rows.Count Then HttpContext.Current.Cache("Category").Clear() Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source End if End If ----- Code -----
I dette tilfælde vil den tjekke om der er kommet flere eller mindre poster til dit datatable, og såfremt opdatere cachen...
'Table' is not a member of 'System.Data.Dataview' --- i denne linie : intRows = Source.Tables("tbl_products_cat").Rows.Count
'GetCategoryCount' is not a member of 'MitProjekt.ProductsData' --- i denne linie : If intRows <> ProductsData.GetCategoryCount(Language).("tbl_products_cat").Rows.Count Then
'Tables' is not a member of 'System.Data.Dataview'
Med hensyn til at browse et dataset så er du mere end velkommen til at forklare jeg er kun lige begyndt med .net for 14 dage siden så det er meget nyt endnu :o)
Nu tror jeg det løber helt af sporet for os begge :o) Istarten af min kode skriver jeg :
Dim Source As DataView = CType(HttpContext.Current.Cache("Category"), DataView)
Altså må Source være et Dataview !?! Set udfra min nuværende Function :
Public Shared Function getCategory(ByVal Language As String) Dim Source As DataView = CType(HttpContext.Current.Cache("Category"), DataView) If Source Is Nothing Then Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source End If Return Source End Function
Ok hvis der er andre der vil hjælpe så ser min function pt sådan her ud :
Public Shared Function getCategory(ByVal Language As String) Dim Source As DataView = CType(HttpContext.Current.Cache("Category"), DataView) If Source Is Nothing Then Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source Else Dim intRows As Integer intRows = CType([Source], DataView).Table("tbl_products_cat").Rows.Count
If intRows <> intRows = CInt(ProductsData.GetCategoryCount(Language)) Then HttpContext.Current.Cache("Category").Clear() Source = New DataView(ProductsData.GetCategory(Language).Tables("tbl_products_cat")) HttpContext.Current.Cache("Category") = Source End If End If Return Source End Function
jeg har lavet en function der tæller antal records efter misbruger's anbefaling, men i denne linie får jeg stadig fejl :
Class 'System.Data.DataTable' cannot be indexed because it has no default property. intRows = CType([Source], DataView).Table("tbl_products_cat").Rows.Count
Så jeg håber der sidder en der lige kan hjælpe mig færdig med dette :o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.