Condividi tramite


Funzione JetUpdate

Si applica a: Windows | Windows Server

Funzione JetUpdate

La funzione JetUpdate esegue un'operazione di aggiornamento, inclusa l'inserimento di una nuova riga in una tabella o l'aggiornamento di una riga esistente. L'eliminazione di una riga di tabella viene eseguita chiamando JetDelete.

JetUpdate è il passaggio finale per eseguire un inserimento o un aggiornamento. L'aggiornamento viene avviato chiamando JetPrepareUpdate e quindi chiamando JetSetColumn o JetSetColumns una o più volte per impostare lo stato del record. Infine, JetUpdate viene chiamato per completare l'operazione di aggiornamento. Gli indici vengono aggiornati solo da JetUpdate o JetUpdate2 e non durante JetSetColumn o JetSetColumns.

    JET_ERR JET_API JetUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual
    );

Parametri

sesid

Sessione da usare per questa chiamata.

tableid

Cursore da usare per questa chiamata.

pvBookmark

Puntatore a un segnalibro restituito per una riga inserita.

cbBookmark

Dimensioni del buffer a cui fa riferimento pvBookmark.

pcbActual

Dimensione restituita del segnalibro per la riga inserita restituita in pvBookmark.

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errBufferTooSmall

Il buffer specificato per il segnalibro di record non è abbastanza grande per archiviare il segnalibro del record.

JET_errClientRequestToStopJetService

Non è possibile completare l'operazione perché tutte le attività nell'istanza associata alla sessione non sono state interrotte in seguito a una chiamata a JetStopService.

JET_errColumnIllegalNull

Uguale a JET_errNullInvalid.

JET_errDiskFull

L'operazione di aggiornamento richiede la crescita del file di database o l'allocazione del file di log, ma l'unità disco in cui risiede il file di database o la serie di log è completa. In alternativa, il file di database si trova in un volume formattato FAT32 e il file di database è già 4GBytes, il limite per file per FAT32.

JET_errInstanceUnavailable

Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errInvalidParameter

Il parametro di prep specificato nella funzione JetPrepareUpdate non è un flag valido.

JET_errKeyDuplicate

Una chiave di indice per questo record è un duplicato di un'altra chiave di indice per un altro record già nella tabella e l'indice non consente duplicati.

JET_errKeyTruncated

Il record inserito o aggiornato ha uno o più indici per i quali la chiave generata ha superato le dimensioni massime consentite. Di conseguenza, l'operazione non è riuscita a impedire il troncamento della chiave.

JET_errMultiValuedIndexViolation

Il record inserito o aggiornato ha una colonna multivalore indicizzata con due o più valori identici all'interno delle dimensioni massime della chiave di lunghezza impostate per l'indice. Di conseguenza, il record ha due voci identiche nell'indice che non è valido.

JET_errNotInitialized

Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata.

JET_errNullInvalid

Una o più colonne nel record da inserire o nello stato aggiornato di un record sostituito è NULL che viola il vincolo definito per tali colonne.

JET_errNullKeyDisallowed

Uno o più indici non sono definiti per consentire una chiave NULL e lo stato inserito o aggiornato di un record sostituito viola questo vincolo definito.

JET_errRecordPrimaryChanged

Un'operazione di sostituzione dei record ha aggiornato la chiave primaria. Aggiornamenti alle colonne chiave primaria devono essere eseguite tramite l'eliminazione del record esistente e l'inserimento di un nuovo record con i dati desiderati.

JET_errRestoreInProgress

Non è possibile completare l'operazione perché un'operazione di ripristino è in corso nell'istanza associata alla sessione.

JET_errSessionSharingViolation

La stessa sessione non può essere usata contemporaneamente per più thread.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errTermInProgress

Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata.

JET_errTransReadOnly

Non è possibile tentare un aggiornamento quando all'interno dell'ambito di una transazione di sola lettura. Una transazione di sola lettura è una transazione avviata usando una chiamata a JetBeginTransaction2 con JET_bitTransactionReadOnly.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errUpdateNotPrepared

JetPrepareUpdate è stato chiamato con JET_prepCancel, ma il cursore non era nello stato preparato.

JET_errVersionStoreOutOfMemory

L'operazione non è riuscita perché la memoria non è sufficiente per conservare informazioni transazionali sull'aggiornamento.

JET_errWriteConflict

Un'altra sessione ha precedentemente bloccato il record per l'aggiornamento. L'aggiornamento tentato da questa sessione avrà esito negativo.

In caso di esito positivo, l'operazione di aggiornamento aperta sul cursore viene completata. Se per la tabella viene definita una colonna di incremento automatico, questo valore viene impostato per i record inseriti. Se per la tabella viene definita una colonna di versione, il relativo valore viene inizializzato per i record appena inseriti o incrementato ogni volta che viene sostituito un record. Tutti gli indici, inclusi gli indici cluster e non cluster, vengono aggiornati.

In caso di errore, non vengono apportate modifiche di qualsiasi tipo al database. Prima di inserire e prima di sostituire le funzioni di callback potrebbe essere stato chiamato, ma dopo l'inserimento e dopo la sostituzione dei callback non sarà stato chiamato, poiché quest'ultimo non può causare un errore di aggiornamento. Il buffer di copia del cursore viene lasciato nello stato preparato, in modo che l'opportunità esista per correggere in modo incrementale i problemi che hanno causato errori e riprovare l'operazione di aggiornamento.

Commenti

Le funzioni di callback possono essere registrate per essere chiamate prima o dopo l'inserimento e prima o dopo l'aggiornamento.

Le limitazioni delle dimensioni dei record vengono applicate da JetSetColumn e non in generale da JetUpdate.

È importante comprendere l'impatto dell'esecuzione di un numero elevato di operazioni di aggiornamento all'interno di una singola transazione. Ogni aggiornamento al database deve essere monitorato dal motore di database nell'archivio delle versioni. L'archivio delle versioni contiene un record live di tutte le diverse versioni di ogni record o voce di indice nel database che può essere visualizzato da tutte le transazioni attive. Queste versioni vengono usate per supportare il controllo di concorrenza a più versioni in uso dal motore di database per supportare le transazioni usando l'isolamento dello snapshot. Dopo che il motore di database ha esaurito le risorse usate per archiviare queste versioni, non può più accettare ulteriori modifiche fino a quando alcune transazioni non hanno concluso per consentire il recupero di queste risorse. Quando il motore si trova in questo stato, tutti gli aggiornamenti avranno esito negativo con JET_errVersionStoreOutOfMemory. Le risorse disponibili per il motore di database per archiviare queste versioni possono essere controllate usando JetSetSystemParameter con JET_paramMaxVerPages e JET_paramGlobalMinVerPages.

Requisiti

Requisito Valore

Client

Richiede Windows Vista, Windows XP o Windows 2000 Professional.

Server

Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Vedere anche

JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
Parametri di sistema