Avatar billede websam Nybegynder
25. maj 2005 - 11:42 Der 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 :

drp_Category.DataSource = ProductsBiz.getCategory(Session("getLanguage"))
drp_Category.DataTextField = "Category"
drp_Category.DataValueField = "Id"
drp_Category.DataBind()

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 ?

/Websam
Avatar billede misbruger Nybegynder
25. maj 2005 - 13:24 #1
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

        intRows = Source.Tables("tbl_products_cat").Rows.Count

        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...

(Skal lige fin pudses)

Mvh, Mis
Avatar billede websam Nybegynder
25. maj 2005 - 13:28 #2
Det cheker jeg lige inden så længe og vender tilbage :o)

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 13:36 #3
Copy/Paste giver følgende fejl :

'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

kan du fikse den ?

/Websam
Avatar billede misbruger Nybegynder
25. maj 2005 - 13:39 #4
Hi websam

Nu er jeg ikke VB mand, men derimod C3, men du skal selvf. lige caste Source til at være et dataview...

C#:
intRows = ((DataView)Source).Tables("tbl_products_cat").Rows.Count

Og næste fejl... var bare en lille tastebøf..
Indsæt....
If intRows <> ProductsData.GetCategory(Language).("tbl_products_cat").Rows.Count Then

(Dog kan jeg anbefale at du laver en GetCategoryCount() i steden fro som levere antallet. (Økonomisk beslutning)
Avatar billede websam Nybegynder
25. maj 2005 - 13:40 #5
Og jeg får også en 'expected identifyer' i denne linie :

If intRows <> ProductsData.GetCategoryCount(Language).("tbl_products_cat").Rows.Count Then

udfor tegnet ( i ("tbl_products_cat")

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 13:48 #6
Så skulle en umiddelbart oversættelse være sådan her :

CType([Source], DataView).Tables("tbl_products_cat").Rows.Count

Men den melder stadig fejl på at :

'Table' is not a member of 'System.Data.Dataview'

/websam
Avatar billede misbruger Nybegynder
25. maj 2005 - 14:16 #7
...ok så skriv Tables

(glemte s)
Du ved vel godt hvordan man browser et dataset... beklager jeg skrev forkert.
Avatar billede websam Nybegynder
25. maj 2005 - 15:16 #8
Vi tager den lige igen det var mig der skrev fejl :

CType([Source], DataView).Tables("tbl_products_cat").Rows.Count

Melder denne fejl :

'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)

/Websam
Avatar billede misbruger Nybegynder
25. maj 2005 - 15:20 #9
Undskyld... min fejl... lidt for hurtig.... det er fordi Source ikke er et DataView, men et DataTable...

intRows = CType([Source], DataTable)("tbl_products_cat").Rows.Count
Avatar billede websam Nybegynder
25. maj 2005 - 15:25 #10
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

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 15:29 #11
Og hvis jeg laver den du foreslog :

intRows = CType([Source], DataTable)("tbl_products_cat").Rows.Count

Får jeg denne fejl :

'Rows' is not a member of 'System.Data.DataRowView'.

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 15:30 #12
Sorry Det var denne fejl :

Value of type 'System.Data.DataView' cannot be converted to 'System.Data.DataTable'.

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 17:45 #13
Gik du kold på det ?

/Websam
Avatar billede websam Nybegynder
25. maj 2005 - 21:14 #14
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)

/Websam
Avatar billede misbruger Nybegynder
25. maj 2005 - 21:26 #15
Sorry lidt stresset idag...

intRows = CType([Source], DataTable).Rows.Count
Avatar billede websam Nybegynder
25. maj 2005 - 21:30 #16
Får denne fejl :

Value of type 'System.Data.DataView' cannot be converted to 'System.Data.DataTable'.
intRows = CType([Source], DataTable).Rows.Count

???

/Websam
Avatar billede snepnet Nybegynder
26. maj 2005 - 00:15 #17
Du kan bare se antallet af rækker i dit view med
Source.Count
mvh
Avatar billede websam Nybegynder
26. maj 2005 - 00:26 #18
Var det godt nok hvad der skulle til cool nok nu ser det ud til at virke du må lige smide et svar snepnet så kan i dele lidt point :o)

/Websam
Avatar billede snepnet Nybegynder
26. maj 2005 - 00:29 #19
giv du dem til misbruger... så kan jeg snuppe den 10'er du også har lagt ud :o)
mvh
Avatar billede websam Nybegynder
26. maj 2005 - 00:31 #20
Ok det gør jeg
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester