VWD2005 には、シンプルなデータベース ソリューションを使用してアプリケーションを構築したい非専門家または熱心な開発者を対象とした SQL Server 2005 の無料バージョンである SQL Server 2005 Express Edition が含まれています。 SQL Server Express は、SQLCLR、T-SQL、ストアド プロシージャ、ビュー、トリガー、XML データ型などの完全な SQL Server プログラミング モデルをサポートしているため、SQL Server Express を使用してこれらのテクノロジについて学習し、アプリケーションを確実に実行できるようにすることができます。上位レベルのプラットフォーム (SQL Server Enterprise Edition など)。 SQL Server Express はダウンロードとインストールが簡単で (36 MB 未満)、Visual Studio 2005 および Visual Web Developer 2005 に含まれています。
Visual Studio には、SQL Server Express データベースの管理に使用できるデータベース エクスプローラーやクエリ ビルダーなどのデータベース管理用のツールが含まれています。 Visual Studio は、プロジェクトの一部として SQL Server Express データベースを構築するための新しいファイルベースのデータベースもサポートしています。同時に、Visual Studio 2005 と SQL Server 2005 Express は、次の機能を含む、データ駆動型 Web アプリケーションを構築および展開するための完全なソリューションを提供します。
· データベース プロジェクト データ項目
· ローカル データベース接続
· データベース ブラウザ管理
· 相対パス接続文字列
· XCopy 展開のサポート
· 統合されたデバッグ サポート
この記事では、Visual Studio 2005 におけるファイル ベースのデータベースのアプローチと、設計者がこれらのデータベースを作成および使用する方法について説明します。
Visual Web Developer と DataVisual
Web Developer は、Web アプリケーションでデータベースを使用するためのツールを多数提供します。データベース ブラウザを使用すると、データベースに簡単に接続し、データベース ダイアグラムやスキーマを作成または表示できます。クエリ ビルダー ダイアログ ボックスとクエリ結果テーブルを使用して、データベースにクエリを実行し、データを入力することもできます。新しいデータベースの作成 (ローカル ファイルを使用) もプロジェクト データ項目として提供されます。
Visual Web Developer でデータベースに接続したら、データベース テーブルをページに直接ドラッグ アンド ドロップして、データ バインドされた GridView コントロールを作成できます。 Visual Web Developer は、関連付けられたデータ ソース コントロールを自動的に作成し、データ テーブルに基づいてその選択、更新、挿入、および削除の操作を構成します。この素早い操作により、データ ソースを手動で作成するために必要な多くの作業が節約され、必要に応じて GridView を適切なデータ バインド コントロールに簡単に置き換えることができます。
ローカル データベースとサーバー データベース
サーバーベースのデータベースと接続文字列についてはすでによくご存じかもしれません。この場合、データベース サーバー (SQL Server 2005 など) は、データベース名をサーバーが管理するデータベース ファイルに関連付けます。
たとえば、「server=(local)SQLExpress;database=Pubs;Integrated Security=true」
のように、サーバー名、データベース名、資格情報を指定して、サーバー ベースのデータベースに接続できます。
ただし、Visual Studio 2005 は、ローカル データベースの概念。これは、現在の Web アプリケーションの App_Data ディレクトリに追加されるファイルです。このディレクトリの内容はユーザーの要求に応答しないため、App_Data ディレクトリにデータ ファイルを保存しても安全です。このディレクトリは、XML ファイルやその他のデータ ストレージの保存場所としても推奨されます。ネイティブ SQL Server Express データベースには、SQL Server でサポートされる標準ファイル形式である .MDF 拡張子 (「MyDatabase.MDF」など) が付いています。サーバーに接続すると、データベースには関連するログ ファイル (「MyDatabase_log.LDF」など) も含まれます。データベース ファイルとログ ファイルの場所は同じである必要があります。
相対パス接続文字列を使用して、ローカル ファイル データベースを SQL Server Express に自動的に接続できます。相対パスにより、アプリケーションが他の場所に移動されたときにデータベース接続が中断されなくなります。 Web アプリケーションの相対パス接続文字列は次のようになります。
"server=(local)SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
上記の接続文字列には、さらに 2 つの追加属性があります。 。 AttachDbFileName プロパティは、接続が開かれたときにサーバーに動的に接続されるデータベース ファイルの場所を指定します。このプロパティはデータベースへのフル パスを受け入れることができますが (|DataDirectory| 構文を使用するなど)、実行時にこのパスはアプリケーションの App_Data ディレクトリに置き換えられます。これにより、アプリケーションが別の場所に移動されたときに接続が中断されなくなります。 2 番目のプロパティは User Instance=true で、SQL Server Express がデータベースを接続する方法を指定します。この場合、SQL Server Express はデータベースを新しいインスタンスに接続するための新しいプロセスを作成し、接続を開いたユーザーとして実行します。 ASP.NET アプリケーションでは、このユーザーは、オペレーティング システムに応じて、ローカル ASPNET アカウントまたはデフォルトのネットワーク サービスになります。管理者以外のアカウント (ASP.NET アカウントなど) によって提供されたデータベース ファイルを安全に接続するには、別の SQL Server ユーザー インスタンスを作成する必要があります。
注: デフォルトでは、すべての ASP.NET アプリケーションが同じプロセスで実行されるため、すべてのアプリケーションはローカル データベースを同じ SQL Server Express インスタンスに接続します。これは、アプリケーションが最初にどのデータベースにアタッチされていたかに関係なく、すべてのアプリケーションがこのインスタンスにアタッチされたすべてのデータベースに同じアクセス権を持っていることを意味します。異なるアプリケーションを分離するには、各アプリケーションを異なるワーカー プロセスまたはアプリケーション プール (IIS 6 の場合) で実行する必要があります。このため、ローカル SQL Server データベースは主に開発を容易にすることを目的としており、共有ホスティング環境のサーバーベースのデータベースを置き換えることを目的としたものではありません。
もう 1 つの重要な点は、2 人のユーザーが同時にローカル データベースに接続できないことです。 Visual Studio でアプリケーションをデザインするとき、デザイナーは自動的に接続を解放し、Visual Studio と ASP.NET がデータベース ファイルを共有できるようにします (たとえば、デザイナーで実行中のアプリケーションをデバッグするとき)。
ローカル データベースの作成
Visual Studio Web アプリケーション プロジェクトでローカル データベースを簡単に作成できます。 Visual Studio には SQL Server Express がインストールされているので、次の手順を使用してローカル データベースを作成し、テーブルを追加し、データを設定できます。
ローカル データベースを作成するには:
1. ソリューション ブラウザを右クリックし、[新しい項目の追加...] オプションを選択します。
2. 「SQL Database」項目を選択し、「Database.mdf」などのファイル名を指定します。
3. Visual Studio では、このファイルを App_Data ディレクトリに追加するよう求められます。 「はい」をクリックします。
4. Visual Studio はこのファイルを追加し、データベース ブラウザーを使用してデータベースに自動的に接続します。
ローカル データベースにデータ テーブルを追加するには、次の手順を実行します。
1. データベース ブラウザで [テーブル] ノードを右クリックし、[新しいテーブルの追加] オプションを選択します。
2. データベース内の列の名前とタイプを入力し、オプションでプロパティ テーブル内の他の列プロパティを設定します。サンプルの連絡先データベースをセットアップするには、以下の手順に従います。
3. 最初の列の名前を「ContactID」に、データ型を「int」に設定します。 「NULL を許可する」チェックボックスをオフにします。
4. ContactID 列の左側にある灰色の四角形を右クリックし、[主キーとして設定] オプションを選択します。
5. 以下の「列プロパティ」テーブルで、「識別子の仕様」ノードを展開し、「識別子であるか」を「はい」に設定します。
6. 2 番目の列の名前を「ContactName」に、データ型を「varchar(50)」に設定します。 「NULL を許可する」チェックボックスはオンのままにしておきます。
7. Ctrl-S を押してテーブルを保存し、テーブル名を「連絡先」に設定します。 「OK」をクリックしてテーブルを保存します。
8. テーブル定義ウィンドウを閉じます。
テーブルにデータを入力するには:
1. データベース ブラウザでデータ テーブル ノード (たとえば、「連絡先」) を右クリックし、[テーブル データの表示] オプションを選択します。
2. 表示されたフォームにデータテーブル行のデータを入力します。上記の Contacts の例を使用する場合、ContactName 列に値を入力すると、データベースが対応する ContactID 値を自動的に生成します。
3. テーブルウィンドウを閉じます。
ローカル データベースへの
バインド ローカル データベースにバインドするには、相対パス接続を使用してファイルに接続するように ASP.NET データ ソース コントロールを構成する必要があります。 SQL Server Express データベースを SqlDataSource および GridView コントロールに単純にバインドするには、次の手順を実行します。
1. ソリューション ブラウザのページ (たとえば、「Default.aspx」) をダブルクリックします。 Visual Studio によってこのページが開きます。
2. ページウィンドウの下部にある「デザインビュー」タブを選択して、デザインビューに切り替えます。
3. ソリューション ブラウザでデータベース ファイル (「Database.mdf」など) をダブルクリックします。 Visual Studio により、接続用のデータベース ブラウザーが開きます。
4. 「テーブル」ノードを展開して、データベース内のテーブルを表示します。
5. データベース ブラウザーのテーブルをデザイン ビューで開いているページにドラッグ アンド ドロップします。 Visual Studio は、SqlDataSource コントロールにバインドされた GridView を作成します。
6. GridView コントロールの「インテリジェント トランザクション パネル」を展開し、ページング、並べ替え、編集を選択します。
7. Ctrl-F5 を押してページを実行します (デバッグなし)。
次の例は、ローカル データベースに接続された GridView および SqlDataSource コントロールを示しています。この例を実行するには、ASP.NET プロセス アカウントに、~/App_Data ディレクトリ内の MDF および LDF ファイルに対する読み取り/書き込みアクセス許可が必要です。権限の設定プロセスは次のとおりです。
1. Windows ブラウザで ~/App_Data/Database.MDF ファイルを選択し、「プロパティ」を選択します。
2. 「セキュリティ」タブを選択し、「追加」をクリックします。
3. [場所...] をクリックし、(リストの一番上にある) コンピュータ名を選択して、[OK] をクリックします。
4. [オブジェクト名] テキスト領域に、ASP.NET プロセス アカウントの名前を入力します。デフォルトでは、IIS 6.0 の名前は「Network Service」、IIS 5.x の名前は「ASPNET」です。
5. 「許可」欄で「読み取り」と「書き込み」を選択し、「OK」をクリックします。
6. App_Data ディレクトリに LDF ファイルがある場合は、上記の手順を繰り返して LDF ファイルのプロパティを設定する必要があります。
Visual Studio を使用してローカル コンピューター上にアプリケーションを構築する場合、既定では、App_Data ディレクトリに対する上記のアクセス許可が与えられます。データベース ファイルのアタッチ後にアクセス許可を変更する必要がある場合は、新しいアクセス許可を有効にする前に、まずアプリケーション ドメインを閉じる必要があります。
<コラム>
<asp:BoundField DataField="ContactID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="連絡先名" HeaderText="名前" SortExpression="名前" />
</コラム>
</asp:GridView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ContactsDatabase %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [連絡先ID], [連絡先名] FROM [連絡先]" OnSelected="SqlDataSource1_Selected"></ asp:SqlDataSource>
ローカル データベースの展開
ローカル データベース ファイルの利点の 1 つは、アプリケーションに添付でき、アプリケーションの一部として他の場所または他のコンピュータに移動できることです (もちろん、コンピュータでも SQL Server が実行されている必要があります)。急行)。データベースを移動するときは、ファイルがロック解除された状態である必要があります。デザイナーまたはアプリケーションがデータベースに接続している間、ファイルはロックされます。ロックを解除するには、データベースへのアクティブな接続をすべて閉じる必要があります。次の手法を使用してデータベース接続を閉じることができます。
· ASP.NET が接続を開いている場合は、"app_offline.htm" ファイルを Web アプリケーションのルート ディレクトリに追加することで、アプリケーション ドメインを閉じることができます。その機能は、アプリケーション ドメイン (プロセスではなく) を閉じ、すべてのアプリケーション要求をこのファイルにリダイレクトすることです (404 応答コードを返します)。アプリケーションを再起動したい場合は、このファイルを削除してください。デフォルトでは、ADO.NET 接続プールがアクティブな接続を維持するため、ページ コードで接続を閉じるだけではファイル ロックは解除されないことに注意してください。
Visual Studio には、xcopy、FTP、または FrontPage サーバー拡張機能を使用して、作業ディレクトリからターゲット サーバーにアプリケーション ファイルをコピーできる Web のコピー機能が用意されています。ターゲット コンピュータはローカルまたはリモートにすることができます。 Visual Studio のメニュー バーから [Web サイト] > [Web サイトのコピー...] を選択すると、Web のコピー機能を呼び出すことができます。
Copy Web または単純な xcopy または FTP 操作を使用してデータベースを移動できますが、アプリケーションが引き続き動作するには、ターゲット コンピューターで SQL Server Express (同じインスタンス名で) が実行されている必要があります。 ASP.NET を実行しているすべてのアプリケーションは同じ SQL インスタンスに接続されているため、ターゲット コンピューター上のすべてのアプリケーションは相互に信頼する必要があると前述しました。あるアプリケーションが別のアプリケーションのデータベースを参照できない場合は、ローカル データベースの代わりにサーバー ベースのアプローチ (SQL 認証またはその他の分離技術を使用) を使用することをお勧めします。 SQL Server Express を開発ツールとして使用する場合は、運用展開の一部として SQL Server Express データベースのコンテンツを顧客にコピーする必要があります。