DataAdapter.Update(DataSet) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer
매개 변수
반환
에서 성공적으로 업데이트된 행 수 DataSet입니다.
구현
- 특성
예외
원본 테이블이 잘못되었습니다.
INSERT, UPDATE 또는 DELETE 문을 실행하려고 하면 0개의 레코드가 영향을 받았습니다.
예제
다음 예제에서는 파생 클래스 OleDbDataAdapter를 데이터 원본에 Update 사용합니다.
static private DataSet CreateCommandAndUpdate(
string connectionString,
string queryString)
{
DataSet dataSet = new DataSet();
using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter adapter =
new OleDbDataAdapter();
adapter.SelectCommand =
new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder =
new OleDbCommandBuilder(adapter);
adapter.Fill(dataSet);
// Code to modify data in the DataSet here.
// Without the OleDbCommandBuilder, this line would fail.
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(dataSet);
}
return dataSet;
}
Public Function CreateCommandAndUpdate( _
ByVal connectionString As String, _
ByVal queryString As String) As DataSet
Dim dataSet As New DataSet()
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim adapter As New OleDbDataAdapter()
adapter.SelectCommand = New OleDbCommand( _
queryString, connection)
Dim builder As OleDbCommandBuilder = _
New OleDbCommandBuilder(adapter)
adapter.Fill(dataSet)
' Code to modify the data in the DataSet here.
' Without the OleDbCommandBuilder this line would fail.
builder.GetUpdateCommand()
adapter.Update(dataSet)
End Using
Return dataSet
End Function
설명
업데이트는 행별로 수행됩니다. 삽입, 수정 및 삭제된 모든 행 Update 에 대해 메서드는 행에 대해 수행된 변경 유형(삽입, 업데이트 또는 삭제)을 결정합니다. 변경 Insert유형에 따라, Update, 또는 Delete 명령 템플릿이 실행하여 수정된 행을 데이터 원본으로 전파합니다. 애플리케이션이 메서드를 Update 호출할 때 속성을 검사 RowState 하고 각 행에 대해 필요한 INSERT, UPDATE 또는 DELETE 문을 반복적으로 실행합니다DataSet.DataAdapter 예를 들어 Update DELETE 문을 실행한 다음 INSERT 문과 다른 DELETE 문을 실행할 수 있습니다 DataTable.
이러한 문은 일괄 처리 프로세스로 수행되지 않습니다. 각 행은 개별적으로 업데이트됩니다. 애플리케이션은 문 형식의 시퀀스를 제어해야 하는 경우(예: UPDATE 전에 INSERT) 메서드를 호출 GetChanges 할 수 있습니다. 자세한 내용은 DataAdapters를 사용하여 데이터 원본 업데이트를 참조하세요.
INSERT, UPDATE 또는 DELETE 문이 지정되지 않은 경우 메서드는 Update 예외를 생성합니다. 그러나 .NET Framework 데이터 공급자의 속성을 설정하는 SelectCommand 경우 단일 테이블 업데이트에 대한 SQL 문을 자동으로 생성하는 개체 또는 OleDbCommandBuilder 개체를 만들 SqlCommandBuilder 수 있습니다. 그런 다음, 설정하지 않은 추가 SQL 문은 CommandBuilder에 의해 생성됩니다. 이 생성 논리에는 키 열 정보가 DataSet있어야 합니다. 자세한 내용은 CommandBuilders를 사용하여 명령 생성을 참조하세요.
이 메서드는 Update 업데이트를 수행하기 전에 첫 번째 매핑에 나열된 테이블에서 행을 검색합니다. 그런 Update 다음 속성 값을 UpdatedRowSource 사용하여 행을 새로 고칩니다. 반환된 모든 추가 행은 무시됩니다.
데이터가 다시 DataSetOnRowUpdated 로드되면 이벤트가 발생하므로 사용자가 조정된 행과 명령에서 반환된 DataSet 출력 매개 변수를 검사할 수 있습니다. 행이 성공적으로 업데이트되면 해당 행의 변경 내용이 수락됩니다.
사용하는 Update경우 실행 순서는 다음과 같습니다.
해당 값은 DataRow 매개 변수 값으로 이동됩니다.
OnRowUpdating 이벤트가 발생합니다.
명령이 실행됩니다.
명령이 설정
FirstReturnedRecord되면 반환된 첫 번째 결과가 .에 DataRow배치됩니다.출력 매개 변수 DataRow가 있는 경우 .
OnRowUpdated 이벤트가 발생합니다.
DataRow.AcceptChanges을 호출합니다. 이렇게 하면 업데이트DataRow된 이벤트에 DataTable.RowChanging 대한 이벤트와 DataTable.RowChanged 이벤트가 모두 발생합니다.
일반적으로 연결된 DataAdapter 각 명령에는 연결된 매개 변수 컬렉션이 있습니다. 매개 변수는 .NET 데이터 공급자 Parameter 클래스의 속성 및 SourceVersion 속성을 통해 SourceColumn 현재 행에 매핑됩니다.
SourceColumn 는 DataTable 현재 행에 DataAdapter 대한 매개 변수 값을 가져오기 위해 참조하는 열을 나타냅니다.
SourceColumn 는 테이블 매핑이 적용되기 전에 매핑되지 않은 열 이름을 나타냅니다. 존재하지 않는 열을 참조하는 경우 SourceColumn 수행되는 작업은 다음 MissingMappingAction 값 중 하나에 따라 달라집니다.
| 열거형 값 | 수행한 작업 |
|---|---|
MissingMappingAction.Passthrough |
매핑이 없는 경우 원본 열 이름과 테이블 이름을 DataSet 사용합니다. |
MissingMappingAction.Ignore |
A SystemException 가 생성됩니다. 매핑이 명시적으로 설정되면 입력 매개 변수에 대한 누락된 매핑은 일반적으로 오류의 결과입니다. |
MissingMappingAction.Error |
A SystemException 가 생성됩니다. |
또한 이 SourceColumn 속성은 출력 또는 입력/출력 매개 변수의 값을 다시 에 매핑하는 DataSet데 사용됩니다. 존재하지 않는 열을 참조하는 경우 예외가 생성됩니다.
.NET 데이터 공급자 클래스의 속성은 SourceVersion 열 값의 Parameter 원본, 현재 버전 또는 제안된 버전을 사용할지 여부를 결정합니다. 이 기능은 낙관적 동시성 위반을 확인하기 위해 UPDATE 문의 WHERE 절에 원래 값을 포함하는 데 자주 사용됩니다.
메서드 또는 메서드를 AcceptChanges 호출하면 또는 DataTable.의 모든 변경 내용이 DataSet 커밋 AcceptChanges 됩니다. 메서드를 호출하기 전에 Update 이러한 메서드 중 하나를 호출하는 경우 이후 또는 AcceptChanges 호출된 이후 추가 변경 내용이 없는 한 메서드가 호출될 AcceptChanges 때 Update 변경 내용이 커밋되지 않습니다.
메모
행을 업데이트하는 동안 오류가 발생하면 예외가 throw되고 업데이트 실행이 중단됩니다. 오류가 발생할 때 예외를 생성하지 않고 업데이트 작업을 계속하려면 호출Update하기 전에 속성을 true 설정합니다ContinueUpdateOnError. DataAdapter 이벤트 내에서 행별로 오류에 RowUpdated 응답할 수도 있습니다. 이벤트 내에서 RowUpdated 예외를 생성하지 않고 업데이트 작업을 계속하려면 to의 StatusRowUpdatedEventArgsContinue속성을 설정합니다.
데이터 원본에 전파하는 모든 열에 대해 SourceColumn 매개 변수의 속성을 열 이름으로 설정해야 합니다. 이 설정은 매개 변수 값이 수동으로 설정되지 않고 현재 처리된 행의 특정 열에서 가져온 것임을 나타냅니다.