2010년 2월 9일 화요일

[Tips]Performing DDL inside of edit sessions

이 문서는 ArcGIS 9.3. 버전을 기준으로 작성되었으며, .NET C#(3.0) 샘플 코드 실행을 위해서는 다음의 어셈블리를 참조해야 한다.
- ESRI.ArcGIS.ADF
- ESRI.ArcGIS.Geodatabase
- ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)

이 문서는 Geodatabase API를 사용하는 개발자들에게 CheatSheet(커닝페이퍼?)을 제공할 목적으로 작성되었으며 주요 내용은 성능향상, 범하기 쉬운 실수 등을 제공한다.
예제 코드는 특정 상황에 대한 샘플 코드로서 패턴을 제공하고, 상황에 따라 오류를 비교하기 위해 임의의 오류를 포함하고 있으므로 이 코드를 재활용해서는 안된다.

⑤ Performing DDL inside of edit sessions

Data Definition Language(DDL)은 데이터베이스의 스키마를 변경하는 데이터베이스 명령어다.
테이블 생성, 필드의 추가/삭제, 인덱스의 생성/삭제 등이 이에 속한다.


IFeatureWorkspace.CreateTable, IClass.AddField 등과 같이 DDL 명령어를 수행하는 메쏘드들은 편집 세션 내에서 사용되어서는 안된다.

왜냐하면, DDL 명령어는 현재 열려있는 트랜잭션을 커밋하고 롤백이 불가능하게 만들기 때문이다.
이는 변경 전 커밋을 수행하는 Domain 변경, 지오데이터베이스 스키마 변경 기능 등을 포함해야 한다.

이에 대한 실제 예는 사용자 편집에 의한 coded value domain에 새로운 값을 추가하는 편집 프로그램으로, 편집에 대해 커밋을 수행할 경우 예기치 않은 실패를 발생한다.

이럴 경우 권장되는 방식은 사용자가 추가한 값들을 유지하다가 일단 편집 세션을 멈춘 후 추가하는 것이다.


출처 : ArcGIS Resource Center