일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSSQL 동적 쿼리
- javascript
- Visual Studio 재설치
- Visual Studio 2015 강제 삭제
- vue.js
- Vue3 configureWebpack
- .NET Core Proxy
- 리버스 프록시 예제
- 웹 자동화
- .NET Core
- vue3
- tomcat
- Vue configureWebpack
- Selenium 설치
- 프록시 예제
- vue
- 웹 크롤링
- 업무 자동화
- Visual Studio 2015 삭제
- Visual Studio 패키지에 실패했습니다.
- spring
- Selenium 환경
- SQLP
- Visual Studio 강제 삭제
- MSSQL 문자열
- 디자인 패턴 사례
- Vue.config
- Tomcat Error
- Visual Studio 2015 설치
- Nginx Reverse Proxy
- 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
[DataTable.RejectChanges 메서드]
https://docs.microsoft.com/ko-kr/dotnet/api/system.data.datatable.rejectchanges?view=net-5.0
'Programming Language > C#' 카테고리의 다른 글
[C#]Nuget패키지 복원 오류 해결 방법 "이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오.누락된 파일은...입니다." (0) | 2021.11.15 |
---|---|
[C#]정규표현식 사용하기 (0) | 2021.06.26 |
[C#]TryParse를 사용한 문자열을 숫자로 변환 및 예외 처리 (0) | 2021.03.21 |