ASP.NET 徹底活用術(Part2)のホームへ戻る

■知恵袋データベースの作成と前準備

 

ここでは智恵袋で利用するデータベースとして、マイクロソフトのAccessを利用します(SQL Serverを利用したいときは、Accessの「アップサイジングウィザード」を利用して簡単に移行できます)。智恵袋で利用するデータベース(blog.mdb)は、図1に示すように4個のテーブルから構成されています。tblBlogテーブルには、知恵袋のタイトル、内容などを格納します。tblCommentsテーブルには、知恵袋のコメント情報を格納します(本稿では、コメント情報を入力する機能はサポートしません)。tblCategoriesテーブルには、知恵袋をカテゴリー別に分類するためにカテゴリーIDとカテゴリー名を格納します。tblBlogCatLinksテーブルは、tblBlogtblCategoriesテーブルを1対Nで関連付けするためにリンクテーブルとして利用します。すべてのテーブルを作成したら、tblCategoriesテーブルには、図2に示すようなカテゴリーを入力しておきます。

 

1:知恵袋データベース(blogmdb)のテーブル関連図

 

表1:tblBlogテーブルの構成

No

フィールド名

データ型

説明

1

BlogID

オートナンバー型

ブログID(主キー)

2

Title

テキスト型(255)

タイトル

3

Descrption

メモ型

内容

4

EntryDateTime

日付/ 時刻型

入力日時(既定値としてNow()を設定)

 

2tblCommentsテーブルの構成

No

フィールド名

データ型

説明

1

BlogID

長整数型

ブログID(主キー)

2

CommentID

オートナンバー型

コメントID(主キー)

3

Name

テキスト型(50)

投稿者名

4

Email

テキスト型(100)

投稿者のメールアドレス

5

Comment

メモ型

投稿内容

6

CommentDate

日付/時刻型

投稿日時(既定値としてNow()設定)

 

3tblCategoriesテーブルの構成

No

フィールド名

データ型

説明

1

CategoryID

オートナンバー型

カテゴリーID(主キー)

2

CategoryName

テキスト型(50)

カテゴリー名

 

4tblBlogCatLinksテーブルの構成

No

フィールド名

データ型

説明

1

BlogID

長整数型

ブログID(主キー)

2

CategoryID

長整数型

カテゴリーID(主キー)

 

図2:tblCategoriesテーブルにサンプルデータ入力

 

●知恵袋データベースの格納

 

VS.NET を起動して新規プロジェクトを作成したら、ソリューションエクスローラのプロジェクトの右クリックから[追加]-[新しいフォルダ]を選択して、新規フォルダ(webdb)を作成します。Windowsのエクスプローラから智恵袋データベース(blog.mdb)をコピーしたら、ソリューションエクスプローラのwebdbフォルダに貼り付けします。ソリューションエクスプローラにblog.mdbが表示されます(3)

 

図3: プロジェクトにwebdbフォルダを作成してblog.mdbを格納

 

 

Web.configファイルの編集

 

VS.NET のソリューションエクスプローラから[Web.config]ファイルをダブルクリックして表示したら、<configuration>…</configuration>の間に、以下の<appSettings>…</appSettings>セクションを追加して智恵袋データベースの接続情報(※)を追加します。

 

<appSettings>

 <add key="conStringBlog"

   value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\wd03\webdb\blog.mdb" />

</appSettings>

 

※データベース接続文字列の「Data Source=」に指定するパス名は、ご使用のWindowsの環境に合わせて読み替えてください。

 

●書き込み権限の設定

 

ASP.NETAccessのデータベースを使用する場合、ASP.NETのワーカープロセス(aspnet_wp.exe)のメモリ空間でデータベースが処理されます。aspnet_wp.exeプロセスの実行ユーザーは、「マシン名\ASPNET」ですから、このユーザーに対してAccessのデータベースの書き込み権限を与える必要があります(Accessは内部的に一時的なファイルを作成しますので、mdbの代わりにmdbが格納されているフォルダに書き込み権限を付与します)。ここでは、Windows XP Professional(IIS 5.1)を使用している前提で、フォルダに書き込み権限を与える手順を説明します。Windows Server 2003(IIS 6.0)を使用するときはw3wp.exeが実行されますので、実行ユーザーは「NT AUTHORITY\NETWORK SERVICE」になります。

 

Windowsのエクスプローラを起動したら、「C:\wd03\webdb()の右クリックから[プロパティ]を選択します。「webdbのプロパティ」が表示されたら、[セキュリティ]タブから[追加]ボタンをクリックします。

 

※フォルダのパス名は、ご使用のWindowsの環境に合わせて読み替えてください。

 

図4:webdbフォルダのプロパティを表示したら[追加]ボタンをクリック

 

 

「ユーザーまたはグループの選択」が表示されたら、「選択するオブジェクト名を入力してください」に「ASPNET()を入力して[OK]をクリックします。

 

Windows Server 2003を使用するときは、「ASPNET」の代わりに「NT AUTHORITY\NETWORK SERVICE」を入力します。

 

5:選択するオブジェクト名に「ASPNET」を入力したら[OK]をクリック

 

 

webdbのプロパティ」に戻ったら、「セキュリティ」タブから[ASP.NETコンピュータアカウント・・・]を選択して、「ASP.NETコンピュータアカウントのアクセス許可」から「書き込み」をチェックします。最後に、[OK]をクリックしてプロパティウィンドウを閉じます。これでwebdbフォルダに書き込み権限が設定されましたのでレコードの追加、更新、削除が可能になります。

 

図6:ASPNETアカウントに「書き込み」権限を許可する

 

 

SQL Serverを使用するときは、Enterprize Managerまたはosqlを起動して、SQL Serverへのログイン認証、データベースのアクセス許可、テーブルの書き込み権限などを設定する必要があります。

 

PermissionsWinXP.bat (IIS 5.0/5.1用のバッチコマンド)

REM Usage: osql machinename databasename

osql -E -S (local) -C -Q "sp_grantlogin '%1\ASPNET'"

osql -E -S (local) -d %2 -Q "sp_grantdbaccess '%1\ASPNET'"

osql -E -S (local) -d %2 -Q "sp_addrolemember 'db_owner', '%1\ASPNET'"

 

PermissionsWin2003.bat (IIS 6.0用のバッチコマンド)

REM Usage: osql databasename

osql -E -S (local) -C -Q "sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'"

osql -E -S (local) -d %1 -Q "sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"

osql -E -S (local) -d %1 -Q "sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'"

 

ASP.NET 徹底活用術(Part2)のホームへ戻る