Condividi tramite


Aggiornamento delle righe tramite segnalibro con SQLBulkOperations

Quando si aggiorna una riga per segnalibro, SQLBulkOperations aggiorna una o più righe della tabella. Le righe sono identificate dal segnalibro della colonna segnalibro associato. La riga viene aggiornata usando i dati nei buffer dell'applicazione per ogni colonna associata (tranne quando il valore nel buffer di lunghezza/indicatore per una colonna è SQL_COLUMN_IGNORE). Le colonne non associate non verranno aggiornate.

Per aggiornare le righe in base al segnalibro con SQLBulkOperations, l'applicazione:

  1. Recupera e memorizza nella cache i segnalibri di tutte le righe da aggiornare. Se vengono usati più segnalibri e l’associazione a livello di colonna, i segnalibri vengono archiviati in una matrice; se vengono utilizzati più segnalibri e l’associazione a livello di riga, i segnalibri vengono archiviati in una matrice di strutture di righe.

  2. Imposta l'attributo dell'istruzione SQL_ATTR_ROW_ARRAY_SIZE sul numero di segnalibri e associa il buffer contenente il valore del segnalibro, o la matrice di segnalibri, alla colonna 0.

  3. Inserisce i nuovi valori di dati nei buffer del set di righe. Per informazioni su come inviare dati Long con SQLBulkOperations, vedere Dati Long, SQLSetPos e SQLBulkOperations.

  4. Imposta il valore nel buffer di lunghezza/indicatore di ogni colonna in base alle esigenze. Si tratta della lunghezza in byte dei dati o SQL_NTS per le colonne associate a buffer di stringa, della lunghezza dei byte dei dati per le colonne associate a buffer binari e SQL_NULL_DATA per le colonne da impostare su NULL.

  5. Imposta il valore nel buffer di lunghezza/indicatore delle colonne che non devono essere aggiornate per SQL_COLUMN_IGNORE. Anche se l'applicazione può ignorare questo passaggio e inviare di nuovo i dati esistenti, tale procedura è inefficiente e rischia di inviare valori all'origine dati troncati durante la lettura.

  6. Chiama SQLBulkOperations con l'argomento Operation impostato su SQL_UPDATE_BY_BOOKMARK.

Per ogni riga inviata all'origine dati come aggiornamento, i buffer dell'applicazione devono avere dati di riga validi. Se i buffer dell'applicazione sono stati riempiti durante il recupero, se è stata mantenuta una matrice di stato di riga e se il valore di stato per una riga è SQL_ROW_DELETED, SQL_ROW_ERROR o SQL_ROW_NOROW, i dati non validi potrebbero essere inviati inavvertitamente all'origine dati.