다음을 통해 공유


DataAdapter 매개 변수

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

DbDataAdapter에는 데이터 소스에서 데이터를 검색하고 업데이트하는 데 사용되는 다음과 같은 네 가지 속성이 있습니다. SelectCommand 속성은 데이터 소스에서 데이터를 반환하며 InsertCommand , UpdateCommandDeleteCommand 속성은 데이터 소스에서 변경 내용을 관리하는 데 사용됩니다.

참고 항목

SelectCommand 속성은 FillDataAdapter 메서드를 호출하기 전에 설정해야 합니다. InsertCommand, UpdateCommand 또는 DeleteCommand 속성은 UpdateDataAdapter 메서드가 호출되기 전에 설정해야 하며, 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 메서드는 매개 변수 이름, 데이터 형식, 크기(해당 형식에 적용되는 경우) 및 SourceColumnDataTable 이름을 사용합니다. SourceVersion 매개 변수의 @CustomerIDOriginal로 설정됩니다. 그러면 식별하는 열 값이 수정된 DataRow에서 변경된 경우 데이터 소스의 기존 행이 업데이트됩니다. 이 경우 Original 행 값은 데이터 소스의 현재 값과 일치하고 Current 행 값에는 업데이트된 값이 포함됩니다. SourceVersion 매개 변수의 @CompanyName은 설정되어 있지 않으므로 기본값인 Current 행 값을 사용합니다.

참고 항목

DataAdapterFill 작업과 DataReaderGet 메서드 모두에 대해 .NET 유형은 Microsoft SqlClient 데이터 공급자 의 경우 SQL Server에서 반환된 유형에서 유추됩니다. Microsoft SQL Server 데이터 형식에 대해 유추된 .NET 형식 및 접근자 메서드는 ADO.NET의 데이터 형식 매핑에 설명되어 있습니다.

Parameter.SourceColumn, Parameter.SourceVersion

SourceColumnSourceVersionParameter 생성자에 인수로 전달되거나 기존 Parameter의 속성으로 설정될 수 있습니다. SourceColumnDataColumn 값이 검색될 DataRowParameter 이름입니다. 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의 현재 값으로 업데이트하는 데 사용됩니다. 결과적으로 SourceVersionCurrentCustomerID SourceColumn이 사용됩니다. @OldCustomerID 매개 변수는 데이터 원본의 현재 행을 식별하는 데 사용됩니다. 행의 Original 버전에 일치하는 열 값이 있으므로 SourceColumnCustomerID인 동일한 SourceVersion(Original)이 사용됩니다.

SqlClient 매개 변수 사용

다음 예제에서는 데이터베이스에서 추가적인 스키마 정보를 검색하기 위해 SqlDataAdapter를 만들고 MissingSchemaActionAddWithKey로 설정하는 방법을 보여 줍니다. SelectCommand, InsertCommand, UpdateCommandDeleteCommand 속성이 설정되고 해당 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;
}

참고 항목