データ ソース コントロールによるデータの変更
更新 : 2007 年 11 月
データ ソース コントロールを使用すると、ListView、GridView、FormView、DetailsView などのデータ バインド コントロールの機能が大幅に拡張され、多くのコードを追加しなくてもデータ ソースのデータを変更できます。データ ソース コントロールがデータを変更するため、データ バインド コントロールは、データベースまたはその他のデータ ソース固有の情報を必要とせずに更新をサポートできます。各種のデータ ソース コントロールは、ページのコントロールの任意の組み合わせと共に使用できます。さらに、DataSourceID が指すデータ ソース コントロールを変更することによって、データ バインド コントロールが使用するデータベースまたはデータ ソースを変更できます。
データ変更コマンド
データ コマンドで ObjectDataSource、SqlDataSource、および AccessDataSource の各コントロールを構成すると、対応するデータ ストアに対してデータを挿入、更新、および削除できます。
LinqDataSource コントロールを使用してデータを変更する場合、データを挿入、更新、および削除するためのコマンドを用意する必要ありません。これらのコマンドは自動的に生成されます。
LinqDataSource コントロールによるデータの変更
EnableInsert、EnableUpdate、および EnableDelete の各プロパティを true に設定することで、LinqDataSource コントロールによる挿入、更新、および削除の各操作を有効にできます。これらのプロパティが true の場合、LinqDataSource コントロールは LINQ to SQL を使用して、データを変更するコマンドを自動的に作成します。
EnableInsert、EnableUpdate、および EnableDelete が true に設定されている 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>
ObjectDataSource コントロールによるデータの変更
ObjectDataSource コントロールによって、特定の種類の更新を実行するためのデータ オブジェクトのメソッドを指定できます。InsertMethod プロパティには、ObjectDataSource コントロールがデータ ソースに項目を挿入する際に呼び出されるデータ オブジェクトのメソッドを指定します。同様に、UpdateMethod プロパティには項目の更新に使用するデータ オブジェクトのメソッドを指定し、DeleteMethod プロパティにはデータ ソースから項目を削除するために使用するメソッドを指定します。
ObjectDataSource コントロールのコード例を次に示します。このコントロールの InsertMethod、UpdateMethod、および DeleteMethod の各プロパティは、基になるデータ オブジェクトのメソッドの名前によって構成されています。
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
runat="server"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
runat="server"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
詳細については、「ObjectDataSource コントロールのソース オブジェクト」を参照してください。
SQL コマンドによるデータの変更
SqlDataSource コントロールと AccessDataSource コントロールによって、データ ソースでデータを変更するために SQL コマンドを提供できます。InsertCommand プロパティには、データ ソースにレコードを挿入するための SQL コマンドを指定します。同様に、UpdateCommand プロパティにはレコードの更新に使用するコマンドを指定し、DeleteCommand プロパティにはデータ ソースからレコードを削除するために使用するコマンドを指定します。
SqlDataSource コントロールのコード例を次に示します。このコントロールの InsertCommand、UpdateCommand、および DeleteCommand の各プロパティは、更新タスクを実行する SQL コマンドで構成されています。
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
詳細については、「SqlDataSource コントロールによるデータの変更」を参照してください。
パラメータ
各自のデータ更新のシナリオをより柔軟で安全にするには、パラメータを使用してデータ ストアで挿入、更新、または削除する値を渡します。パラメータには、ページのコントロール、ASP.NET アプリケーションの変数、セッションなどの値を含めることができます。
パラメータ値は、一般にデータ バインド コントロールが更新、挿入、または削除操作を呼び出したときにデータ バインド コントロールから渡されます。さらに、特定の操作のためのデータ ソース コントロールに対してパラメータ オブジェクトを明示的に作成できます。これによって、パラメータをカスタマイズできます。たとえば、明示的なパラメータ オブジェクトを使用すると、パラメータの種類または方向を指定したり、null 値が渡された場合のパラメータの既定値を定義できます。
ObjectDataSource コントロールでは、パラメータ値は基になるデータ オブジェクトの適切なメソッドを呼び出すときに引数として渡されます。SqlDataSource コントロールまたは AccessDataSource コントロールでは、パラメータは更新に使用する SQL コマンドに渡されます。使用例を含む詳細については、「データ ソース コントロールとパラメータの使用」を参照してください。
イベント
データ ソース コントロールは、データを変更する前と後の両方でイベントを発生します。これらのイベントを使用すると、データ操作が発生する前と後に操作のキャンセルなどのコードを実行できます。たとえば、SqlDataSource コントロールの Deleting イベントを使用すると、削除対象のレコードの情報をログに記録できます。また、SqlDataSource コントロールの Inserted イベントを使用すると、新規に挿入されたレコードに対して自動生成された ID 値を取得することもできます。