次の方法で共有


SQL Server Express Edition の ASP.NET との使用

更新 : 2007 年 11 月

Microsoft SQL Server 2005 Express Edition は、アプリケーションをビルドするための簡単なデータベース解決策を提供します。SQL Server Express Edition は、Transact-SQL、ストアド プロシージャ、ビュー、トリガ、SQL Server CLR Integration (SQLCLR)、および XML データ型など、SQL Server 2005 の完全なプログラミング モデルをサポートします。SQL Server Express Edition をデータ ソースとして使用してアプリケーションを開発すると、そのアプリケーションが SQL Server 2005 を実行している運用サーバーと互換性があることが保証されます。

SQL Server Express Edition データベースへの接続

データベース サーバーをローカル SQL Server Express Edition データ ソースとして指定することで、SQL Server データベースに接続する場合と同様に、SQL Server Express Edition データベースに接続できます。たとえば、次の接続文字列により、Customers という名前のデータベースに接続されます。

Data Source=.\SQLEXPRESS;Initial Catalog=Customers;Integrated Security=True;

AttachDBFilename 接続文字列属性を、InitialCatalog 接続文字列属性または Database 接続文字列属性の代わりに使用することで、アタッチするデータベースを指定することもできます。ファイル名を使用してデータベースに接続することで、データベースをアプリケーションに配置するのが容易になります (ターゲット サーバーが SQL Server Express Edition を実行している場合)。たとえば、次の接続文字列により、Customers.mdf ファイルに格納されているデータベースに接続されます。

Data Source=.\SQLEXPRESS;AttachDbFileName=e:\data\Customers.mdf;Integrated Security=True;User Instance=True

ASP.NET には、データを Web アプリケーションの App_Data ディレクトリに格納するための便利なオプションがあります。App_Data ディレクトリの内容は、Web 要求に対して提供されません。これにより、アプリケーション用データのセキュリティが向上します。さらに便利な機能として、アプリケーションの App_Data ディレクトリへのファイル パスの代わりに |DataDirectory| 接続文字列値を指定できます。SqlDataSource コントロールや、メンバシップ、ロール、ユーザー プロファイル、Web パーツのパーソナル化などのためのプロバイダのような ASP.NET 機能では、データベースへの接続を開始するときに、|DataDirectory| 接続文字列値の代わりに自動的に App_Data ディレクトリへのパスを使用します。これにより、Web アプリケーションが異なるディレクトリに移動されても、データベースへのパスは最新の状態に維持されます。|DataDirectory| 接続文字列値を含んだ接続文字列のコード例を次に示します。

Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;User Instance=True
ms247257.alert_note(ja-jp,VS.90).gifメモ :

SQL Server Express Edition では、User Instance を true に設定した接続文字列で接続する場合、.mdf ファイルへの単一接続のみ許可されます。

Visual Web Developer が保持している接続を閉じるには、ソリューション エクスプローラでデータベースを右クリックし、[デタッチ] オプションを選択するか、またはサーバー エクスプローラでデータベースを右クリックし、[切断] を選択します。Web アプリケーションを実行またはデバッグしている場合、開かれているデータベース接続はすべて Visual Web Developer によって自動的に閉じられます。

さらに、SQL Server Express Edition データベースに対して開かれている接続を解放する必要がある場合、Internet Information Services Manager (IIS Manager) を使用して Web アプリケーションをアンロードできます。また、Web アプリケーションのルート ディレクトリに、App_offline.htm という HTML ファイルを追加することで、Web アプリケーションをアンロードすることもできます。再び Web 要求に応じて Web アプリケーションを開始できるようにするには、単に App_offline.htm ファイルを削除するだけです。データベースを新しい場所にコピーまたは移動するとき、SQL Server Express Edition データベースに対して開かれている接続を解放する必要があります。

SQL Server Express Edition データベースの設定

Visual Web Developer には、SQL Server Express Edition データベースの作成、テーブルやストアド プロシージャなどのデータベース要素の管理、およびデータベースへの接続の管理に役立つツールが用意されています。これらの機能には、サーバー エクスプローラのウィンドウからアクセスします。SQL Server Express Edition データベースの作成については、「方法 : SQL Server Express Edition データベースを作成する」を参照してください。

SQL Server Express Edition データベースは、SQL Server Express Edition を実行し CREATE DATABASE コマンドを実行するコンピュータに接続するか、SQL Server Express Edition で提供される SQL Server 管理ツールを使用することによっても作成できます。

メンバシップ、ロール、ユーザー プロファイル、Web パーツのパーソナライズ化など、データを SQL Server データベースに格納する ASP.NET 機能の既定プロバイダを設定して、アプリケーションの App_Data ディレクトリの Aspnetdb.mdf SQL Server Express Edition データベースに接続します。既定プロバイダを使用して、これらのデータ格納機能を有効にする際、Aspnetdb.mdf SQL Server Express Edition データベースがアプリケーションの App_Data ディレクトリに存在しない場合、データベースが自動的に作成されます。アプリケーションの App_Data ディレクトリが存在しない場合は、それも作成されます。

ユーザー インスタンス

SQL Server Express Edition はユーザー インスタンスをサポートします。これは、SQL Server Express Edition データベースに接続する各ユーザーに対して新しいプロセスが開始されることを意味します。プロセスの ID は、接続を開始したユーザーになります。ASP.NET アプリケーションの ID の確認については、「ASP.NET の偽装」を参照してください。

ローカル データベース プロジェクトに接続すると、既定では、Visual Web Developer はユーザー インスタンスを有効にした状態で SQL Server Express Edition データベースに接続します。たとえば、Visual Web Developer で SQL Server Express Edition データベースへの接続に使用される典型的な接続文字列を次のコード例に示します。

Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True

ユーザー インスタンスを有効にすることはデスクトップ開発には適していますが、複数ユーザーを対象としたサイトをホストする Web サーバーでは、アプリケーションを分けてセキュリティで保護する必要があるので、ワーカー プロセスを開始することは適切ではありません。同じプロセス ID で実行される ASP.NET アプリケーションは、同じユーザー インスタンスに接続できます。Windows 2000 および Windows XP Professional では、すべての ASP.NET アプリケーションが同じプロセス ID (既定では、ローカルの ASPNET アカウント) で実行され、Windows Server 2003 では、同じアプリケーション プールの ASP.NET アプリケーションが同じプロセス ID (既定では、NETWORK SERVICE アカウント) で実行されるので、互いに信頼しないアプリケーションを含む共有ホスト サーバーはユーザー アカウントを明示的に無効にする必要があります。この機能は、SQL Server Express Edition インスタンスに接続し (たとえば、コマンド プロンプトで osql –E –S .\SQLEXPRESS のコマンドを実行)、次の Transact-SQL コマンドを実行することで、オフにできます。

EXEC sp_configure 'show advanced option', '1'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sp_configure 'user instances enabled', 0

GO

RECONFIGURE WITH OVERRIDE

GO

SQL Server Express Edition データベースの配置

SQL Express Edition データベースは、データベース スキーマとデータを含む .mdf ファイルと、データベースのログ情報を含む .ldf ファイルで構成されます。Web サイトの配置に Copy Web Site ツールを使用する場合、SQL Server Express Edition データベース ファイルもコピーされます。ターゲット サーバーに SQL Server Express Edition がインストールされていれば、アプリケーションは実行を続けます。詳細については、「方法 : Web サイトのコピーツールで Web サイト ファイルをコピーする」を参照してください。

この他に、次のオプションを SQL Server Express Edition データベースの配置に使用できます。

  • SQL Server Express Edition データベースに対してファイル ベースの接続を実行する場合、XCopy 、FTP、または他の手段で、アプリケーションと一緒にこれらのファイルをターゲット サーバー (SQL Server Express Edition がインストールされている) にコピーできます。

  • SQL Server Express Edition は、他のバージョンの SQL Server 2005 と同じファイル形式を使用するので、.mdf ファイルおよび .ldf ファイルを SQL Server を実行しているサーバーにコピーし、それらのファイルをデータベースとしてアタッチできます。

  • データベース スキーマは含むがデータは含まない空の SQL Server Express Edition データベースをコピーする場合、SQL Server 管理ツールを使用して、ターゲット データベースで実行できるスクリプトを生成して、開発データベースからスキーマを複製できます。

ms247257.alert_note(ja-jp,VS.90).gifメモ :

SQL Server Express Edition データベースを、互いに信頼しない複数のサイトをホストする Web サーバーに配置する場合、サーバー上の他のアプリケーションにデータが公開されないようにするため、ファイル ベースの接続やユーザー インスタンスは使用できません。この場合は、SQL Server Express Edition データベースの内容を、配置済みの ASP.NET アプリケーションがアクセスできる他のバージョンの SQL Server 2005 に移行することをお勧めします。

SQL Server Express Edition データベースに、メンバシップ データベースに格納された暗号化されたパスワードのような暗号化された情報が含まれる場合、暗号化キーもターゲット サーバーにコピーする必要があります。

SQL Server Express Edition データベース全体を移動する場合、ロックの原因になるので、データベースに対して開かれている接続が存在しないことを確認する必要があります。

ロックされたデータベースのロック解除

データベースに対して開かれている接続がある場合、そのデータベースはロックされていて移動や削除ができません。開かれた接続は、ASP.NET アプリケーション、Visual Studio、または他のプログラムやデータベース クライアントによって保持されている場合があります。データベースのロックを解除するには、データベースに対する開かれた接続をすべて閉じる必要があります。開かれた接続は、次の方法で閉じることができます。

  • Visual Web Developer が保持している接続を閉じるには、ソリューション エクスプローラでデータベースを右クリックし、[デタッチ] オプションを選択するか、またはサーバー エクスプローラでデータベースを右クリックし、[切断] を選択します。Web アプリケーションを実行またはデバッグしている場合、開かれているデータベース接続はすべて Visual Web Developer によって自動的に閉じられます。

  • ASP.NET アプリケーションが保持している接続は、アプリケーションを終了することによって閉じることができます。これは、IIS Manager を使用したり、App_offline.htm というファイルを ASP.NET アプリケーションのルート ディレクトリに配置すること (アプリケーションを再起動する場合は、このファイルを削除する必要があります) で実行できます。

  • Windows Forms アプリケーションのような他のソースが保持している接続は、プログラムを終了することによって閉じることができます。

参照

概念

ASP.NET プロファイル プロパティの概要

その他の技術情報

ASP.NET でのデータ アクセス

メンバシップを使用したユーザーの管理

ロールを使用した承認の管理