다음을 통해 공유


JetPrepareUpdate 함수

적용 대상: Windows | Windows Server

JetPrepareUpdate 함수

JetPrepareUpdate 함수는 새 레코드를 삽입하거나 기존 레코드를 새 값으로 바꾸기 위해 업데이트를 수행하는 첫 번째 작업입니다. 업데이트 JetPrepareUpdate를 호출한 다음 JetSetColumn 또는 JetSetColumns 0번 이상 호출하고 마지막으로 JetUpdate를 호출하여 작업을 완료합니다. JetPrepareUpdateJetUpdate 는 업데이트 작업의 경계를 설정하며 인덱스에 입력된 레코드의 최종 업데이트 상태만 갖는 데 중요합니다. 이는 둘 다 더 효율적이지만, 데이터가 설정된 열 작업보다 더 많은 것을 통해 유효한 상태와 일치해야 하는 경우에도 필요합니다.

레코드를 삽입하거나 바꾸기 위한 몇 가지 다른 옵션이 있으며 아래에 자세히 설명되어 있습니다.

    JET_ERR JET_API JetPrepareUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          unsigned long prep
    );

매개 변수

sesid

이 호출에 사용할 세션입니다.

tableid

이 호출에 사용할 커서입니다.

준비

다음을 포함하는 업데이트를 준비하는 데 사용할 수 있는 옵션입니다.

의미

JET_prepCancel

이 플래그를 사용하면 JetPrepareUpdate 에서 이 커서에 대한 업데이트를 취소합니다.

JET_prepInsert

이 플래그를 사용하면 커서가 새 레코드 삽입을 준비합니다. 모든 데이터는 레코드의 기본 상태로 초기화됩니다. 테이블에 자동 증가 열이 있는 경우 업데이트가 궁극적으로 성공, 실패 또는 취소되었는지 여부에 관계없이 새 값이 이 레코드에 할당됩니다.

JET_prepInsertCopy

이 플래그를 사용하면 커서가 기존 레코드의 복사본 삽입을 준비합니다. 이 옵션을 사용하는 경우 현재 레코드가 있어야 합니다. 새 레코드의 초기 상태는 현재 레코드에서 복사됩니다. 오프 레코드에 저장된 긴 값은 사실상 복사됩니다.

JET_prepInsertCopyDeleteOriginal

이 플래그를 사용하면 커서가 동일한 레코드와 삭제 또는 원래 레코드의 삽입을 준비합니다. 기본 키가 변경된 경우에 사용됩니다.

JET_prepReplace

이 플래그를 사용하면 커서가 현재 레코드의 바꾸기를 준비합니다. 테이블에 버전 열이 있는 경우 버전 열은 해당 시퀀스의 다음 값으로 설정됩니다. 이 업데이트가 완료되지 않으면 레코드의 버전 값은 영향을 받지 않습니다. 이 세션이 완료되기 전에 다른 세션이 이 레코드를 업데이트하지 못하도록 레코드에 대한 업데이트 잠금이 수행됩니다.

JET_prepReplaceNoLock

이 플래그는 JET_prepReplace 유사하지만 다른 세션이 이 레코드를 업데이트하지 못하도록 잠금을 설정하지 않습니다. 대신 이 세션은 JetUpdate 를 호출하여 업데이트를 완료할 때 JET_errWriteConflict 받을 수 있습니다.

반환 값

이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류오류 처리 매개 변수를 참조하세요.

반환 코드

설명

JET_errSuccess

작업이 성공적으로 완료되었습니다.

JET_errAlreadyPrepared

JetPrepareUpdate 는 준비에 유효한 플래그를 사용하여 호출되었지만 JET_prepCancel 않으며 커서가 이미 준비된 상태였습니다.

JET_errClientRequestToStopJetService

JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다.

JET_errInstanceUnavailable

세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errInvalidParameter

지정된 준비 플래그가 유효한 플래그가 아닙니다.

JET_errNotInitialized

세션과 연결된 instance 아직 초기화되지 않았기 때문에 작업을 완료할 수 없습니다.

JET_errNotInTransaction

JetPrepareUpdate 는 SLV 열이 있는 레코드를 바꾸기 위해 호출되었습니다. SLV 열. SLV 열은 일반적인 용도로 사용되지 않는 기능입니다. 이 기능은 Microsoft Exchange 인프라를 지원하는 데 사용되며 애플리케이션에서 사용할 수 없습니다.

JET_errRestoreInProgress

세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다.

JET_errRollbackError

JetPrepareUpdate 는 JET_prepCancel 함께 호출되었지만 형식 JET_coltypLongText 열 및/또는 형식 JET_coltypLongBinary 열에 대한 모든 변경 내용을 롤백할 수 없습니다.

JET_errSessionSharingViolation

이 플래그는 둘 이상의 스레드에서 동시에 동일한 세션에 사용할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errTermInProgress

세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다.

JET_errUpdateNotPrepared

JetPrepareUpdate 는 JET_prepCancel 호출되었지만 커서가 준비된 상태가 아닙니다.

성공하면 커서가 원하는 업데이트를 위해 준비된 상태로 변경되거나, JET_prepCancel 경우 커서가 준비되지 않은 상태로 되돌아가고 변경 내용이 무시됩니다.

실패 시 커서 상태는 변경되지 않은 상태로 유지됩니다. 오류가 JET_errRollbackError 경우 커서 상태가 준비되지 않은 상태로 변경되지만 모든 변경 내용이 되돌려진 것은 아닙니다.

설명

레코드의 복사본을 삽입하는 것은 레코드가 JET_coltypLongText 및/또는 JET_coltypLongBinary 형식의 데이터를 공유할 때 중요한 최적화입니다. 이 데이터는 클 때 오프 레코드로 저장되며 여러 레코드가 동일한 실제 데이터 표현을 공유할 수 있습니다. 이 경우 두 레코드에서 데이터를 업데이트할 수 있지만 이렇게 하면 각 레코드에 자체 복사본이 있도록 데이터가 버스트됩니다. 다른 레코드에서 수정하여 한 레코드의 데이터를 변경할 수 없습니다. 또한 다른 레코드의 업데이트로 한 레코드의 업데이트를 차단할 수 없습니다. 이는 ESE의 중심 기능이며 레코드 수준 잠금이라고 합니다.

실패하는 JetUpdate 작업은 커서를 업데이트 준비 상태로 둡니다. 이는 업데이트 상태를 다시 만들 필요 없이 잘못된 열 값과 같은 일부 오류를 수정할 수 있도록 하기 위한 것입니다. 즉, 커서가 업데이트를 중단하는 모든 경우 JET_prepCancel JetPrepareUpdate 를 명시적으로 호출해야 합니다.

요구 사항

요구 사항

클라이언트

Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다.

서버

Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다.

머리글

Esent.h에서 선언되었습니다.

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

참고 항목

JET_ERR
JET_SESID
JET_TABLEID
JetRetrieveColumn
JetSetColumn
JetUpdate