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 ?
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 :
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
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
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'.
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
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 :
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.
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.