共用方式為


使用資料來源控制項快取資料

更新:2007 年 11 月

資料來源控制項為資料繫結控制項 (例如 GridViewFormViewDetailsView 控制項) 提供資料服務。這些服務包含快取不常變更的資料,以協助改善應用程式效能。

若要使用 SqlDataSourceAccessDataSource 控制項快取資料,您必須將這些控制項的 DataSourceMode 屬性設定為 DataSetObjectDataSource 控制項能夠快取由基礎商務物件 (Business Object) 傳回的物件。但是,您不應該快取儲存資源,或維護無法在多重要求之間共用狀態的物件,例如開啟 DataReader 物件。

啟用資料來源控制項的快取

預設不會啟用資料來源控制項的快取,但是您可以將控制項的 EnableCaching 屬性設定為 true 啟用快取。快取資料會根據使用 CacheDuration 屬性所指定的秒數重新整理。

您可以設定資料來源控制項的 CacheExpirationPolicy 屬性,進一步修改其快取行為。將屬性執設定為 Absolute,會在超過 CacheDuration 值時強迫重新整理快取。將 CacheExpirationPolicy 屬性設定為 Sliding 會只有在最後一次存取快取項目後,超過 CacheDuration 值的情況下才重新整理快取。

重要事項:

當啟用用戶端模擬,並且根據用戶端識別擷取資料來源的結果時,建議您將 EnableCaching 屬性設定為 false。如果啟用快取,所有使用者都能夠檢視單一使用者的快取資料,而且敏感資訊可能會公開至不必要的來源。當識別組態項目的 impersonate 屬性設定為 true,並且 Web 伺服器上的應用程式已停用匿名識別時,就會啟用用戶端模擬。

下列程式碼範例,示範了設定為每 20 秒重新整理資料的 SqlDataSource 控制項:

<%@ 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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

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

            <asp:GridView
                id="GridView1"
                
                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="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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

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

            <asp:GridView
                id="GridView1"
                
                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>
<!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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                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>

進階快取案例

如果您搭配 System.Data.SqlClient 提供者使用 SqlDataSource 控制項,可以利用 SqlCacheDependency 類別確認只有在資料庫中的來源資料表遭到修改時,才會重新整理快取資料。如需詳細資訊,請參閱快取含有 SqlDataSource 控制項的資料

請參閱

其他資源

資料來源 Web 伺服器控制項