ObjectDataSource コントロールのソース オブジェクト
更新 : 2007 年 11 月
ObjectDataSource コントロールのソース オブジェクトは、ObjectDataSource コントロールの要求に従って、基になるデータ ソースのデータを取得し、更新を実行します。ObjectDataSource コントロールのソース オブジェクトには、ObjectDataSource コントロールがインスタンスを作成できるクラスか、または ObjectDataSource コントロールが呼び出すことができる static パブリック メソッド (Microsoft Visual Basic の場合は Shared メソッド) を公開するクラスを任意に指定できます。
ソース オブジェクトおよび、ソース オブジェクトを利用する ObjectDataSource コントロールを含んでいる ASP.NET ページの例については、「ObjectDataSource ソース オブジェクトの例」および「ObjectDataSource で厳密に型指定されたソース オブジェクトの例」を参照してください。
オブジェクトの作成
ObjectDataSource コントロールは、ソース オブジェクトのインスタンスを作成し、指定したメソッドを呼び出し、オブジェクトが static メソッド (Visual Basic の場合は Shared) ではなくインスタンス メソッドを持っている場合は 1 つの要求のスコープ内でオブジェクト インスタンスを破棄します。したがって、オブジェクトは状態を持たないことが必要です。つまり、オブジェクトは、必要なすべてのリソースを、1 つの要求の範囲内で取得して解放する必要があります。
ObjectDataSource コントロールの ObjectCreating イベントを処理することにより、ソース オブジェクトの作成方法を制御できます。ソース オブジェクトのインスタンスを作成した後、そのインスタンスに ObjectDataSourceEventArgs クラスの ObjectInstance プロパティを設定できます。ObjectDataSource コントロールは、独自のインスタンスを作成するのではなく、ObjectCreating イベントで作成されるインスタンスを使用します。
クラス コンストラクタの指定
ObjectDataSource コントロールのソース オブジェクトが、データを取得および変更するために呼び出すことができる static パブリック メソッド (Visual Basic の場合は Shared メソッド) を公開している場合、ObjectDataSource コントロールはそれらのメソッドを直接呼び出すことができます。ObjectDataSource コントロールがメソッドの呼び出しを行うためにソース オブジェクトのインスタンスを作成する必要がある場合は、パラメータを受け取らないパブリック コンストラクタがオブジェクトに含まれている必要があります。ObjectDataSource コントロールは、ソース オブジェクトの新しいインスタンスを作成するときに、このコンストラクタを呼び出します。
パラメータを持たないパブリック コンストラクタがソース オブジェクトに含まれていない場合は、このトピックの「オブジェクトの作成」で前述したように、ソース オブジェクトのインスタンスを作成して、ObjectCreating イベントで ObjectDataSource コントロールに使用できます。
オブジェクト メソッドの指定
ObjectDataSource コントロールのソース オブジェクトには、データの選択、挿入、更新、または削除に使用する任意の数のメソッドを含めることができます。これらのメソッドは、メソッドの名前 (ObjectDataSource コントロールの SelectMethod、InsertMethod、UpdateMethod、または DeleteMethod の各プロパティおよび、選択されたアクションの関連パラメータ コレクションに含まれるパラメータの名前で指定される) に基づいて、ObjectDataSource コントロールによって呼び出されます。詳細については、「ObjectDataSource コントロールにおけるパラメータの使用」を参照してください。
ソース オブジェクトに、データ ソースのオブジェクトの総数を返す、オプションの SelectCount メソッド (ObjectDataSource コントロールで SelectCountMethod プロパティを使用して指定される) を含めることもできます。ObjectDataSource コントロールは、Select メソッドが呼び出された後に SelectCount メソッドを呼び出して、ページングの際に使用するデータ ソースのレコードの総数を取得します。
メモ : |
---|
オブジェクトがページングをサポートしている場合、SelectCount メソッドを実装することを強くお勧めします。これによって、GridView コントロールなどのデータ バインド コントロールは、データのページを取得するために要求するレコード数を最小限に抑えることができます。合計行数がソース データ オブジェクトから指定される場合、データ バインド コントロールは同時に 1 ページにつき 1 行のみを要求します。合計行数が指定されない場合、データ バインド コントロールは、(要求されたデータのページの最初の行で開始して) データ ソースのすべての行を要求し、現在のページにないすべての行を破棄します。 |
厳密に型指定されたオブジェクトの操作
ソース オブジェクトは、データ ソースからのデータに基づいて厳密に型指定されたオブジェクトを返したり受け取ったりできます。ObjectDataSource コントロールは、DataObjectTypeName プロパティを使用して、これらのオブジェクトの型を識別します。この場合、メソッドに 1 つ以上のパラメータを渡す代わりに、すべてのパラメータ値を集約する 1 つのオブジェクトが渡されます。特定のオブジェクト型をソース オブジェクト メソッドのパラメータとして渡す方法の詳細については、「ObjectDataSource コントロールにおけるパラメータの使用」を参照してください。
ObjectDataSource コントロールの ConflictDetection プロパティが CompareAllValues 値に設定され、OldValuesParameterFormatString プロパティが元の値のパラメータと現在の値のパラメータとを区別する値に設定されている場合、ObjectDataSource は次のことを行います。
現在の値と元の値の両方に対するパラメータを受け取るソース オブジェクトから Update メソッドを呼び出します。
元の値に対するパラメータを受け取るソース オブジェクトから Delete メソッドを呼び出します。
厳密に型指定されたオブジェクトを使用する場合、ObjectDataSource コントロールは、現在の値が設定されている厳密に型指定されたオブジェクトと元の値が設定されている厳密に型指定されたオブジェクトの両方を受け取る Update メソッドをソース オブジェクトから呼び出します。しかし、ObjectDataSource コントロールが Delete メソッドを呼び出して厳密に型指定されたオブジェクトを渡す場合は、ConflictDetection や OldValuesParameterFormatString の設定とは関係なく、1 つの厳密に型指定されたオブジェクトをパラメータとして受け取るメソッドが呼び出されます。ConflictDetection プロパティが OverwriteChanges 値に設定されている場合、Delete メソッドに渡されるオブジェクトは、現時の主キー値だけを設定されます (オブジェクトのその他のプロパティは null となります)。ConflictDetection プロパティが CompareAllValues 値に設定されている場合、Delete メソッドに渡されるオブジェクトは、元の主キー値と、残りのオブジェクト プロパティに対しては元の値を設定されます。
デザイナの操作
Microsoft Visual Web Developer Web 開発ツールなどのデザイナに対してソース オブジェクトをデータ オブジェクトとして記述する属性を、ソース オブジェクトに適用することもできます。これによって、選択、挿入、更新、削除の各操作に対して使用されるオブジェクトのメソッドを明確に識別でき、デザイナを使用する開発者の操作性を向上させることができます。
オブジェクトを ObjectDataSource コントロールのソース オブジェクトとして識別するには、次の例に示すように、DataObjectAttribute 属性を使用します。
<DataObject(True)> _
Public Class NorthwindEmployee
[DataObject(true)]
public class NorthwindEmployee
メソッドをデータ オブジェクト メソッドとして識別するには、DataObjectMethodAttribute 属性を使用します。DataObjectMethodAttribute 属性を適用するときは、DataObjectMethodType 列挙値の 1 つを使用して、メソッドの種類 (選択、挿入、更新、または削除) を識別します。次のコード例では、DataObjectMethodAttribute 属性を使用してメソッドを Delete メソッドとして識別しています。
<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Shared Function DeleteEmployee(EmployeeID As Integer) As Boolean
If Not _initialized Then Initialize()
Dim conn As SqlConnection = New SqlConnection(_connectionString)
Dim cmd As SqlCommand = New SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn)
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID
Try
conn.Open()
If cmd.ExecuteNonQuery() <> 0 Then _
Return False
Catch e As SqlException
' Handle exception.
Finally
conn.Close()
End Try
Return True
End Function
[DataObjectMethod(DataObjectMethodType.Delete)]
public static bool DeleteEmployee(int EmployeeID)
{
if (!_initialized) { Initialize(); }
SqlConnection conn = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn);
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID;
try
{
conn.Open();
if (cmd.ExecuteNonQuery() == 0)
return false;
}
catch (SqlException e)
{
// Handle exception.
}
finally
{
conn.Close();
}
return true;
}
参照
概念
ObjectDataSource コントロールにおけるパラメータの使用