How to Enable ASP.NET polling?
All our database side is configured in order to get the SQL Cache working in the ASP.NET side we require to do some configuration in the web.config file.
The 2 attributes are require to set in the "web.config" file:-
- Set the "Enabled" attribute to true to set the caching on.
- Set the poll time attribute to the number of milliseconds between every poll
Figure :- Web.config file modifications for SQL cache
At last use the Cache dependency object in your ASP.NET code.
After that comes the final step to use our cache dependency with programmatic data caching,output caching and data source control, .
For the programmatic data caching, we have to create a new SqlCacheDependency & supply that to the Cache.Insert() process . In the SqlCacheDependency constructor, you supply 2 strings. The first is the name of the database you defined in the element in the part of the web.config file e.g: Northwind. The second is the name of the linked table example: Products.
private static void CacheProductsList(List products) {SqlCacheDependency sqlDependency = new SqlCacheDependency("Northwind", "Products");
HttpContext.Current.Cache.Insert("ProductsList", products, sqlDependency, DateTime.Now.AddDays(1), Cache.NoSlidingExpiration);}
private static List GetCachedProductList()
{return HttpContext.Current.Cache["ProductsList"] as List;}
ClsProductItem is business class, and here we are trying to cache a list of ClsProductItem instead of DataSet or DataTable.
The following method is used by an ObjectDataSource Control to retrieve List of Products
public static List GetProductsList(int catId, string sortBy)
{
//Try to Get Products List from the Cache
List products = GetCachedProductList();
if (products == null)
{
//Products List not in the cache, so query the Database layer
ClsProductsDB db = new ClsProductsDB(_connectionString);
DbDataReader reader = null;
products = new List(80);
if (catId > 0)
{
//Return Product List from the Data Layer
reader = db.GetProductsList(catId);
}
else {
//Return Product List from the Data Layer
reader = db.GetProductsList();
}
//Create List of Products -List if ClsProductItem-products = BuildProductsList(reader);
reader.Close();
//Add entry to products list in the Cache CacheProductsList(products); }
products.Sort(new ClsProductItemComparer(sortBy));
if (sortBy.Contains("DESC")) products.Reverse();
return products; }
To perform the same trick with output caching, you simply need to set the SqlDependency property with the database dependency name and the table name, separated by a colon:
<%@ OutputCache Duration="600" SqlDependency="Northwind:Products" VaryByParam="none" %>
The same technique works with the SqlDataSource and ObjectDataSource controls: