連載:VS 2005でいってみようDBプログラミング

第7回 データソース・コントロールでいってみよう(後編)

山田 祥寛(http://www.wings.msn.to/
2006/08/26
Page1 Page2 Page3 Page4

Microsoft Accessに特化したAccessDataSourceコントロール

 AccessDataSourceコントロールは、その名のとおり、Microsoft Access(「.mdb」ファイル)に特化したデータソース・コントロールです。

 SqlDataSourceコントロールから派生したコントロールということで、SqlDataSourceコントロールとほとんど同様の手順で利用できますが、データベース接続文字列(ConnectionStringプロパティ)が不要で、代わりにデータベース・ファイルのパス(DataFileプロパティ)を指定する必要があるという点が異なります。

 以下では、AccessDataSourceコントロールを使用した基本的なデータベースアクセスの手順を見ていくことにしましょう。データベース構成ウィザードについては、第3回をはじめ、何回かにわたって紹介していますので、ここではAccessDataSourceコントロール固有の設定に注目してみます。

[1]Accessデータベースをアプリケーションに配置する

 使用するAccessデータベース・ファイル(「.mdb」ファイル)を、アプリケーション・ルート配下の「App_Data」フォルダ直下に配置します*2

*2 本サンプルでは、サンプル・プログラムに含まれるMyDB.mdbを使用します。MyDBには、第2回でも紹介したbookテーブル(とデータ)が含まれているものとします。

 データベース・ファイルは任意のフォルダに配置することが可能ですが、App_Dataフォルダに配置することで、エンドユーザーがHTTP経由でデータベース・ファイルにアクセスすることができなくなります(第2回のコラム「ASP.NETのアプリケーション・フォルダ」も参照)。

 当然、データベース・ファイル本体が、エンドユーザーに直接アクセスされることは、セキュリティ的な観点からも絶対に避けるべきです。特別な理由がない限り、Accessデータベース・ファイルは、必ずApp_Dataフォルダ配下に配置するようにしてください。

[2]データベースへのアクセス権限を設定する

 Accessデータベース・ファイルを扱う場合には、データベース・ファイルを配置したフォルダに対して適切なアクセス権限を設定する必要があります。

 具体的には、ASP.NETの実行ユーザー(Windows 2000/XPでは「ASPNET」、Windows Server 2003では「NETWORK SERVICE」)がApp_Dataフォルダ(Accessデータベース・ファイルを配置したフォルダ)に対して読み取り/書き込みアクセス権を持つ必要があります。

 ちなみに、Visual Studio 2005を使用してWebサイトを作成した場合、App_Dataフォルダはデフォルトで作成され、かつ、ASPNET/NETWORK SERVICEアカウントに対して、読み取り/書き込みアクセス権が付与されます。

[3]AccessDataSourceコントロールを作成する

 さて、Accessデータベース・ファイルの用意ができたところで、AccessDataSourceコントロールを利用して、データベースにアクセスしてみることにしましょう。

 手順はこれまでと同様。新規のWebフォームに対してGridViewコントロールを配置し、コントロール右上のタスク・メニューの[データソースの選択]から「<新しいデータソース>」を選択します。

 データソース構成ウィザードが起動しますので、以下の画面のように必要な項目を入力していきます。データベース構成ウィザードについては、これまでも再三にわたって紹介していますので、異なる部分のみを紹介します。




図8 データソース構成ウィザード
データを取得する場所として「Accessデータベース」を選択し、使用するデータベースとしては相対パスで「~/App_Data/MyDB.mdb」を指定する。ウィザードを完了するとGridViewコントロールにデータソース・コントロールが自動的に追加される。

 SqlDataSourceコントロールを利用する場合は、これまではデータを取得する場所として「データベース」を選択しましたが、Accessデータベース・ファイルを使用する場合には「Accessデータベース」を選択してください。また、使用するデータベースとしては相対パスで「~/App_Data/MyDB.mdb」を指定します。「~」はアプリケーション・ルートを意味します。

 以上で、Accessデータベースへの接続手続きは完了です。Webフォーム(サンプル・プログラムではAccessDataSource.aspx)を起動し、MyDB.mdbのbooksテーブルの内容が表示されれば成功です。

[コラム]ASP.NETにおけるパスの記法

 本文では「~」(チルダ)を利用したアプリケーション・ルートからの相対パスを使用していますが、ASP.NETのパス記法には、ほかにもさまざまな書き方があります。

 以下の表3に、ASP.NETアプリケーションにおける主なパス記法についてまとめます。

種類 記述例
絶対パス http://www.wings.msn.to/App_Data/MyDB.mdb
相対パス(サイト・ルート起点) /DBMagazine/App_Data/MyDB.mdb
相対パス(アプリケーション・ルート起点) ~/App_Data/MyDB.mdb
相対パス(カレント・フォルダ起点) ./App_Data/MyDB.mdb、またはApp_Data/MyDB.mdb
表3 ASP.NETにおける主なパスの記法

 「http://〜」で始まる絶対パス(絶対URL)は、主に外部サイト上のリソースを指定する場合に使用します。もちろん、同サイト/アプリケーション内のリソースに対しても絶対パスを使用することは可能ですが、アプリケーションの可搬性という観点からも、特別な理由がない限り、相対パス(相対URL)を使用するべきです。


 もっとも、相対パスも「どのフォルダを起点にするか」によって、いくつかに分類されます。まず、「/」で始まるパスはサイト・ルートが起点となります。主に同一サイト上の異なるアプリケーションを参照する場合に使用します(先ほどと同様、可搬性の観点から、同一アプリケーション内のリソースに対して利用するべきではありません)。


 フォルダ/ファイル名、または「./」「../」で始まるパスは、カレント・フォルダを起点とした相対パスを表現します。アプリケーション内のリソースを指定するには、最もシンプルな記法ですが、半面、参照元のファイルを移動した場合にパスに影響が出る可能性があります。つまり、アプリケーション内で階層関係の変動がある可能性がある場合には、アプリケーション・ルート起点の相対パス(「~」で始まるパス)を指定することをお勧めします。

 ただし、「~」記法は、あくまでASP.NETアプリケーションでのみ有効なパス記法です。つまり、サーバ・コントロールのプロパティや構成ファイルのように、ASP.NETを通じて解析される要素に対して使用することは可能ですが、(例えば)HTMLにおける<img>タグのsrc要素のようにASP.NETによって解析されない要素では利用できませんので、注意してください。

■パスワード付きのAccessデータベースを利用する

 本節冒頭でも述べたように、AccessDataSourceコントロールではデータベース接続文字列を指定することができません。従って、ユーザー名/パスワードで保護された「.mdb」ファイルを扱う場合には、(AccessDataSourceコントロールではなく)SqlDataSourceコントロールを使用する必要があります。

 データベース構成ウィザードの流れについては、ここまでの解説を参照いただくとして、ここではパスワード設定にかかわる部分について注目することにしましょう。データベース接続ウィザードの[データ接続の選択]ダイアログから[新しい接続]ボタンをクリックします。これにより[接続の追加]ダイアログが開きます。



[新しい接続]ボタンをクリック


図9 [接続の追加]ダイアログの表示
パスワード付きのAccessデータベースを利用する場合にはSqlDataSourceコントロールを使用し、このダイアログでユーザー名やパスワードを指定する。

 [接続の追加]ダイアログでは、以下の表4の要領で接続情報を入力します。なお、データソースは[変更]ボタンから表示される[データソースの選択]ダイアログによって変更することができます。

項目
データソース Microsoft Accessデータベース・ファイル
データベース・ファイル名 MyDB.mdbへのパス
ユーザー名 Admin(管理者ユーザーを表すので固定)
パスワード 12345(自分で設定した内容に応じて変更すること)
パスワードの保存 チェック
表4 接続情報([接続の追加]ダイアログ)

 以上で、パスワード付きの「.mdb」ファイルへ接続することができます(実際の動作は、サンプル・プログラム内のAccessPasswd.aspxで確認してください)。

 なおここで一点注意していただきたいのは、Visual Studio 2005はデフォルトで「.mdb」ファイルへのパスを絶対パスでアプリケーション構成ファイルであるWeb.configに記録するという点です。可搬性という観点からも、予約変数「|DataDirectory|」で置き換えておくことをお勧めします*3

<add name="AccessDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\DBMagazine\App_Data\MyDB.mdb;Persist Security Info=True;Jet OLEDB:Database Password=12345" providerName="System.Data.OleDb" />

 ↓↓↓

<add name="AccessDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MyDB.mdb;Persist Security Info=True;Jet OLEDB:Database Password=12345" providerName="System.Data.OleDb" />
リスト2 Web.configにおける接続設定
デフォルトでは、Accessデータベース・ファイルへのパスは絶対パスとして記録される。可搬性を考慮した場合、Web.configを直接編集して、予約変数「|DataDirectory|」で置き換えるべき。

*3 「|DataDirectory|」は接続文字列における予約変数で、アプリケーション・ルート配下の「App_Data」フォルダを表します。

[注意] ユーザー名やパスワードを含むUDL(Universal Data Link)ファイルを指定した接続文字列を使用することも可能です。しかし、UDLファイルは「接続情報が暗号化されない」「.NET Frameworkによるセキュリティ保護の対象外である」などの理由から、特別な理由がない限り、利用するべきではありません。


 INDEX
  Visual Studio 2005でいってみようDBプログラミング
  第7回 データソース・コントロールでいってみよう(後編)
    1.Visual Studioでデータアクセス・コンポーネントを自動生成(1)
    2.Visual Studioでデータアクセス・コンポーネントを自動生成(2)
  3.Microsoft Accessに特化したAccessDataSourceコントロール
    4.XMLデータを操作するXmlDataSourceコントロール
 
インデックス・ページヘ  「Visual Studio 2005でいってみようDBプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間