Partager via


Mise à jour de lignes par signet avec SQLBulkOperations

Lorsqu’une ligne est mise à jour par signet, SQLBulkOperations effectue la mise à jour d’une ou plusieurs lignes de la table. Les signets dans une colonne de signets associée identifient les lignes. La ligne est mise à jour à l’aide de données dans les mémoires tampons d’application pour chaque colonne liée (sauf lorsque la valeur dans la mémoire tampon de longueur/indicateur d’une colonne est SQL_COLUMN_IGNORE). Les colonnes non liées ne seront pas mises à jour.

Pour mettre à jour les lignes par repère avec SQLBulkOperations, l’application :

  1. Récupère et met en cache les signets de toutes les lignes à mettre à jour. S’il y a plusieurs signets et que des liaisons par colonne sont utilisées, les signets sont stockés dans un tableau ; s’il y a plusieurs signets et que des liaisons par ligne sont utilisées, les signets sont stockés dans un tableau de structures de lignes.

  2. Définit l’attribut d’instruction SQL_ATTR_ROW_ARRAY_SIZE sur le nombre de signets afin de lier la mémoire tampon contenant la valeur de signet, ou le tableau de signets, à la colonne 0.

  3. Place les nouvelles valeurs de données dans les mémoires tampons d’ensemble de lignes. Pour plus d’informations sur l’envoi de données longues avec SQLBulkOperations, consultez Données longues et SQLSetPos et SQLBulkOperations.

  4. Définit la valeur dans la mémoire tampon longueur/indicateur de chaque colonne selon les besoins. Il s’agit de la longueur d’octet des données ou des SQL_NTS pour les colonnes liées aux mémoires tampons de chaîne, de la longueur d’octet des données pour les colonnes liées aux mémoires tampons binaires et SQL_NULL_DATA pour toutes les colonnes à définir sur NULL.

  5. Définit la valeur dans la mémoire tampon longueur/indicateur de ces colonnes qui ne doivent pas être mises à jour sur SQL_COLUMN_IGNORE. Bien que l’application puisse ignorer cette étape et renvoyer des données existantes, cela est inefficace et risque d’envoyer des valeurs à la source de données tronquée lorsqu’elles ont été lues.

  6. Appelle SQLBulkOperations avec l’argument Opération défini sur SQL_UPDATE_BY_BOOKMARK.

Pour chaque ligne envoyée à la source de données en tant que mise à jour, les mémoires tampons d’application doivent avoir des données de ligne valides. Si les mémoires tampons d’application ont été remplies en récupérant, si un tableau d’état de ligne a été conservé et si la valeur d’état d’une ligne est SQL_ROW_DELETED, SQL_ROW_ERROR ou SQL_ROW_NOROW, les données non valides peuvent être envoyées par inadvertance à la source de données.