För att undvika att göra fler databasanrop än nödvändigt när jag kör mina UC så skulle jag vilja kunna göra så här:
1. Registrarar min uc högst upp på sidan som vanligt.
2. När UC:n körs första gången på sidan så görs ett databasanrop
3. Nästa gång uc:n körs (Flera av samma kontroller på samma sida)
så görs inget databasanrop utan hämtas på något annat sätt... Hur gör jag nu detta?
Det kanske inte äns skall vara en UC, utan en...
I klassisk ASP hade jag gjort ett databasanrop högst upp på sidan, lagt in databasposterna i en array med getrows och ev. via en funktion/sub på diverse ställen hämtat respektive post.
Ex.
set rs=conn.execute("SELECT ett FROM db WHERE id=1")
If not rs.eof then myRows = rs.getrows()
<%=myRows(0,0)%>
Annat innehåll
<%=myRows(0,1)%>
Mer innehåll <%=myRows(0,2)%>
freguz: Det är möjligt att det inte är, men det måste gå att lösa. (Vore löjligt annars... :) )
En repeater funkar tyvärr inte eftersom att kontrollerna hamnar på helt olika ställen.
Pace: Smart, cacha databasanropet funkar ju bra typ så här:
Dim objDSCache As DataSet = CType(Cache.Get("objDSCache"), DataSet)
If objDSCache Is Nothing Then
Dim sqlStr As String = "SELECT txt FROM DB WHERE id=1"
Dim objConnect As New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("connectionString").ConnectionString)
Dim objDataAdapter As New MySqlDataAdapter(sqlStr.ToString(), objConnect)
Dim objDS As New DataSet()
'Cache.Insert("objDSCache", objDS, [B]cacheDependencyObj[/B], DateTime.Now.AddSeconds(60), TimeSpan.Zero)
Cache.Insert("objDSCache", objDS)
objDataAdapter.Fill(objDS, "Info")
objConnect.Close() : objConnect = Nothing
GetRows = objDS.Tables("Info")
objDataAdapter = Nothing : objDS = Nothing
Else
GetRows = objDSCache.Tables("Info")
End If
Men då återstår ett problem... Cachen ligger kvar oavsätt sida.
Hur undviker man det?
Kan jag döpa cachens namn olika eller går det att utnyttja cacheDependencyObj
Typ så här:
Om du vill knyta cachen till en specifik sida (adress), så kan du göra som du skriver ovan (ändra cache-nyckel). Om det ska cachas för en specifik request så använd Context.Items.