チュートリアル : SQL Server での ASP.NET の出力キャッシュの使用
更新 : 2007 年 11 月
このチュートリアルでは、SQL Server データベース内のデータに依存する ASP.NET ページをキャッシュする方法について説明します。
ASP.NET の出力キャッシュの高度な機能として、SQL キャッシュの依存関係があります。SQL キャッシュの依存関係を使用すると、SQL Server テーブルのデータに依存するページをキャッシュできます。ページが依存するデータが SQL Server で更新されるまでページ要求をキャッシュしてサーバーの負荷を減らすように、SQL Server と ASP.NET を設定できます。SQL キャッシュの依存関係は、製品カタログや比較的静的な顧客登録情報などのデータに使用すると便利です。
このチュートリアルでは、以下のタスクを行います。
Northwind データベースのデータを表示するページの作成と設定
SQL キャッシュ通知向けのデータベースの有効化
ページと Web.config ファイルへの SQL キャッシュの依存関係の指定
Northwind データベースへの変更とキャッシュ動作の表示
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Northwind データベースがインストールされている SQL Server 2000 または SQL Server 2005 へのアクセス
SQL Server Northwind データベースへのアクセス。SQL Server の Northwind サンプル データベースをダウンロードし、インストールする方法については、Microsoft SQL Server の Web サイトの「サンプル データベースのインストール」を参照してください。
メモ : SQL Server が実行されているコンピュータにログオンする方法については、サーバー管理者にお問い合わせください。
MDAC (Microsoft Data Access Components) Version 2.7 以降。
Windows XP または Windows Server 2003 を使用している場合、MDAC 2.7 は既に存在します。ただし、Windows 2000 を使用している場合は、コンピュータに既にインストールされている MDAC をアップグレードする必要があります。詳細については、MSDN の記事「MDAC Installation」を参照してください。
.NET Framework Version 2.0
Web サイトの作成
Visual Web Developer で Web サイトを既に作成している場合は (「チュートリアル : Visual Web Developer での基本的な Web ページの作成」を参照)、その Web サイトを使用して、このチュートリアルの後半にある「SQL Server のキャッシュ通知の有効化」に進むことができます。それ以外の場合は、次の手順に従って、新しい Web サイトおよびページを作成します。
ファイル システム Web サイトを作成するには
Visual Web Developer を開きます。
[ファイル] メニューの [新しい Web サイト] をクリックします。Visual Web Developer Express Edition では、[ファイル] メニューの [新規作成] をポイントし、[Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
[場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。
たとえば、フォルダ名として「C:\WebSites」と入力します。
[言語] ボックスで、作業に使用する言語をクリックします。
[OK] をクリックします。
Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。
SQL Server のキャッシュ通知の有効化
依存先データへの変更について ASP.NET に正しく通知されるように SQL Server を設定する必要があります。サーバーを設定するには、管理者特権が必要です。
SQL Server のキャッシュ通知を有効にするには
Windows の [スタート] メニューの [すべてのプログラム] をポイントし、[アクセサリ] をポイントしてから、[コマンド プロンプト] をクリックしてコマンド プロンプト ウィンドウを開きます。
使用するディスク ドライブで Aspnet_regsql.exe 実行可能ファイルを検索します。このファイルは、次の場所に .NET Framework Version 2.0 と共にインストールされています。
%windir%\Microsoft.NET\Framework\FrameworkVersion
%windir% が Windows ディレクトリを表し、.NET Framework のバージョンが 2.0 以上であることを確認します。このパスは次のようになります。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.40217
次のコマンドを使用して、Northwind データベースの Employees テーブルに関するキャッシュ通知を有効にします。
aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
メモ : 管理者特権または管理者用のアカウントとパスワードが必要です。この情報がわからない場合は、データベース管理者に問い合わせてください。
データベースの有効化の成功または失敗を示すメッセージが表示されます。次のメッセージは成功を表します。
Enabling the table for SQL cache dependency. .. Finished.
プロジェクトへのデータ接続の追加
Visual Web Developer で SQL Server データベースを操作するには、Northwind データベースへの接続を追加する必要があります。
プロジェクトにデータ ソースを追加するには
サーバー エクスプローラ (Visual Web Developer Express Edition の場合はデータベース エクスプローラ) で [データ接続] を右クリックし、[接続の追加] をクリックします。
メモ : サーバー エクスプローラ (Visual Web Developer Express Edition の場合はデータベース エクスプローラ) は、通常ソリューション エクスプローラの後ろにドッキングされます。
サーバー エクスプローラ (Visual Web Developer Express Edition の場合はデータベース エクスプローラ) が表示されない場合は、[表示] メニューの [サーバー エクスプローラ] (Visual Web Developer Express Edition の場合は [データベース エクスプローラ]) をクリックします。
[データ ソースの選択] ダイアログ ボックスが表示されたら、次の操作を実行します。
[データ ソース] ボックスの [Microsoft SQL Server] をクリックします。
[データ プロバイダ] ボックスの [.NET Framework SQL Server 用データ プロバイダ] をクリックします。
[続行] をクリックします。
[接続の追加] ダイアログ ボックスで、データベースの詳細情報 (サーバー名、ログイン資格情報など) を入力し、Northwind データベースを選択します。
[OK] をクリックします。
Web ページへのタイムスタンプとデータの追加
ここでは、Web ページを作成してキャッシュを実際に使用できます。このセクションでは、ページ作成日時を追跡するためのタイムスタンプ、および Northwind データベースの Employees テーブルを表示するための GridView コントロールを追加します。
タイムスタンプとデータを Web ページに追加するには
Default.aspx ページに切り替えるか開きます。
デザイン ビューに切り替えます。
ツールボックスの [標準] グループから、Label コントロールをページにドラッグします。既定の名前 Label1 は、そのまま使用します。
サーバー エクスプローラ (Visual Web Developer Express Edition の場合はデータベース エクスプローラ) で、[データ接続] を展開します。
以前に作成したデータ接続のノードを展開します。
[テーブル] ノードを展開します。
Employees テーブルをページにドラッグします。
選択した接続とテーブルを使用するように設定された GridView コントロールが Visual Web Designer によって作成されます。
[GridView タスク] メニューの [データ ソースの構成] をクリックします。
既定のデータ接続文字列名 NorthwindConnectionString1 がデータ ソースの構成ウィザードの最初の手順に表示されます。
[次へ] をクリックします。
Select ステートメント構成 ペインの [テーブルまたは表示から列を指定します] をクリックします。
[コンピュータ] ボックスの [employees] をクリックします。
[列] ボックスの [EmployeeID]、[LastName]、および [FirstName] の各列をクリックします。
[次へ] をクリックします。
[完了] をクリックします。
選択したデータが表示されるように、Visual Web Designer によって GridView コントロールが設定されます。
メモ : GridView コントロールのフィールドとキーを更新するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
ページの空白部分をダブルクリックします。
デザイナによって Page_Load メソッドが生成され、ビューが切り替わります。
次の強調表示されたコードを追加して、ページの作成日時を表すタイムスタンプを表示します。
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Load Label1.Text = System.DateTime.Now End Sub
protected void Page_Load(Object sender, System.EventArgs e) { Label1.Text = System.DateTime.Now.ToString(); }
ファイルを保存します。
キャッシュを使用しないページのテスト
ここでページを実行し、キャッシュを使用しない場合の動作を観察します。ページが読み込まれ、現在のサーバー時刻が表示されます。次にデータが取得され、ページに配置されます。
キャッシュを使用しないページをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
ブラウザでページを更新します。
ページを更新するたびにタイムスタンプが変更されることに注意してください。データは変更されません。
キャッシュするための Web ページの設定
チュートリアルのこのセクションでは、Northwind データベースの Employees テーブルに基づいて SQL キャッシュの依存関係に関するページを設定します。
キャッシュ用に Web ページを設定するには
ソース ビューに切り替えます。
ページの最上部で次のディレクティブを追加して依存関係を示します。
<%@ OutputCache Duration="3600" SqlDependency="Northwind:Employees" VaryByParam="none" %>
VaryByParam 属性はキャッシュ時に ASP.NET でページ パラメータ (クエリ文字列やポストされた値など) を考慮する必要があるかどうかを示します。VaryByParam を none に設定した場合、パラメータがまったく考慮されません。追加でパラメータを指定してもすべてのユーザーにページが送信されます。VaryByParam を * (アスタリスク) に設定すると、要求パラメータの一意の組み合わせごとに一意のページがキャッシュされます。ただし、VaryByParam を * に設定すると、そのページの多数のバージョンがキャッシュされます。そのため、異なるバージョンのキャッシュを許可するためのパラメータがわかっている場合は、それらのパラメータを VaryByParam 属性に明示的に指定することをお勧めします。詳細については、「ページの複数バージョンのキャッシュ」を参照してください。
Web.config ファイルでのキャッシュの設定
前のセクションで実行した Web ページでの OutputCache 宣言に加えて、Web.config ファイルにキャッシュの詳細を指定する必要があります。
Web.config ファイルを作成して更新するには
Web サイトに Web.config ファイルが既に存在する場合は、手順 4 に進みます。
ソリューション エクスプローラで、Web サイトの名前を右クリックし、[新しい項目の追加] をクリックします。
[項目の追加] ダイアログ ボックスの [Web 構成ファイル] をクリックし、[追加] をクリックします。
必ず Web.config という名前を使用します。
次の XML コードを system.web 要素の子として Web.config ファイルに追加します。
<!-- caching section group --> <caching> <sqlCacheDependency enabled = "true" pollTime = "1000" > <databases> <add name="Northwind" connectionStringName="NorthwindConnectionString1" pollTime = "1000" /> </databases> </sqlCacheDependency> </caching>
メモ : データ接続を作成したときに、接続文字列名 NorthwindConnectionString1 が既に確立されています。接続文字列名が異なる場合は、その名前を代わりに使用します。
メモ : 接続文字列には、データベースをポーリングするために必要な特権を持つアカウント資格情報を指定する必要があります。
ファイルを保存して閉じます。
キャッシュを使用したページのテスト
キャッシュを有効にした場合、ASP.NET がキャッシュからのページ要求を満たすため、ページを更新してもタイムスタンプやデータベース クエリが更新されません。
キャッシュを使用したページをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
ページを更新してもタイムスタンプが変更されないことに注意してください。このページは、キャッシュから取得されています。
データの変更
データベース内のデータを変更し、キャッシュが無効化されており、新しいページが作成されることを確認します。
データを変更するには
サーバー エクスプローラ (Visual Web Developer Express Edition の場合はデータベース エクスプローラ) で、[データ接続] ノードを展開します。
前に作成した接続を展開します。
[テーブル] ノードを展開します。
[employees] を右クリックし、[テーブル データの表示] をクリックします。
データ テーブルの任意のフィールドを編集してデータベースを更新します。その場合、Web ページで表示するフィールドを編集してください。
また、SQL ペインを使用することもできます (SQL ペインが表示されていない場合は [クエリ デザイナ] メニューの [ペイン] をクリックし、[SQL] をクリックします)。SQL コマンドを直接入力し、[クエリ デザイナ] ツール バーの [SQL の実行] ボタンをクリックします。たとえば、次のコマンドを実行します。
UPDATE dbo.Employees SET LastName = 'Doe' WHERE (EmployeeID = 5)
このコマンドでは、従業員 5 の名前が Doe に変更されます。
データのビューを閉じます。
SQL キャッシュの依存関係のテスト
ここではページをテストして、データとタイムスタンプが変更されているかどうかを確認できます。
SQL キャッシュの依存関係をテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
タイムスタンプが変更され、新しいデータが表示されていることに注意してください。
再度 Ctrl キーを押しながら F5 キーを押してページを実行します。
今回はデータが変更されていないのでタイムスタンプが変更されません。ページは再度キャッシュから取得されます。
次の手順
他のパラメータを使用してページをキャッシュすることもできます。詳細については、「チュートリアル : 出力キャッシュを使用した Web サイトのパフォーマンスの強化」を参照してください。データ アクセスについての情報が必要な場合は「チュートリアル : Web ページでの基本的なデータ アクセス」を参照してください。
参照
概念
SqlCacheDependency クラスによる ASP.NET のキャッシュ