データ ソース コントロールによるデータのキャッシュ
更新 : 2007 年 11 月
データ ソース コントロールは、GridView、FormView、DetailsView の各コントロールなどのデータ バインド コントロールにデータ サービスを提供します。これらのサービスには、データが頻繁に変更されないアプリケーションのパフォーマンスを向上するためのデータのキャッシュが含まれます。
SqlDataSource コントロールまたは AccessDataSource コントロールを使用してデータをキャッシュするには、コントロールの DataSourceMode プロパティを DataSet に設定する必要があります。ObjectDataSource コントロールは、基になるビジネス オブジェクトが返すオブジェクトをキャッシュできます。ただし、リソースを保持するオブジェクト、または開いている DataReader オブジェクトなどのように複数の要求で共有できない状態を維持するオブジェクトはキャッシュしないでください。
データ ソース コントロールによるキャッシュの有効化
データ ソース コントロールのキャッシュは既定で無効になっていますが、コントロールの EnableCaching プロパティを true に設定すると有効になります。キャッシュされたデータは、CacheDuration プロパティを使用して指定する秒数に基づいてリフレッシュされます。
CacheExpirationPolicy プロパティを設定すると、データ ソース コントロールのキャッシュ機能をさらに細かく指定できます。プロパティの値を Absolute に設定すると、CacheDuration 値を超えた場合にキャッシュがリフレッシュされます。CacheExpirationPolicy プロパティを Sliding に設定すると、キャッシュされた項目が最後にアクセスされてから CacheDuration 値を超えた場合のみキャッシュがリフレッシュされます。
重要 : |
---|
クライアントの偽装が有効で、データ ソースからの結果がクライアント ID に基づいて取得される場合は、EnableCaching プロパティを false に設定することをお勧めします。キャッシュを有効にすると、特定のユーザーのキャッシュされたデータをすべてのユーザーが参照できるようになるため、機密情報が不適切なソースに公開される可能性があります。クライアントの偽装は、identity 構成要素の impersonate 属性が true に設定され、アプリケーションの匿名 ID が 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 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="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>
<!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="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"
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 コントロールを System.Data.SqlClient プロバイダと共に使用する場合は、SqlCacheDependency クラスを使用して、データベースのソース テーブルが変更された場合だけキャッシュされたデータがリフレッシュされるように指定できます。詳細については、「SqlDataSource コントロールによるデータのキャッシュ」を参照してください。