Har en prestandafråga här: Det är väl inte att rekommendera att hämta massor med poster som du sedan villkorar sekventiellt på att inte visa.... Det märks kanske inte om du har några hundra poster eller så, men har du några hundra tusen poster är det extremt dåligt. (klassiskt test/utv misstag). Det är inte några hundratusen poster vi talar om här, eftersom det är nyhetsartiklar. Select top n är för att begränsa när du hämtar från databasen. Vilken databas, Access? Det är en Accessdatabas som jag kontaktar via JET.OleDB.4.0-drivrutinerna. Det är som sagt nyhetsartiklar som ska skrivas ut, och det kommer inte att bli flera hundratusen poster. Nej. Varför läser du inte svaren ordentligt? :) Är det kanske du som inte läser mina svar ordentligt? :)Hur genereras ASP:Repeater?
Om jag i min OnItemDataBound på en ASP:Repeater gör såhär:
If intCurrentIndex > intNumberOfTopicalsOnPage - 1 Then
e.Item.Visible = False
End If
Kommer dessa poster att skrivas ut och sen döljas, eller kommer de inte att behandlas alls?
Anledningen till att jag gör såhär är att när jag anger SELECT TOP X och tar emot resultatet i ett DataSet ignoreras TOP X, och jag får hela urvalet ändå. Jag måste därför begränsa urvalet på något annat sätt.
Sv: Hur genereras ASP:Repeater?
SELECT TOP N har ingenting med ett Dataset att göra.
Det där måste du ha missförstått. Dataset är helt disconnected och har ingen aning om vad det är för SQL som körs i databasen. Annars får du lämna lite mer info. Databasmotor, kodexempel (hur hämtar du datat osv).Sv:Hur genereras ASP:Repeater?
SELECT TOP N var bara något jag har kört med i vanlig ASP, och eftersom man på liknande sätt skickar en SQL-sträng så antog jag att man kunde begränsa urvalet likadant mot ett DataSet. Det är OleDB-drivrutinerna jag kör.
Det kanske finns metoder för att begränsa urvalet i DataSet eller DataView istället? Har inte tillgång till en dator att testa vidare på just nu, men tack för visat intresse. Det var mest prestandafrågan jag undrade över.Sv: Hur genereras ASP:Repeater?
Denna möjlighet förändras inte på något sätt för att du använder Dataset nu.
Ditt Dataset förstår inte Select top, det tar i stället emot datat från t.ex. en SQL-fråga som t.ex. innehåller select top n.
Ja du kan t.ex. använda filter på en Dataview som kopplas till ett Dataset.
Men ur prestandasynpunkt är det bättre att bara hämta från databasen det du ska ha.
Förutsatt att du inte cachar ditt Dataset.
OlaSv:Hur genereras ASP:Repeater?
Snabbare än mitt ursprungliga sätt är alltså att flytta över resultatet från mitt DataSet till en DataView, och sedan begränsa urvalet där, eftersom SELECT TOP n uppenbarligen inte fungerar mot mitt DataSet?Sv: Hur genereras ASP:Repeater?
SELECT TOP N är inte något som händer "mot ditt Dataset"! Det är något som du har missuppfattat.
Det är en SQL fråga, som av Jet4 OLEDB motorn kommer att returnera N rader i resultatet från databasen!
Om du är ute efter att göra några hundra posters paginering (sidväxling) snabbare är det smidigast och mer optimalt att hämta alla poster till ditt Dataset och placera det i cachen. Sen kollar du om objektet finns i cachen och använder det, i stället för att gå till databasen. Du måste förstås skriva någon funktion någonstans som kan refresha ditt Dataset när databasen ändras (t.ex. när en nyhetsartikel skapas eller ändras). Om du väljer att göra så kan du glömma select top.
Här finns mer hjälp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenethowto05.aspSv:Hur genereras ASP:Repeater?
Eftersom jag i vanlig ASP skickade med en SQL-sträng mot ett recordset på ungefär samma sätt som jag nu gör med DataSets, tänkte jag att det kanske skulle fungera likadant med SELECT TOP N, men det gjorde det uppenbarligen inte.
Du sa då att jag kunde begränsa urvalet genom en DataView, som jag skulle koppla till mitt DataSet, och det var därför jag skrev som jag skrev. Alltså har jag gett upp SELECT TOP N.
Postmängden kommer absolut aldrig upp i en massa hundratusen poster, så jag behöver inte tänkte jättemycket på prestandan just i detta fallet. Jag är inte alls insatt i hur man kan använda caching, och jag använder därför nya DataSets varje gång jag ska hämta data ur databasen. Jag har inte märkt att prestandan har blivit mycket sämre av detta, och jag ser därför ingen anledning till att använda caching än. (Men en länk om hur det fungerar är aldrig fel! :))
Hoppas vi förstår varann nu. :)