일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 리버스 프록시 예제
- Visual Studio 재설치
- SQLP
- Visual Studio 2015 강제 삭제
- vue
- vue3
- Visual Studio 2015 삭제
- Visual Studio 2015 설치
- 웹 자동화
- tomcat
- MSSQL 동적 쿼리
- 업무 자동화
- Selenium 설치
- 웹 크롤링
- .NET Core
- Visual Studio 강제 삭제
- .NET Core Proxy
- javascript
- Nginx Reverse Proxy
- MSSQL 문자열
- Vue3 configureWebpack
- Selenium 환경
- vue.js
- Vue configureWebpack
- Vue.config
- Visual Studio 패키지에 실패했습니다.
- 프록시 예제
- Tomcat Error
- 디자인 패턴 사례
- spring
- Today
- Total
금백조의 개발 블로그
[C#]DataTable 변경 적용, 변경 이전 롤백 방법(AcceptChanges, RejectChanges) 본문
[C#]DataTable 변경 적용, 변경 이전 롤백 방법(AcceptChanges, RejectChanges)
금백조 2021. 6. 22. 22:49서론
애플리케이션 개발 중 특정 상황에서 DataTable 변경 체크 로직으로 인해 문제가 발생하여 Datatable의 변경된 정보를 다시 롤백해야 할 필요가 있었습니다. 해결책을 찾는 중 DataTable의 내장 함수인 RejectChanges를 알게 되어 문제를 해결했습니다. 오늘은 이 과정 속에서 알게 된 AcceptChanges, RejectChanges 사용법에 대해 정리하고자 글을 작성했습니다.
본론
[정의]
AcceptChanges : DataTable의 변경 내용을 커밋합니다.
RejectChanges : AcceptChanges() 호출한 이후에 수행된 모든 변경 내용을 롤백합니다.
[특징]
AcceptChanges()를 호출한 적이 없으면 RejectChanges() 호출 시 DataTable에서 수행되었던 모든 변경 내용이 롤백됩니다.
[예제]
DataRow 단위 + DataTable 단위 롤백
using System;
using System.Data;
namespace DataTableChangeRollbackExample
{
class Program
{
static void Main(string[] args)
{
//사용자 데이터 테이블 usertable 생성 및 데이터 생성
DataTable dt = new DataTable("usertable");
DataColumn col1 = new DataColumn("id", Type.GetType("System.Int32"));
col1.AutoIncrement = true;
DataColumn col2 = new DataColumn("name", Type.GetType("System.String"));
dt.Columns.Add(col1);
dt.Columns.Add(col2);
DataRow newRow;
for (int i = 0; i < 10; i++)
{
newRow = dt.NewRow();
newRow["name"] = "insert name " + i;
dt.Rows.Add(newRow);
}
dt.AcceptChanges();//변경사항 적용
//변경 이전 DataTable 출력
Console.WriteLine("Change Before");
printDatatable(dt);
DataRowCollection itemColumns = dt.Rows;
//7 인덱스 데이터 삭제, 8,9 인덱스 데이터 수정
itemColumns[7].Delete();
itemColumns[8]["name"] = "update name " + 8;
itemColumns[9]["name"] = "update name " + 9;
dt.AcceptChanges();//변경사항 적용
//변경 이후 DataTable 출력
Console.WriteLine("Change After");
printDatatable(dt);
///0 인덱스 데이터 삭제, 1,2 인덱스 데이터 수정
itemColumns[0].Delete();
itemColumns[1]["name"] = "update name " + 1;
itemColumns[2]["name"] = "update name " + 2;
//DataRow 단위 Rollback
//AcceptChanges()이전까지 작업 중 0 인덱스 데이터 삭제, 1 인덱스 데이터 수정을 rollback
itemColumns[0].RejectChanges();
itemColumns[1].RejectChanges();
//Rollback된 DataTable 출력
Console.WriteLine("DataRow Rollback");
printDatatable(dt);
//4,5,6 인덱스 데이터 update
itemColumns[4]["name"] = "update name " + 5;
itemColumns[5]["name"] = "update name " + 6;
itemColumns[6]["name"] = "update name " + 7;
//DataTable 단위 Rollback
//AcceptChanges() 이전까지 전체 변경사항 Rollback
dt.RejectChanges();
//Rollback된 DataTable 출력
Console.WriteLine("DataTable Rollback");
printDatatable(dt);
}
static void printDatatable(DataTable table)
{
Console.WriteLine();
foreach (DataRow row in table.Rows)
{
Console.WriteLine(row[0] + " " + row[1]);
}
Console.WriteLine();
}
}
}
[실행 결과]
결론
C#의 자료구조인 DataSet, DataTable, DataRow에는 AcceptChanges, RejectChanges 외에도 유용한 내장 함수들이 많이 있다고 생각합니다. 오늘 상황과 같이 기회가 될 때마다 하나씩 정리하여 글 쓰는 의지를 높여야겠습니다! 읽어주셔서 감사합니다!
Reference
[DataRow.RejectChanges 메서드]
https://docs.microsoft.com/ko-kr/dotnet/api/system.data.datarow.rejectchanges?view=net-5.0
DataRow.RejectChanges 메서드 (System.Data)
AcceptChanges()를 마지막으로 호출한 이후에 수행된 행의 모든 변경 내용을 취소합니다.Rejects all changes made to the row since AcceptChanges() was last called.
docs.microsoft.com
[DataTable.RejectChanges 메서드]
https://docs.microsoft.com/ko-kr/dotnet/api/system.data.datatable.rejectchanges?view=net-5.0
DataTable.RejectChanges 메서드 (System.Data)
테이블이 로드된 이후 또는 AcceptChanges()가 마지막으로 호출된 이후에 변경된 내용을 모두 롤백합니다.Rolls back all changes that have been made to the table since it was loaded, or the last time AcceptChanges() was called.
docs.microsoft.com
'Programming Language > C#' 카테고리의 다른 글
[C#]Nuget패키지 복원 오류 해결 방법 "이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오.누락된 파일은...입니다." (0) | 2021.11.15 |
---|---|
[C#]정규표현식 사용하기 (0) | 2021.06.26 |
[C#]TryParse를 사용한 문자열을 숫자로 변환 및 예외 처리 (0) | 2021.03.21 |