ADO.NET 행 상태 및 버전을 사용하여 테이블의 행을 관리합니다. 행 상태는 행의 상태를 나타냅니다. 행 버전은 현재, 원본 및 기본값을 포함하여 수정될 때 행에 저장된 값을 유지 관리합니다. 행의 열을 수정한 후에는 그 행의 상태가 Modified
로 설정됩니다. 또한 행에는 두 개의 행 버전이 있게 되며, 하나는 Current
로 현재 행의 값을 포함하고, 다른 하나는 Original
로 열이 수정되기 전의 행의 값을 포함합니다.
각 DataRow 개체에는 RowState 행의 현재 상태를 확인하기 위해 검사할 수 있는 속성이 있습니다. 다음 표에서는 각 RowState
열거형 값에 대한 간략한 설명을 제공합니다.
RowState 값 | 설명 |
---|---|
Unchanged | 행에 대한 마지막 호출 AcceptChanges 이후 또는 행을 만든 DataAdapter.Fill 이후 변경 내용이 없습니다. |
Added | 행이 테이블에 추가되었지만 AcceptChanges 호출되지 않았습니다. |
Modified | 행의 일부 요소가 변경되었습니다. |
Deleted | 행이 테이블에서 AcceptChanges 삭제되었으며 호출되지 않았습니다. |
Detached | 행은 어떤 DataRowCollection 에도 속하지 않습니다.
RowState 새로 생성된 행의 값이 Detached 으로 설정됩니다. 새로운 DataRow 가 DataRowCollection 에 추가된 후 Add 메서드를 호출하면, RowState 속성 값이 Added 로 설정됩니다.Detached 은 메서드 DataRowCollection 를 사용하여 Remove 에서 제거된 행, 또는 메서드 Delete 에 이어서 메서드 AcceptChanges 를 통해 제거된 행에 대해서도 설정됩니다. |
AcceptChanges
, DataSet, 또는 DataTable에서 DataRow가 호출될 때, 행 상태가 Deleted
인 모든 행이 제거됩니다. 나머지 행은 Unchanged
행 상태가 지정되며, Original
행 버전의 값은 Current
행 버전 값으로 덮어쓰여집니다.
RejectChanges
호출되면 행 상태가 Added
있는 모든 행이 제거됩니다. 나머지 행은 Unchanged
행 상태가 지정되며, Current
행 버전의 값은 Original
행 버전 값으로 덮어쓰여집니다.
다음 예제와 같이 열 참조와 함께 매개 변수를 DataRowVersion 전달하여 행의 다른 행 버전을 볼 수 있습니다.
Dim custRow As DataRow = custTable.Rows(0)
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()
DataRow custRow = custTable.Rows[0];
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();
다음 표에서는 각 DataRowVersion
열거형 값에 대한 간략한 설명을 제공합니다.
DataRowVersion 값 | 설명 |
---|---|
Current | 행의 현재 값입니다.
RowState 의 Deleted 이(가) 있는 행에 대한 행 버전이 존재하지 않습니다. |
Default | 특정 행의 기본 행 버전입니다.
Added , Modified , 또는 Deleted 행의 기본 행 버전은 Current 입니다. 행의 기본 행 버전은 Detached .입니다 Proposed . |
Original | 행의 원래 값입니다.
RowState 의 Added 이(가) 있는 행에 대한 행 버전이 존재하지 않습니다. |
Proposed | 행에 대해 제안된 값입니다. 이 행 버전은 행에서 편집 작업을 수행하는 동안 또는 행에 속하지 않는 행에 대해 존재합니다 DataRowCollection . |
DataRow
에 특정 행 버전이 있는지 테스트하려면 HasVersion 메서드를 호출하고 인수로 DataRowVersion
을 전달하십시오. 예를 들어, DataRow.HasVersion(DataRowVersion.Original)
은 false
가 호출되기 전에 새로 추가된 행에 대해 AcceptChanges
을 반환합니다.
다음 코드 예제에서는 테이블의 삭제된 모든 행에 값을 표시합니다.
Deleted
행에는 행 버전이 Current
없으므로 열 값에 액세스할 때 전달 DataRowVersion.Original
해야 합니다.
Dim catTable As DataTable = catDS.Tables("Categories")
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
Console.WriteLine("Deleted rows:" & vbCrLf)
Dim catCol As DataColumn
Dim delRow As DataRow
For Each catCol In catTable.Columns
Console.Write(catCol.ColumnName & vbTab)
Next
Console.WriteLine()
For Each delRow In delRows
For Each catCol In catTable.Columns
Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)
Next
Console.WriteLine()
Next
DataTable catTable = catDS.Tables["Categories"];
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);
Console.WriteLine("Deleted rows:\n");
foreach (DataColumn catCol in catTable.Columns)
Console.Write(catCol.ColumnName + "\t");
Console.WriteLine();
foreach (DataRow delRow in delRows)
{
foreach (DataColumn catCol in catTable.Columns)
Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");
Console.WriteLine();
}