Mise à jour de lignes par signet avec SQLBulkOperations

Lors de la mise à jour d’une ligne par signet, SQLBulkOperations met à jour une ou plusieurs lignes de la table. Les lignes sont identifiées par le signet dans une colonne de signet liée. 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 signet avec SQLBulkOperations, l’application :

  1. Récupère et met en cache les signets de toutes les lignes à mettre à jour. S’il existe plusieurs signets et liaisons basées sur des colonnes, les signets sont stockés dans un tableau ; s’il existe plusieurs signets et liaisons en ligne sont utilisés, 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 et lie 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 si nécessaire. 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.