다음을 통해 공유


행 상태 및 행 버전

ADO.NET 행 상태 및 버전을 사용하여 테이블의 행을 관리합니다. 행 상태는 행의 상태를 나타냅니다. 행 버전은 현재, 원본 및 기본값을 포함하여 수정될 때 행에 저장된 값을 유지 관리합니다. 행의 열을 수정한 후에는 그 행의 상태가 Modified로 설정됩니다. 또한 행에는 두 개의 행 버전이 있게 되며, 하나는 Current로 현재 행의 값을 포함하고, 다른 하나는 Original로 열이 수정되기 전의 행의 값을 포함합니다.

DataRow 개체에는 RowState 행의 현재 상태를 확인하기 위해 검사할 수 있는 속성이 있습니다. 다음 표에서는 각 RowState 열거형 값에 대한 간략한 설명을 제공합니다.

RowState 값 설명
Unchanged 행에 대한 마지막 호출 AcceptChanges 이후 또는 행을 만든 DataAdapter.Fill이후 변경 내용이 없습니다.
Added 행이 테이블에 추가되었지만 AcceptChanges 호출되지 않았습니다.
Modified 행의 일부 요소가 변경되었습니다.
Deleted 행이 테이블에서 AcceptChanges 삭제되었으며 호출되지 않았습니다.
Detached 행은 어떤 DataRowCollection에도 속하지 않습니다. RowState 새로 생성된 행의 값이 Detached으로 설정됩니다. 새로운 DataRowDataRowCollection에 추가된 후 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 행의 현재 값입니다. RowStateDeleted이(가) 있는 행에 대한 행 버전이 존재하지 않습니다.
Default 특정 행의 기본 행 버전입니다. Added, Modified, 또는 Deleted 행의 기본 행 버전은 Current입니다. 행의 기본 행 버전은 Detached .입니다 Proposed.
Original 행의 원래 값입니다. RowStateAdded이(가) 있는 행에 대한 행 버전이 존재하지 않습니다.
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();  
}  

참고하십시오