다음을 통해 공유


DataAdapter.Update 메서드

"Table"이라는 DataTable의 지정된 DataSet에서 삽입, 업데이트 또는 삭제된 각 행에 대해 각각 INSERT, UPDATE 또는 DELETE 문을 호출합니다.

네임스페이스: System.Data.Common
어셈블리: System.Data(system.data.dll)

구문

‘선언
Public Overridable Function Update ( _
    dataSet As DataSet _
) As Integer
‘사용 방법
Dim instance As DataAdapter
Dim dataSet As DataSet
Dim returnValue As Integer

returnValue = instance.Update(dataSet)
public virtual int Update (
    DataSet dataSet
)
public:
virtual int Update (
    DataSet^ dataSet
)
public int Update (
    DataSet dataSet
)
public function Update (
    dataSet : DataSet
) : int

매개 변수

  • dataSet
    데이터 소스를 업데이트하는 데 사용된 DataSet입니다.

반환 값

DataSet에서 성공적으로 업데이트된 행의 수를 반환합니다.

예외

예외 형식 조건

InvalidOperationException

소스 테이블이 잘못된 경우

DBConcurrencyException

INSERT, UPDATE 또는 DELETE 문을 실행한 결과 영향을 받은 레코드가 없는 경우

설명

응용 프로그램에서 Update 메서드를 호출하면 DataAdapterRowState 속성을 검사하고 DataSet에 구성된 인덱스 순서에 따라 각 행에 대해 반복적으로 필요한 INSERT, UPDATE 또는 DELETE 문을 실행합니다. 예를 들어, UpdateDataTable에서의 행의 순서 때문에 DELETE 문을 먼저 실행하고 INSERT 문을 실행한 다음 다른 DELETE 문을 실행할 수도 있습니다.

이러한 명령문은 일괄적으로 처리되지 않고 각 행마다 개별적으로 업데이트됩니다. UPDATE 문의 앞에 INSERT 문이 와야 하는 경우처럼 명령문의 시퀀스를 제어해야 할 경우에는 응용 프로그램에서 GetChanges 메서드를 호출할 수 있습니다. 자세한 내용은 DataAdapter를 사용하여 데이터 소스 업데이트를 참조하십시오.

INSERT, UPDATE 또는 DELETE 문이 지정되지 않았으면 Update 메서드에서 예외를 발생시킵니다. 하지만 .NET Framework 데이터 공급자의 SelectCommand 속성을 설정한 경우에는 SqlCommandBuilder 또는 OleDbCommandBuilder 개체를 만들어 단일 테이블 업데이트에 필요한 SQL 문을 자동으로 생성할 수 있습니다. 그러면 설정하지 않은 모든 추가 SQL 문이 CommandBuilder에서 생성됩니다. 이러한 생성 논리를 적용하려면 키 열에 대한 정보가 DataSet에 있어야 합니다. 자세한 내용은 자동으로 생성되는 명령을 참조하십시오.

Update 메서드는 업데이트를 수행하기 전에 첫 번째 매핑에 나열된 테이블에서 행을 검색합니다. 그런 다음 UpdateUpdatedRowSource 속성의 값을 사용하여 행을 새로 고칩니다. 추가로 반환되는 행은 무시됩니다.

데이터가 DataSet으로 다시 로드된 후에는 조정된 DataSet 행과 명령을 통해 반환되는 모든 출력 매개 변수를 검사할 수 있도록 OnRowUpdated 이벤트가 발생합니다. 행 업데이트에 성공한 후에는 해당 행에 대한 변경 내용이 적용됩니다.

Update를 사용할 때의 실행 순서는 다음과 같습니다.

  1. DataRow의 값이 매개 변수 값으로 이동합니다.

  2. OnRowUpdating 이벤트가 발생합니다.

  3. 명령이 실행됩니다.

  4. 명령이 FirstReturnedRecord로 설정되면 첫 번째 반환 결과가 DataRow에 배치됩니다.

  5. 출력 매개 변수가 있을 경우, 이러한 매개 변수는 DataRow에 배치됩니다.

  6. OnRowUpdated 이벤트가 발생합니다.

  7. AcceptChanges가 호출됩니다.

DataAdapter와 연결된 각 명령은 연결된 매개 변수 컬렉션을 포함합니다. 매개 변수는 .NET 데이터 공급자의 Parameter 클래스에 대한 SourceColumnSourceVersion 속성을 통해 현재 행에 매핑됩니다. SourceColumn은 현재 행의 매개 변수 값을 가져오기 위해 DataAdapter가 참조하는 DataTable 열을 참조합니다.

SourceColumn은 테이블 매핑을 적용하기 전에 매핑되지 않은 열의 이름을 참조합니다. SourceColumn이 존재하지 않는 열을 가리키는 경우에 수행되는 작업은 다음 MissingMappingAction 값 중 하나에 따라 결정됩니다.

열거형 값

수행 작업

MissingMappingAction.Passthrough

매핑이 없으면 DataSet에 있는 원본 열 이름과 테이블 이름을 사용합니다.

MissingMappingAction.Ignore

SystemException이 생성됩니다. 매핑을 명시적으로 설정한 경우, 오류로 인해 입력 매개 변수에 대한 매핑이 없을 수 있습니다.

MissingMappingAction.Error

SystemException이 생성됩니다.

또한 SourceColumn 속성은 출력이나 입/출력 매개 변수의 값을 DataSet에 다시 매핑하는 데도 사용됩니다. 이 속성이 존재하지 않는 열을 가리키면 예외가 발생합니다.

.NET 데이터 공급자의 Parameter 클래스에 대한 SourceVersion 속성은 Original, Current 또는 Proposed 버전의 열 값 중에서 어느 값을 사용할지를 결정합니다. 이 기능은 UPDATE 문의 WHERE 절에 원래 값을 포함시켜서 낙관적 동시성 위반이 있는지 검사할 때 자주 사용됩니다.

참고

행을 업데이트하는 동안 오류가 발생하면 예외가 throw되고 업데이트가 중단됩니다. 오류가 발생할 때 예외 발생 없이 업데이트 작업을 계속하려면 Update을 호출하기 전에 ContinueUpdateOnError 속성을 true로 설정하십시오. 또한 DataAdapter의 RowUpdated 이벤트 내에서 행별로 오류에 응답해야 할 수도 있습니다. RowUpdated 이벤트 내에서 예외 발생 없이 업데이트 작업을 계속하려면 RowUpdatedEventArgsStatus 속성을 Continue으로 설정하십시오.

예제

다음 예제에서는 파생 클래스인 OleDbDataAdapter를 사용하여 데이터 소스를 Update합니다.

Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As DataSet = New DataSet

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim dataAdapter As New OleDbDataAdapter()

        dataAdapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim commandBuilder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(dataAdapter)

        dataAdapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        dataAdapter.Update(dataSet)
    End Using
    CreateCommandAndUpdate = dataSet
End Function
static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter dataAdapter =
            new OleDbDataAdapter();
        dataAdapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder commandBuilder =
            new OleDbCommandBuilder(dataAdapter);

        dataAdapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        //Without the OleDbCommandBuilder this line would fail.
        dataAdapter.Update(dataSet);
    }
    return dataSet;
}

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

DataAdapter 클래스
DataAdapter 멤버
System.Data.Common 네임스페이스