DataAdapter 매개 변수
적용 대상: .NET Framework .NET .NET Standard
DbDataAdapter에는 데이터 소스에서 데이터를 검색하고 업데이트하는 데 사용되는 다음과 같은 네 가지 속성이 있습니다. SelectCommand 속성은 데이터 소스에서 데이터를 반환하며 InsertCommand , UpdateCommand 및 DeleteCommand 속성은 데이터 소스에서 변경 내용을 관리하는 데 사용됩니다.
참고 항목
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
참고 항목
매개 변수 자리 표시자의 구문은 데이터 소스에 따라 다릅니다. 이 예제에서는 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;
Add
컬렉션의 Parameters
메서드는 매개 변수 이름, 데이터 형식, 크기(해당 형식에 적용되는 경우) 및 SourceColumn의 DataTable
이름을 사용합니다. SourceVersion 매개 변수의 @CustomerID
은 Original
로 설정됩니다. 그러면 식별하는 열 값이 수정된 DataRow에서 변경된 경우 데이터 소스의 기존 행이 업데이트됩니다. 이 경우 Original
행 값은 데이터 소스의 현재 값과 일치하고 Current
행 값에는 업데이트된 값이 포함됩니다. SourceVersion
매개 변수의 @CompanyName
은 설정되어 있지 않으므로 기본값인 Current
행 값을 사용합니다.
참고 항목
DataAdapter
의 Fill
작업과 DataReader
의 Get
메서드 모두에 대해 .NET 유형은 Microsoft SqlClient 데이터 공급자 의 경우 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 열이 두 매개 변수 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;
}