データベースへのバインド
更新 : 2007 年 11 月
Web アプリケーションは、一般的に Microsoft SQL Server、Microsoft Access、Oracle、OLEDB データ ストア、ODBC データ ストアなどのリレーショナル データベースから取得するデータを表示します。ASP.NET には、データベースのデータにコントロールをバインドするタスクを簡略化するために、LinqDataSource コントロールと SqlDataSource コントロールが用意されています。
LinqDataSource コントロール
LinqDataSource コントロールでは、ASP.NET Web ページで宣言マークアップを通じて統合言語クエリ (LINQ: Language-Integrated Query) を使用し、データ オブジェクトのデータを取得および変更できます。このコントロールは、選択、更新、挿入、および削除の各コマンドの自動生成をサポートしています。また、並べ替え、フィルタ処理、およびページングの機能もサポートしています。
LinqDataSource コントロールを使用してデータベースとデータをやり取りする場合、LinqDataSource コントロールをデータベースに直接接続するわけではありません。代わりに、データベースおよびそのテーブルを表すエンティティ クラスとやり取りします。エンティティ クラスを生成するには、オブジェクト リレーショナル デザイナを使用するか、SqlMetal.exe ユーティリティを実行します。詳細については、「オブジェクト リレーショナル デザイナ (O/R デザイナ)」および「コード生成ツール (SqlMetal.exe)」を参照してください。
作成したエンティティ クラスは、通常、Web アプリケーションの App_Code フォルダに格納されます。O/R デザイナまたは SqlMetal.exe ユーティリティは、データベースを表すクラスを 1 つと、データベースのテーブルを表すクラスをテーブルごとに 1 つ生成します。
LinqDataSource コントロールをデータベース クラスに接続するには、ContextTypeName プロパティを、データベースを表すクラスの名前に設定します。LinqDataSource コントロールを特定のテーブルに接続するには、TableName プロパティを、そのデータ テーブルを表すクラスの名前に設定します。たとえば、AdventureWorks データベースの Contacts テーブルに接続するには、ContextTypeName プロパティを AdventureWorksDataContext などのクラス名 (または、このデータベース オブジェクトに対して指定した名前) に設定します。TableName プロパティは Contacts に設定します。
Products という名前のテーブルからデータを取得する LinqDataSource コントロールを次の例に示します。データの挿入、更新、および削除をサポートするコマンドが自動的に生成されます。DetailsView コントロールにより、データが表示され、ユーザーがデータを変更できるボタンが作成されます。
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
runat="server">
</asp:DetailsView>
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
runat="server">
</asp:DetailsView>
詳細については、「LinqDataSource Web サーバー コントロールの概要」を参照してください。
SqlDataSource コントロール
SqlDataSource コントロールは、Web アプリケーションにおけるデータベースへの直接接続を表します。GridView、DetailsView、FormView の各コントロールなどのデータ バインド コントロールは、SqlDataSource コントロールを使用して自動的にデータを取得して変更できます。データを選択、挿入、更新、および削除するためのコマンドを SqlDataSource コントロールの一部として指定すると、コントロールは自動的にこの操作を実行します。接続を作成して、データベースを検索して更新するコマンドを指定するために、コード (System.Data 名前空間でクラスを使用する ADO.NET コードなど) を記述する必要はありません。
データを取得、更新、および削除するために SqlDataSource コントロールにバインドされた GridView コントロールのコード例を次に示します。
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView Edit Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView Edit Example</h3>
<!-- The GridView control automatically sets the columns -->
<!-- specified in the datakeynames property as read-only. -->
<!-- No input controls are rendered for these columns in -->
<!-- edit mode. -->
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
autogeneratedeletebutton="true"
autogenerateeditbutton="true"
datakeynames="CustomerID"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSqlDataSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
updatecommand="Update Customers SET CompanyName=@CompanyName, Address=@Address, City=@City, PostalCode=@PostalCode, Country=@Country WHERE (CustomerID = @CustomerID)"
deletecommand="Delete from Customers where CustomerID = @CustomerID"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server">
</asp:sqldatasource>
</form>
</body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView Edit Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView Edit Example</h3>
<!-- The GridView control automatically sets the columns -->
<!-- specified in the datakeynames property as read-only. -->
<!-- No input controls are rendered for these columns in -->
<!-- edit mode. -->
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
autogeneratedeletebutton="true"
autogenerateeditbutton="true"
datakeynames="CustomerID"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSqlDataSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
updatecommand="Update Customers SET CompanyName=@CompanyName, Address=@Address, City=@City, PostalCode=@PostalCode, Country=@Country WHERE (CustomerID = @CustomerID)"
deletecommand="Delete from Customers where CustomerID = @CustomerID"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server">
</asp:sqldatasource>
</form>
</body>
</html>
SqlDataSource コントロールは直接データベースに接続するため、2 層データ モデルを実装します。データの検索と更新を実行する中間層ビジネス オブジェクトにバインドする必要がある場合は、ObjectDataSource コントロールを使用します。詳細については、「ビジネス オブジェクトへのバインディング」を参照してください。
SqlDataSource コントロールの詳細については、「SqlDataSource Web サーバー コントロールの概要」を参照してください。
Microsoft Access データベースへのバインド
ASP.NET は、Microsoft Access データベース ファイル (.mdb ファイル) に接続するタスクを簡略化するための AccessDataSource コントロールを提供します。AccessDataSource クラスは SqlDataSource クラスから継承し、System.Data.OleDb .NET Framework データ プロバイダと Microsoft.Jet.OLEDB.4.0 OLE DB プロバイダを使用して自動的に .mdb ファイルに接続します。Access データベースに接続するには、DataFile プロパティにファイル パスを指定します。AccessDataSource コントロールは、Microsoft Access データベースに接続する方法の違いを除いて、SqlDataSource コントロールとまったく同様に動作します。詳細については、「AccessDataSource Web サーバー コントロールによるデータの取得」を参照してください。
参照
概念
LinqDataSource Web サーバー コントロールの概要