연습: N 계층 데이터 응용 프로그램에 유효성 검사 추가
데이터 유효성 검사는 DataTables 또는 LINQ to SQL 클래스와 같은 데이터 개체에 입력된 값이 개체의 스키마 제약 조건을 따르는지 확인하는 과정입니다. 또한 유효성 검사는 응용 프로그램에 설정된 규칙을 준수하는지 확인합니다. 업데이트를 내부 데이터베이스에 보내기 전에 데이터의 유효성을 검사하면 오류를 줄일 수 있습니다. 또한 응용 프로그램과 데이터베이스 간에 발생할 수 있는 잠재적 라운드트립 횟수를 줄일 수 있습니다.
이 연습에서는 N 계층 응용 프로그램(연습: N 계층 데이터 응용 프로그램 만들기 항목에서 만든 솔루션)에 유효성 검사를 추가하기 위한 단계별 지침을 제공합니다.
이 연습을 통해 다음 작업을 수행하는 방법을 배웁니다.
형식화된 데이터 집합 만들기 및 편집를 사용하여 자동으로 partial 클래스 생성
개별 열 값을 변경할 때 유효성 검사를 수행하는 코드 추가
사전 요구 사항
이 연습을 완료하려면 다음이 필요합니다.
연습: N 계층 데이터 응용 프로그램 만들기에서 만든 솔루션 및 관련 프로젝트
Northwind 샘플 데이터베이스에 대한 액세스. 자세한 내용은 방법: 샘플 데이터베이스 설치을 참조하십시오.
참고
일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio에서 개발 설정 사용자 지정을 참조하세요.
NtierWalkthrough 솔루션 열기
NtierWalkthrough 솔루션을 열려면
파일 메뉴에서 열기를 가리킨 후 프로젝트/솔루션을 클릭한 다음 NTierWalkthrough.sln 파일이 있는 위치로 이동합니다.
참고
연습: N 계층 데이터 응용 프로그램 만들기 항목에서 만드는 NTierWalkthrough.sln 파일은 이 연습을 완료하는 데 반드시 필요한 파일입니다.연습: N 계층 데이터 응용 프로그램 만들기 항목을 아직 수행하지 않은 경우 해당 항목을 완료합니다. 완료되면 모든 프로젝트를 저장합니다.
개별 열 변경 중에 데이터를 확인하는 유효성 검사 추가
이 절차에서는 새 주문의 OrderDate 열이 현재 날짜 또는 이전 날짜 값으로 설정되어 있는지 확인하는 유효성 검사를 추가합니다. 이 응용 프로그램에서는 OrderDate 열에 오늘 날짜보다 나중 날짜를 사용할 수 없습니다. 나중 날짜의 주문은 사용할 수 없습니다.
OrderDate 열에 입력된 값을 확인하는 유효성 검사를 추가하려면
솔루션 탐색기에서 DataAccessTier 프로젝트의 NorthwindDataSet.xsd 파일을 두 번 클릭하여 형식화된 데이터 집합 만들기 및 편집에서 데이터 집합을 엽니다.
디자이너에서 Orders 테이블의 OrderDate 열을 두 번 클릭합니다. 이렇게 하면 ColumnChanging 이벤트 처리기가 만들어집니다.
참고
데이터 집합 디자이너에서는 C# 이벤트에 대한 이벤트 처리기가 자동으로 만들어지지 않습니다.C#에서 이벤트를 처리하는 데 필요한 코드는 이 프로시저의 뒷부분에 포함되어 있습니다.SampleColumnChangingEvent는 EndInit 메서드에서 만들어진 다음 ColumnChanging 이벤트를 구독합니다.
OrderDate 열의 e.ProposedValue에 현재 날짜 또는 이전 날짜가 들어 있는지 확인하는 코드를 추가합니다. 제안된 값이 유효하지 않으면 오류가 있음을 나타내도록 열을 설정합니다.
다음 코드 예제에서는 OrderDate 열에 현재 날짜 또는 이전 날짜가 들어 있는지 확인합니다. OrderDate 값이 오늘 날짜보다 나중이면 OrderDate 열이 오류가 있는 것으로 설정됩니다. OrderDate가 오늘 날짜이거나 이전 날짜이면 Else 절에서 오류를 지웁니다.
Visual Basic 코드를 ColumnChanging 이벤트 처리기에 붙여넣습니다. C# 코드를 OrdersDataTable partial 클래스 선언에 붙여넣습니다.
If (e.Column.ColumnName = Me.OrderDateColumn.ColumnName) Then If CType(e.ProposedValue, DateTime) > Today Then e.Row.SetColumnError(e.Column, "OrderDate cannot be in the future") Else e.Row.SetColumnError(e.Column, "") End If End If
// Replace the NorthwindDataSet partial class with the following: public partial class NorthwindDataSet { partial class OrdersDataTable { public override void EndInit() { base.EndInit(); // Configure the ColumnChanging event // to call the SampleColumnChangingEvent method. ColumnChanging += SampleColumnChangingEvent; } public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName == OrderDateColumn.ColumnName) { if ((System.DateTime)e.ProposedValue > System.DateTime.Today) { e.Row.SetColumnError("OrderDate", " OrderDate cannot be in the future"); } else { e.Row.SetColumnError("OrderDate", ""); } } } } }
응용 프로그램 테스트
응용 프로그램을 테스트하려면 OrderDate 열 값을 유효하지 않은 일자로 변경합니다.
응용 프로그램을 테스트하려면
F5 키를 누릅니다.
폼에 Customers 및 Orders 테이블의 데이터가 나타납니다.
주문이 들어 있는 DataGridView에서 임의 레코드의 OrderDate 열 값을 내일 날짜로 변경합니다.
행에서 빠져 나와 변경 내용을 적용합니다.
유효성 검사가 실패하고 유효하지 않은 값이 들어 있는 OrderDate 셀에 오류 아이콘이 나타납니다.
오류 아이콘에 마우스 포인터를 놓아 유효성 검사 오류를 확인합니다.
폼을 닫습니다.
다음 단계
응용 프로그램 요구 사항에 따라 N 계층 응용 프로그램에 유효성 검사를 추가한 후 몇 가지 단계를 더 수행해야 할 수 있습니다. 예를 들어 이 응용 프로그램에서 다음과 같은 사항을 보완할 수 있습니다.
- 전체 레코드가 변경될 때 변경 내용을 확인하는 유효성 검사 추가. 자세한 내용은 방법: N 계층 데이터 집합에 유효성 검사 추가를 참조하십시오.