ASP.NET Tutorial/Cache/SqlDataSource cache

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Adding Items with an Absolute Expiration Policy

<%@ Page Language="C#" Trace="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.Configuration" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">    void Page_Load()
    {
        DataTable products = (DataTable)Cache["Products"];
        if (products == null)
        {
            products = GetProductsFromDB();
            Cache.Insert("Products", products, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration);
        }
        grdProducts.DataSource = products;
        grdProducts.DataBind();
    }
    private DataTable GetProductsFromDB()
    {
        Trace.Warn("Getting products from database");
        string conString = WebConfigurationManager.ConnectionStrings ["Products"].ConnectionString;
        SqlDataAdapter dad = new SqlDataAdapter("SELECT Title,Director FROM Products", conString);
        DataTable products = new DataTable();
        dad.Fill(products);
        return products;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Absolute Expiration</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView
        id="grdProducts"
        Runat="server" />
    </div>
    </form>
</body>
</html>


Adding Items with a Sliding Expiration Policy

<%@ Page Language="C#" Trace="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.Configuration" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    void Page_Load()
    {
        DataSet products = (DataSet)Cache["Products"];
        if (products == null)
        {
            products = GetProductsFromDB();
            Cache.Insert("Products", products, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(5));
        }
        grdProducts.DataSource = products;
        grdProducts.DataBind();
    }
    private DataSet GetProductsFromDB()
    {
        Trace.Warn("Getting products from database");
        string conString = WebConfigurationManager.ConnectionStrings ["Products"].ConnectionString;
        SqlDataAdapter dad = new SqlDataAdapter("SELECT Title,Director FROM Products", conString);
        DataSet products = new DataSet();
        dad.Fill(products);
        return products;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Sliding Expiration</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView
        id="grdProducts"
        Runat="server" />
    </div>
    </form>
</body>
</html>


Adding Items with Dependencies

<%@ Page Language="C#" Trace="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    void Page_Load()
    {
        DataSet products = (DataSet)Cache["Products"];
        if (products == null)
        {
            Trace.Warn("Retrieving products from file system");
            products = new DataSet();
            products.ReadXml(MapPath("~/Data.xml"));
            CacheDependency fileDepend = new CacheDependency(MapPath("~/Data.xml"));
            Cache.Insert("Products", products, fileDepend);
        }
        grdProducts.DataSource = products;
        grdProducts.DataBind();
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show File Dependency</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView
        id="grdProducts"
        Runat="server" />
    </div>
    </form>
</body>
</html>


SqlDataSource caching

<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:SqlDataSource ID="sourceEmployeeCities" 
                           runat="server" 
                           ProviderName="System.Data.SqlClient" 
                           ConnectionString="<%$ ConnectionStrings:Northwind %>" 
                           SelectCommand="SELECT DISTINCT City FROM Employees"
                           EnableCaching="True" 
                           CacheDuration="3600">
        </asp:SqlDataSource>
        <asp:DropDownList ID="lstCities" 
                          runat="server" 
                          DataSourceID="sourceEmployeeCities"
                          DataTextField="City" 
                          Width="205px" 
                          AutoPostBack="True">
        </asp:DropDownList>
            
        <asp:SqlDataSource ID="sourceEmployees" 
                           runat="server" 
                           ProviderName="System.Data.SqlClient" 
                           ConnectionString="<%$ ConnectionStrings:Northwind %>" 
                           SelectCommand="SELECT EmployeeID, FirstName, LastName, Title, City FROM Employees WHERE City=@City"
                           EnableCaching="True" 
                           CacheDuration="600">
            <SelectParameters>
                <asp:ControlParameter ControlID="lstCities" Name="City" PropertyName="SelectedValue" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" 
                      runat="server" 
                      DataSourceID="sourceEmployees" 
                      AutoGenerateColumns="False" 
                      DataKeyNames="EmployeeID">
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False"
                    ReadOnly="True" SortExpression="EmployeeID" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            </Columns>
        </asp:GridView>
    
    </div>
    </form>
</body>
</html>
File: Web.config
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="Northwind" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"/>
  </connectionStrings>
</configuration>