Visual Studio では、ASP.NET のパーソナライズ情報は SQL Server Express を使い
App_Data下の aspnetdb.mdf を使うのがデフォルトの動作です。
でも、SQL Server 2005 をすでにライセンスしていたら、SQL Server Express じゃなくて、SQL Server を
使いたいですよね。
そんな相談を受けたので、今回は、その方法を紹介しましょう。以下の 2 つのことを行います。
- SQL Server に サービス用のデータベースを作成/構成する
- web.config を変更して、SQL Server のデータベースを使用するようにする
では、順に説明しましょう。
1. SQL Server に サービス用のデータベースを作成/構成する
これには、ASP.NET のツールを使用します。
ASP.NET には、SQL Server プロバイダが使用する SQL Server データベースを
インストールする Aspnet_regsql.exe というツールがインストールされています。
Aspnet_regsql.exe ツールのインストール先は、
C:\WINDOWS\Microsoft.NET\Framework\<versionNumber>\aspnet_regsql.exe
です。
Aspnet_regsql.exe を使用すると、SQL Server データベースを作成したり、既存のデータベースにオプションを
追加または削除したりすることができます。
いろいろなコマンドラインオプションがあるのですが、悩んだら、コマンドラインを指定せずに
そのまま aspnet_regsql.exe を実行しましょう。
ウィザード画面が起動しますので、ウィザードに従ってください。
説明するまでもなく、簡単にできます。
このツールで SQL Server には、aspnetdb というデータベースが作成されますので確認しておきましょう。
2. web.config を変更して、SQL Server のデータベースを使用するようにする
ASP.NET から、SQL Server プロバイダを使う設定を web.config に記述します。
少し長いですが、2-1 から 2-4 まであります。飽きずについてきてくださいね。
2-1 接続文字列を記述する
接続文字列を記述して、SQL Server を使用するように記述します。 (nameはご自由にどうぞ)
<connectionStrings>
<add name="MySqlConnection"
connectionString="Data Source=localhost;Initial Catalog=aspnetdb;Integrated Security=SSPI;"/>
</connectionStrings>
2-2 メンバシップサービス情報を記述する
SqlMembershipProvider を使用するように記述します。
<system.web>
・・・
<membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<add name="SqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MySqlConnection"
applicationName="WebPartsDemoApp"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
minRequiredNonalphanumericCharacters="0"
maxInvalidPasswordAttempts="10"
passwordFormat="Encrypted"/>
</providers>
</membership>
・・・
</system.web>
参考: SqlMembershipProvider クラス
2-3 ロール管理情報を記述する
SqlRoleProvider を使用するように記述します。
<system.web>
・・・
<roleManager defaultProvider="SqlRoleProvider"
enabled="true"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="true"
cookieSlidingExpiration="true"
cookieProtection="All" >
<providers>
<add connectionStringName="MySqlConnection"
applicationName="WebPartsDemoApp"
name="SqlRoleProvider"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
・・・
</system.web>
参考: SqlRoleProvider クラス
2-4 Web パーツのパーソナライズ情報を記述する
SqlPersonalizationProvider を使用するように記述します。
<system.web>
・・・
<webParts>
<personalization defaultProvider="SqlPersonalizationProvider">
<providers>
<add name="SqlPersonalizationProvider"
type="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider"
connectionStringName="MySqlConnection"
applicationName="WebPartsDemoApp" />
</providers>
</personalization>
</webParts>
・・・
</system.web>
参考: SqlPersonalizationProvider クラス
以上で web.config に記述する内容は終わりです。
web.config の設定を行うことで、SQL Server 2005 の aspnetdb データベースを
使用するようになりますので、パーソナライズ情報は SQL Server に格納されます。
やはり、SQL Server はガンガンに使いたいものです。