DataAdapter パラメーター
適用対象: .NET Framework .NET .NET Standard
DbDataAdapter には 4 つのプロパティがあり、データ ソースからデータを取得したりデータ ソースのデータを更新したりするために使用されます。SelectCommand プロパティは、データ ソースのデータを返します。InsertCommand、UpdateCommand、および DeleteCommand の各プロパティは、データ ソースの変更を管理するために使用されます。
Note
SelectCommand
プロパティは、Fill
の DataAdapter
メソッドを呼び出す前に設定しておく必要があります。 InsertCommand
、UpdateCommand
、DeleteCommand
の各プロパティは、Update
内のデータに加えられた変更に応じて、DataAdapter
の DataTable メソッドを呼び出す前に設定する必要があります。 たとえば、行が追加された場合には、InsertCommand
を呼び出す前に Update
を設定する必要があります。 Update
によって挿入行、更新行、または削除行が処理されるとき、DataAdapter
でそれぞれの Command
プロパティが使用され、アクションが処理されます。 変更された行に関する現在の情報が Command
コレクションを経由して Parameters
オブジェクトに渡されます。
データ ソースの行を更新するときは、一意識別子を使用してテーブル内の更新する列を識別する UPDATE ステートメントを呼び出します。 一意識別子は、一般には主キー フィールドの値です。 UPDATE ステートメントでは、次の Transact-SQL ステートメントに示すように、一意識別子と更新する列および値の両方を含むパラメーターを使用します。
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Note
パラメーターのプレースホルダーの構文はデータ ソースに依存します。 次に、SQL Server のデータ ソースのプレースホルダーの例を示します。
この例では、CustomerID
が @CustomerID
パラメーターの値と等しい行の @CompanyName
パラメーターの値で CompanyName
フィールドが更新されます。 これらのパラメーターでは、SqlParameter オブジェクトの SourceColumn プロパティを使用して、変更された行から情報が取得されます。 前のサンプル UPDATE ステートメントのパラメーターを次に示します。 このコードは、変数 adapter
が有効な SqlDataAdapter オブジェクトを表すことを前提としています。
// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
Parameters
コレクションの Add
メソッドは、パラメーター名、データ型、サイズ (その型に適用可能な場合)、および SourceColumn の名前を DataTable
から受け取ります。 SourceVersion パラメーターの @CustomerID
が Original
に設定されることに注意してください。 この設定により、変更された DataRow で 1 つまたは複数の識別列の値が変更されている場合に、データ ソース内の既存の行が確実に更新されます。 識別列の値が変更されている場合、Original
行の値がデータ ソースの現在の値と一致し、Current
行の値に更新済みの値が格納されます。 SourceVersion
パラメーターの @CompanyName
は設定されていないため、既定値である Current
の行の値が使用されます。
Note
DataAdapter
の Fill
操作と DataReader
の Get
メソッドのどちらの場合も、.NET 型は Microsoft SqlClient Data Provider for SQL Server から返された型から推論されます。 Microsoft SQL Server データ型の推論された .NET 型およびアクセサー メソッドについては、「ADO.NET のデータ型のマッピング」を参照してください。
Parameter.SourceColumn、Parameter.SourceVersion
SourceColumn
および SourceVersion
が、引数として Parameter
コンストラクターに渡されるか、既存の Parameter
のプロパティとして設定されます。 SourceColumn
は、DataColumn の値の取得先である DataRow の Parameter
の名前です。 SourceVersion
により、DataRow
で値の取得に使用される DataAdapter
のバージョンを指定します。
DataRowVersion で使用できる SourceVersion
列挙型の値を次の表に示します。
DataRowVersion 列挙定数 | 説明 |
---|---|
Current |
このパラメーターは列の現在の値を使用します。 既定値です。 |
Default |
このパラメーターには列の DefaultValue を使用します。 |
Original |
このパラメーターは列の元の値を使用します。 |
Proposed |
このパラメーターは提示された値を使用します。 |
次のセクションの SqlClient
コード サンプルでは、UpdateCommand 列を 2 つのパラメーター CustomerID
(SourceColumn
) および @CustomerID
(SET CustomerID = @CustomerID
) の @OldCustomerID
として使用する WHERE CustomerID = @OldCustomerID
のパラメーターを定義します。 @CustomerID
パラメーターを使用して、CustomerID 列を DataRow
の現在の値に更新します。 そのため、SourceVersion
が Current
である CustomerID
の SourceColumn
が使用されます。 @OldCustomerID
パラメーターは、データ ソースの現在の行を識別するために使用されています。 一致する列の値がその行の Original
バージョンで見つかったため、SourceColumn
が CustomerID
である同じ SourceVersion
(Original
) が使用されます。
SqlClient パラメーターの使用
次のコード サンプルでは、データベースから追加のスキーマ情報を取得するために SqlDataAdapter を作成し、MissingSchemaAction を AddWithKey に設定する方法を示します。 SelectCommand プロパティ、InsertCommand プロパティ、UpdateCommand プロパティ、および DeleteCommand プロパティが設定され、各プロパティに対応する SqlParameter オブジェクトが Parameters コレクションに追加されます。 このメソッドは SqlDataAdapter
オブジェクトを返します。
public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
// Assumes that connection is a valid SqlConnection object
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
// Create the commands.
adapter.SelectCommand = new SqlCommand(
"SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection);
adapter.UpdateCommand = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", connection);
adapter.DeleteCommand = new SqlCommand(
"DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);
// Create the parameters.
adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
adapter.DeleteCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
return adapter;
}