Cache dataset and expire | | |
Hi,
I am storing a dataset in cache, which is happening fine. I can easily
retrive it at postback from the cache, cast it to a dataset and reuse it.
However I have specified that the cache expire in 5 minutes like so.
If Not IsPostBack Then
BindMyDropDown()
Else
Response.Write("<hr>Cache Expires 5 minutes" &
DateTime.Now.AddSeconds(300) & "<hr>")
'If the cache had expired I would expect this line to cause an
error -- but it doesn't even if I cause postback after 15 minutes!!!
dsMyDataset = CType(Cache("ds"), DataSet)
Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
End If
I also set the cache expire in exactly the same way in the BindMyDropDown()
function.
and place the dataset into the cache like so.
//code here
objConn.Open()
daMyDataAdapter.Fill(dsMyDataset, "Customers")
objConn.Close()
Cache.Insert("ds", dsMyDataset)
Response.Write("<hr>Cache Expires 5 minutes" &
DateTime.Now.AddSeconds(300) & "<hr>")
Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
DropDownList1.DataSource = dsMyDataset
DropDownList1.DataValueField =
dsMyDataset.Tables(0).Columns(0).ToString
DropDownList1.DataTextField =
dsMyDataset.Tables(0).Columns(1).ToString
DropDownList1.DataBind()
when a button is clicked and a postback is caused the button handler
retrieves the cache dataset and rebinds it to a combo box.
I would have thought that if the page was posted back any later than 5
minutes that an error would occur because the cache had expired, but it
doesn't.
The lack of this error indicates to me that the cache is not expiring, but I
do not know what I am doing wrong.
How do I make the cache expire in 5 minutes.
cheers
martin | | | | re: Cache dataset and expire
You may be pulling some info from ViewState, which would pull the values
despite the cache being refreshed. Turn off ViewState to test this behavior.
--
Gregory A. Beamer
MVP; MCP: +I, SE, SD, DBA
************************************************** ********************
Think Outside the Box!
************************************************** ********************
"martin" <martincello67@hotmail.com> wrote in message
news:uAB3PevkDHA.2536@tk2msftngp13.phx.gbl...[color=blue]
> Hi,
>
> I am storing a dataset in cache, which is happening fine. I can easily
> retrive it at postback from the cache, cast it to a dataset and reuse it.
> However I have specified that the cache expire in 5 minutes like so.
>
> If Not IsPostBack Then
> BindMyDropDown()
> Else
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> 'If the cache had expired I would expect this line to cause an
> error -- but it doesn't even if I cause postback after 15 minutes!!!
> dsMyDataset = CType(Cache("ds"), DataSet)
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
> End If
>
> I also set the cache expire in exactly the same way in the[/color]
BindMyDropDown()[color=blue]
> function.
> and place the dataset into the cache like so.
>
> //code here
> objConn.Open()
> daMyDataAdapter.Fill(dsMyDataset, "Customers")
> objConn.Close()
> Cache.Insert("ds", dsMyDataset)
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
>
> DropDownList1.DataSource = dsMyDataset
> DropDownList1.DataValueField =
> dsMyDataset.Tables(0).Columns(0).ToString
> DropDownList1.DataTextField =
> dsMyDataset.Tables(0).Columns(1).ToString
> DropDownList1.DataBind()
>
> when a button is clicked and a postback is caused the button handler
> retrieves the cache dataset and rebinds it to a combo box.
> I would have thought that if the page was posted back any later than 5
> minutes that an error would occur because the cache had expired, but it
> doesn't.
> The lack of this error indicates to me that the cache is not expiring, but[/color]
I[color=blue]
> do not know what I am doing wrong.
> How do I make the cache expire in 5 minutes.
>
> cheers
>
> martin
>
>
>
>[/color] | | | | re: Cache dataset and expire
I am not sure about datasets but with datatables and dataviews, if the cache
is empty it just returns nothing but does not generate an error. You can see
exactly what is in the cache by using the following
dim strCacheContents as String
dim objItem as DictionaryEntry
dim strName as String
For Each objItem In Cache
strName = objItem.Key.tostring()
strCacheContents = "key=" & strName & "<br />"
Response.Write(strCacheContents)
strCacheContents = "value=" & Convert.ToString(objItem.Value) & "<br/>"
Response.Write(strCacheContents)
Next
"martin" <martincello67@hotmail.com> wrote in message
news:uAB3PevkDHA.2536@tk2msftngp13.phx.gbl...[color=blue]
> Hi,
>
> I am storing a dataset in cache, which is happening fine. I can easily
> retrive it at postback from the cache, cast it to a dataset and reuse it.
> However I have specified that the cache expire in 5 minutes like so.
>
> If Not IsPostBack Then
> BindMyDropDown()
> Else
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> 'If the cache had expired I would expect this line to cause an
> error -- but it doesn't even if I cause postback after 15 minutes!!!
> dsMyDataset = CType(Cache("ds"), DataSet)
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
> End If
>
> I also set the cache expire in exactly the same way in the[/color]
BindMyDropDown()[color=blue]
> function.
> and place the dataset into the cache like so.
>
> //code here
> objConn.Open()
> daMyDataAdapter.Fill(dsMyDataset, "Customers")
> objConn.Close()
> Cache.Insert("ds", dsMyDataset)
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
>
> DropDownList1.DataSource = dsMyDataset
> DropDownList1.DataValueField =
> dsMyDataset.Tables(0).Columns(0).ToString
> DropDownList1.DataTextField =
> dsMyDataset.Tables(0).Columns(1).ToString
> DropDownList1.DataBind()
>
> when a button is clicked and a postback is caused the button handler
> retrieves the cache dataset and rebinds it to a combo box.
> I would have thought that if the page was posted back any later than 5
> minutes that an error would occur because the cache had expired, but it
> doesn't.
> The lack of this error indicates to me that the cache is not expiring, but[/color]
I[color=blue]
> do not know what I am doing wrong.
> How do I make the cache expire in 5 minutes.
>
> cheers
>
> martin
>
>
>
>[/color] | | | | re: Cache dataset and expire
You might also use this syntax.
Cache.Insert ("yourname",yourdatasetvariable,New CacheDependency(filepath)
or Nothing ,DateTime.MaxValue, TimeSpan.FromMinutes(5))
I am not sure but I thought the response.cache ... applies to the whole
control or page not the item being named in the cache insert line, but I am
not expert. When I have used the response.cache I usually have several
other lines as follows (but this is for an entire page)
Response.Cache.SetExpires(DateTime.Now.AddSeconds( intCacheTime))
Response.Cache.SetCacheability(HttpCacheability.Pu blic)
Response.Cache.SetValidUntilExpires(True)
Response.Cache.VaryByParams("_p") = True
Response.Cache.VaryByParams("_h") = True
Response.Cache.VaryByParams("_c") = True
"martin" <martincello67@hotmail.com> wrote in message
news:uAB3PevkDHA.2536@tk2msftngp13.phx.gbl...[color=blue]
> Hi,
>
> I am storing a dataset in cache, which is happening fine. I can easily
> retrive it at postback from the cache, cast it to a dataset and reuse it.
> However I have specified that the cache expire in 5 minutes like so.
>
> If Not IsPostBack Then
> BindMyDropDown()
> Else
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> 'If the cache had expired I would expect this line to cause an
> error -- but it doesn't even if I cause postback after 15 minutes!!!
> dsMyDataset = CType(Cache("ds"), DataSet)
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
> End If
>
> I also set the cache expire in exactly the same way in the[/color]
BindMyDropDown()[color=blue]
> function.
> and place the dataset into the cache like so.
>
> //code here
> objConn.Open()
> daMyDataAdapter.Fill(dsMyDataset, "Customers")
> objConn.Close()
> Cache.Insert("ds", dsMyDataset)
> Response.Write("<hr>Cache Expires 5 minutes" &
> DateTime.Now.AddSeconds(300) & "<hr>")
> Response.Cache.SetExpires(DateTime.Now.AddSeconds( 300))
>
> DropDownList1.DataSource = dsMyDataset
> DropDownList1.DataValueField =
> dsMyDataset.Tables(0).Columns(0).ToString
> DropDownList1.DataTextField =
> dsMyDataset.Tables(0).Columns(1).ToString
> DropDownList1.DataBind()
>
> when a button is clicked and a postback is caused the button handler
> retrieves the cache dataset and rebinds it to a combo box.
> I would have thought that if the page was posted back any later than 5
> minutes that an error would occur because the cache had expired, but it
> doesn't.
> The lack of this error indicates to me that the cache is not expiring, but[/color]
I[color=blue]
> do not know what I am doing wrong.
> How do I make the cache expire in 5 minutes.
>
> cheers
>
> martin
>
>
>
>[/color] |  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,471 network members.
|