SqlDataSource.CacheDuration 属性

定义

获取或设置以秒为单位的一段时间,它是数据源控件缓存 Select(DataSourceSelectArguments) 方法所检索到的数据的时间。

public:
 virtual property int CacheDuration { int get(); void set(int value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))]
public virtual int CacheDuration { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))>]
member this.CacheDuration : int with get, set
Public Overridable Property CacheDuration As Integer

属性值

SqlDataSource 缓存 Select(DataSourceSelectArguments) 操作结果的秒数。 默认值为 0。 该值不能为负数。

属性

示例

下面的代码示例演示了如何在启用数据缓存的情况下,从 Microsoft SQL Server 中的 Northwind 数据库中检索数据并将其显示在 控件中 GridViewCacheDuration设置为 20 秒,由于 默认情况下, CacheExpirationPolicy 属性设置为 Absolute 值,因此此页面的用户将每隔 20 秒看到一次新数据。

<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <asp:SqlDataSource
                id="SqlDataSource1"
                runat="server"
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                runat="server"
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <asp:SqlDataSource
                id="SqlDataSource1"
                runat="server"
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                runat="server"
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>

注解

控件 SqlDataSource 支持数据缓存。 缓存数据时, Select 方法从缓存中检索数据,而不是从基础数据库检索数据。 缓存过期时, Select 方法从基础数据库中检索数据,然后再次缓存数据。

当 属性设置为 trueCacheDuration 属性设置为大于 0 的值时EnableCaching,控件SqlDataSource会自动缓存数据,该值指示缓存在丢弃缓存项之前存储数据的秒数。 值为 0 表示缓存无限长。

缓存的行为由持续时间和 CacheExpirationPolicy 属性的组合决定。 如果 属性 CacheExpirationPolicy 设置为 Absolute 值,则 SqlDataSource 缓存第一个数据检索操作时的数据,将其保留在内存中,最多保留属性指定的 CacheDuration 时间量。 如果需要内存,可以在持续时间之前释放数据。 然后,在下一个操作期间刷新缓存。 如果 属性 CacheExpirationPolicy 设置为 Sliding 值,则数据源控件在第一个数据检索操作中缓存数据,但会重置它保留每个后续操作的缓存的时间窗口。 如果自上次Select操作以来没有活动等于CacheDuration值,则缓存将过期。

控件 SqlDataSource 只能在处于模式时 DataSet 缓存数据。 NotSupportedException如果 SqlDataSource 控件设置为 DataReader 值并且还启用了缓存,则 方法将引发Select异常。

重要

在 Microsoft Windows 身份验证下使用客户端模拟时,当第一个用户访问数据时,数据将缓存。 如果其他用户请求相同的数据,则会从缓存中检索数据。 通过再次调用数据库来验证用户对数据的访问权限,不会检索数据。 如果希望多个用户访问数据,并且希望对数据的每次检索都由数据库的安全配置进行验证,请不要使用缓存。

适用于

另请参阅