Avatar billede websam Nybegynder
09. juni 2005 - 15:07 Der er 15 kommentarer og
2 løsninger

2 spørgsmøl i et ?

Hejsa,

Når nu jeg har smidt mine dataset i cache så kan jeg jo som sagt benytte dem over alt i min application.

Men hvis jeg f.eks loader alt hvad der er i mit produkt katalog op i cache med :

select * from tabel order by id

Kan jeg så hente følgende ud af min cache :

1. Jeg vil f.eks have fat i produkter der kun har categori id 20

2. Jeg vil kun have en enkelt rekord ud fra et givet id i tabellen

Hvis det er muligt, hvordan går jeg så dette ?

/Websam
Avatar billede snepnet Nybegynder
09. juni 2005 - 15:22 #1
du kan lave views på dine tabeller :

DataView dv = new DataView(someDataSet.Table[X], "categoryid=20", null);

og du kan lave selects direkte på dine tabeller :

DataRow[] rows = someDataSet.Tables[X].Select("id=20", ...);

der er et par overloads på både DataView-constructoren og Select.

spørg løs hvis der er noget du er i tvivl om.

mvh
Avatar billede websam Nybegynder
09. juni 2005 - 15:38 #2
Jeg vender lige tilbage senere da jeg skal ud og køre nu :o)

Har du forresten opserveret at der ikke bliver tilsendt mails når der er svaret på spm. her på eksperten ? Af en eller anden årsag får jeg ikke længere nogen tilsendt ?

/Websam
Avatar billede arne_v Ekspert
09. juni 2005 - 15:58 #3
teknisk problem

hvis du går over i kategoen om Eksperten kan du finde en 5-6 tråde om emnet
Avatar billede websam Nybegynder
09. juni 2005 - 16:56 #4
arne_v >> Ja så er det bare at vente på at de får det på plads.

/Websam
Avatar billede websam Nybegynder
10. juni 2005 - 00:30 #5
snepnet >> Så tager vi den lige hele vejen igennem. I mit datalag henter jeg alt fra mit produkt katalog og smidder det i et dataset med følgende kode :

Public Shared Function GetProduct()
    Dim objConn As SqlConnection = DbClass.SqlConnect
    Dim objComm As New SqlDataAdapter("Select * From tbl_products Order By Product", objConn)
    Dim objDS As New DataSet
    objComm.Fill(objDS, "tbl_products")
    Return objDS
End Function

I mit buisnesslag har jeg så en function der smidder datasættet i cache dette gøres med denne :


Public Shared Function getProduct()
    Dim Source As DataView = CType(HttpContext.Current.Cache("Product"), DataView)
    If Source Is Nothing Then
        Source = New DataView(ProductsData.GetProduct().Tables("tbl_products"))
        HttpContext.Current.Cache("Product") = Source
    Else
        Dim intRows As Integer
        intRows = Source.Count

        If intRows <> CInt(ProductsData.GetProductCount()) Then
            HttpContext.Current.Cache.Remove("Product")
            Source = New DataView(ProductsData.GetProduct().Tables("tbl_products"))
            HttpContext.Current.Cache("Product") = Source
        End If
    End If
    Return Source
End Function

I mit designlag er jeg så gået lidt i stå med det du viser ovenfor da jeg jo allerede i mit buisnesslag smidder tabellen i cache med dataview hvad skal jeg have med her foruden denne linie i designlaget :

ProductsBiz.getProduct()

Som jo henter i data i mit buisnesslag ?

/Websam
Avatar billede snepnet Nybegynder
10. juni 2005 - 00:50 #6
til en start skal du jo nok proppe dit dataset i cache istedet for et view, og du kan så efterfølgende skabe nogle metoder, der returnerer dig et view fra det dataset du så har liggende i din cache.
mvh
Avatar billede snepnet Nybegynder
10. juni 2005 - 00:59 #7
hvad er årsgen til at du lagt et view i cache, istedet for selve datasættet ?
mvh
Avatar billede websam Nybegynder
10. juni 2005 - 01:24 #8
Ikke nogen speciel grund det var noget jeg fik hjælp til, men du er mere end velkommen til at vise mig hvorledes jeg får dataset i cache istedet for udfra min kode ovenfor

/Websam
Avatar billede websam Nybegynder
10. juni 2005 - 01:31 #9
og så tror jeg jeg har fat i noget af det rigtige med følgende :

Dim dv As DataView = New DataView
dv.Table = ProductsBiz.getProduct()
dv.RowFilter = "getLanguage = 'da'"
dv.Sort = "Product DESC"

Men du er velkommen til at kommentere, en anden ting er, er det muligt at benytte mere end en parameter i "RowFilter" lige som man gør med alm. sql "Where id = @Id And Language = @Language" ?

Det var noget jeg læste mig til på MSDN, men der bruger de denne som eks til visning af tekst :

TextBox1.DataBindings.Add("Text", dv, "Product")

Men der får jeg en fejl der siger :

'DataBindings' is not a member of 'System.Web.UI.WebControls.TextBox'.

Er det noget du kender til ?

/Websam
Avatar billede websam Nybegynder
10. juni 2005 - 01:36 #10
Med hensyn til min dataview i cache så mener jeg det er fordi jeg ikke kan lave en count på dataset som jeg benytter mig i disse linier for tjekke op på om der er kommet nye records til siden sidste caching, men jeg ikke

Dim intRows As Integer
intRows = Source.Count

If intRows <> CInt(ProductsData.GetProductCount()) Then
    HttpContext.Current.Cache.Remove("Product")
    Source = New DataView(ProductsData.GetProduct().Tables("tbl_products"))
    HttpContext.Current.Cache("Product") = Source
End If
Avatar billede websam Nybegynder
10. juni 2005 - 01:38 #11
Det er vist ved at være sent :o) ..... sidste caching, men jeg ikke...... skule have været ...... sidste caching, men jeg er ikke sikker........

Sengetid, du kan jo kigge lidt på det jeg har skrevet ovenfor :o)

/Websam
Avatar billede snepnet Nybegynder
10. juni 2005 - 08:23 #12
hehe :o)

1)
TextBox1.DataBindinds.Add(... er en winforms ting, så derfor får du fejl når du prøver det samme på web-kontroller.

2)
du skal ikke regne med at der er 1 til 1 mellem alm. sqlsyntaks, og så det du kan skrive i dit rowfilter - ofte skal du sno dig lidt når du laver filtre. du kan se om der står noget fornuftigt her :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadataviewclasssorttopic.asp

og den henviser til denne :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatacolumnclassexpressiontopic.asp

3)
du kan godt tælle rækker i tabller i et dateset
someDataSet.Tables[0].Rows.Count .... sikkert sådan her i VB
someDataSet.Tables(0).Rows.Count

mvh
Avatar billede websam Nybegynder
14. juni 2005 - 13:38 #13
Hvis jeg lige starter med at vise dig den function der laver cache kan du så rette den til så det kommer til at virke med dataset istedet for dataview :

Public Shared Function CacheText(ByVal Language As String)
    Dim Source As DataSet = CType(HttpContext.Current.Cache("Text"), DataSet)
    If Source Is Nothing Then
        Source = New DataSet(TextData.LoadText(Language).Tables("tbl_text"))
        HttpContext.Current.Cache("Text") = Source
    Else
        Dim intRows As Integer
        intRows = Source.Tables(0).Rows.Count

        If intRows <> CInt(TextData.LoadTextCount(Language)) Then
            HttpContext.Current.Cache.Remove("Text")
            Source = New DataSet(TextData.LoadText(Language).Tables("tbl_text"))
            HttpContext.Current.Cache("Text") = Source
        End If
    End If

    Return Source
End Function

Den kommer med fejl i fjerde linie :

Source = New DataSet(TextData.LoadText(Language).Tables("tbl_text"))

Som lyder på :

Cast from type 'DataTable' to type 'String' is not valid.

???

/Websam
Avatar billede websam Nybegynder
14. juni 2005 - 14:09 #14
Tror faktisk at dette løste problemet :

Source = New DataSet(TextData.LoadText(Language).Tables("tbl_text"))

Lavet om til dette :

Source = TextData.LoadText(Language)

Jeg får i hvertfald data smidt i mit datagrid :o)

/Websam
Avatar billede snepnet Nybegynder
29. juni 2005 - 20:41 #15
øjs - også en gammen en :o(
lyder godt at det funger .... vil du have et svar her websam?
mvh
Avatar billede snepnet Nybegynder
29. juni 2005 - 20:41 #16
(gammen = gammel)
Avatar billede websam Nybegynder
29. juni 2005 - 21:02 #17
Du hjalp jo noget af vejen så vi deler :o)
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