Condividi tramite


Esecuzione di istruzioni di eliminazione e aggiornamento posizionato

Importante

Questa funzionalità verrà rimossa nelle versioni future di Windows. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Microsoft consiglia di usare la funzionalità cursore del driver.

Dopo che un'applicazione ha recuperato un blocco di dati con SQLFetchScroll, può aggiornare o eliminare i dati nel blocco. Per eseguire un aggiornamento o un'eliminazione posizionata, l'applicazione:

  1. Chiama SQLSetPos per posizionare il cursore sulla riga da aggiornare o eliminare.

  2. Costruisce un'istruzione di aggiornamento o eliminazione posizionata con la sintassi seguente:

    UPDATE table-name

    SET column-identifier = {expression | NULL}

    [, identificatore = di colonna {expression | NULL}]

    WHERE CURRENT OF cursor-name

    DELETE FROM table-name WHERE CURRENT OF cursor-name

    Il modo più semplice per costruire la clausola SET in un'istruzione update posizionata consiste nell'usare marcatori di parametro per ogni colonna da aggiornare e usare SQLBindParameter per associarli ai buffer del set di righe per aggiornare la riga. In questo caso, il tipo di dati C del parametro sarà uguale al tipo di dati C del buffer del set di righe.

  3. Aggiorna i buffer del set di righe per la riga corrente se eseguirà un'istruzione update posizionata. Dopo aver eseguito correttamente un'istruzione update posizionata, la libreria di cursori copia i valori da ogni colonna della riga corrente nella cache.

    Attenzione

    Se l'applicazione non aggiorna correttamente i buffer del set di righe prima di eseguire un'istruzione di aggiornamento posizionato, i dati nella cache non saranno corretti dopo l'esecuzione dell'istruzione.

  4. Esegue l'istruzione update o delete posizionata utilizzando un'istruzione diversa rispetto all'istruzione associata al cursore.

    Attenzione

    La clausola WHERE costruita dalla libreria di cursori per identificare la riga corrente non può identificare le righe, identificare una riga diversa o identificare più righe. Per altre informazioni, vedere Costruzione di istruzioni di ricerca.

Tutte le istruzioni di aggiornamento ed eliminazione posizionate richiedono un nome di cursore. Per specificare il nome del cursore, un'applicazione chiama SQLSetCursorName prima dell'apertura del cursore. Per usare il nome del cursore generato dal driver, un'applicazione chiama SQLGetCursorName dopo l'apertura del cursore.

Dopo che la libreria di cursori esegue un'istruzione di aggiornamento o eliminazione posizionata, la matrice di stato, i buffer dei set di righe e la cache gestiti dalla libreria di cursori contengono i valori illustrati nella tabella seguente.

Istruzione utilizzata Valore nella matrice di stato della riga Valori in

buffer di set di righe
Valori in

buffer della cache
Aggiornamento posizionato SQL_ROW_UPDATED Nuovi valori[1] Nuovi valori[1]
Eliminazione posizionata SQL_ROW_DELETED Valori precedenti Valori precedenti

[1] L'applicazione deve aggiornare i valori nei buffer del set di righe prima di eseguire l'istruzione update posizionata; dopo l'esecuzione dell'istruzione update posizionata, la libreria di cursori copia i valori nei buffer del set di righe nella cache.