내부 유효성 검사
설치 패키지를 작성할 때 MsiViewModify 함수 또는 View.Modify 메서드를 사용하면 입력한 데이터가 구문적으로 올바른지 확인할 수 있습니다. 자세한 내용은 Modify 메서드를 참조하세요. 가장 낮은 수준에서 데이터베이스 테이블의 열은 정수(short 또는 long), 문자열 또는 이진 데이터를 저장할 수 있습니다. 그러나 설치 패키지에는 특정 테이블의 특정 정수 또는 문자열이 필요합니다. 이러한 사양은 _Validation 테이블에서 관리됩니다. 예를 들어 File 테이블의 FileName 열은 문자열 열이지만 명확하게 파일 이름을 저장합니다. 따라서 항목이 문자열이어야 하며 파일 이름 지정 요구 사항도 따라야 합니다.
MsiViewModify 함수와 함께 사용되는 다양한 유효성 검사 열거형 값을 사용하면 다양한 수준에서 즉시 유효성을 검사할 수 있습니다. MSIMODIFY_VALIDATE_FIELD 열거형을 사용하여 레코드의 개별 필드에 대한 유효성을 검사할 수 있습니다. 외래 키의 유효성은 검사하지 않습니다. MSIMODIFY_VALIDATE 열거형은 전체 행의 유효성을 검사하며 외래 키 유효성 검사를 포함합니다. 테이블에 새 행을 삽입하는 경우 MSIMODIFY_VALIDATE_NEW 열거형을 사용하여 유효한 데이터를 추가하고 고유한 기본 키를 사용하는지 확인합니다. 기본 키가 고유하지 않으면 삽입이 실패합니다. 유효성 검사 열거형 중 하나를 사용한 MsiViewModify 호출에서 오류가 반환되면 문제를 진단하기 위해 MsiViewGetError를 반복적으로 호출할 수 있습니다. MsiViewGetError는 오류가 발생한 열과 문제를 해결하는 데 도움이 되는 열거형 값을 나타냅니다. 자세한 내용은 GetError 메서드를 참조하세요.
내부 유효성 검사를 사용하여 다른 작성자가 사용자 지정 테이블에 데이터를 올바르게 입력하도록 할 수도 있습니다. 사용자 지정 테이블 이름과 열 이름을 기본 키로 사용하여 사용자 지정 테이블의 각 열을 _Validation 테이블에 추가합니다. _Validation 테이블의 Description 열에서 각 열의 설명 또는 용도를 제공합니다. Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Category 및 Set 열을 사용하여 각 열에 적용 가능한 요구 사항을 입력합니다.
- 열에 Null 값이 허용되면 'Y'를 입력합니다. 그렇지 않으면 'N'을 입력합니다.
- 열이 정수 열이고 정수 범위를 포함할 수 있는 경우 MinValue 및 MaxValue 열을 사용하여 해당 범위를 입력합니다.
- 외래 키 열은 KeyTable 및 KeyColumn 열을 사용하여 식별됩니다.
- 문자열 열의 경우 파일 이름, GUID 또는 식별자와 같은 범주를 지정합니다. 자세한 내용은 열 데이터 형식을 참조하세요.
- 데이터가 특정 수의 값(문자열 또는 정수)과만 관련될 수 있는 경우 Set 열을 사용하여 허용되는 값을 나열합니다.
다음은 열이 지정된 형식인 경우 채울 수 있는 _Validation 테이블의 열 목록(테이블, 열 및 설명 외에)입니다. (모든 열을 채울 필요는 없습니다.)
Type | 열 |
---|---|
정수 | Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set |
String | Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue |
이진 | Nullable, Category(Category는 "Binary"여야 함) |
작성 환경에서는 MSIMODIFY_VALIDATE_DELETE를 사용할 수 있습니다. 이 열거형에서는 행을 삭제한다고 가정합니다. 필드 또는 외래 키 유효성 검사가 수행되지 않습니다. 이 열거형은 실제로 역방향 외래 키 유효성 검사를 수행합니다. _Validation 테이블에서 "삭제된" 행이 속한 테이블의 KeyTable 및 KeyColumn 열의 참조를 확인합니다. "삭제된" 행이 포함된 테이블을 잠재적인 외래 키로 나열하는 열이 있는 경우 해당 열을 순환하여 값이 "삭제된" 행의 값을 참조하는지 확인합니다. 오류가 반환되면 행을 삭제함으로써 데이터베이스의 관계형 무결성이 손상되었음을 의미합니다.