Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le fournisseur OLE DB SQL Server Native Client prend en charge deux modèles pour le consommateur afin de spécifier des données pour les lignes de paramètres table : un modèle push et un modèle d’extraction. Exemple illustrant le modèle d’extraction disponible ; consultez les exemples de programmation de données SQL Server.
Remarque
Une colonne de paramètre table doit avoir des valeurs non par défaut dans toutes les lignes ou des valeurs par défaut dans toutes les lignes. Il n’est pas possible d’avoir des valeurs par défaut dans certaines lignes, mais pas d’autres. Par conséquent, dans les liaisons de paramètres table, les seules valeurs d’état autorisées pour les données de colonne d’ensembles de lignes de paramètres table sont DBSTATUS_S_ISNULL et DBSTATUS_S_OK. DBSTATUS_S_DEFAULT entraîne un échec et la valeur d’état liée est définie sur DBSTATUS_E_BADSTATUS.
Modèle Push (charge toutes les données de paremeter Table-Valued en mémoire)
Le modèle push est similaire à l’utilisation de jeux de paramètres (autrement dit, le paramètre DBPARAMS dans ICommand ::Execute). Le modèle Push est utilisé uniquement si les objets d’ensemble de lignes de paramètres table sont utilisés sans implémentation personnalisée des interfaces IRowset. Le modèle Push est recommandé lorsque le nombre de lignes de l’ensemble de lignes de paramètre table est petit et n’est pas censé mettre une pression excessive sur la mémoire sur l’application. Cela est plus simple que le modèle d’extraction, car il ne nécessite pas plus de fonctionnalités de l’application consommateur que ce qui est actuellement courant dans les applications OLE DB classiques.
Le consommateur doit fournir toutes les données de paramètre table au fournisseur avant d’exécuter une commande. Pour fournir les données, le consommateur remplit un objet d’ensemble de lignes de paramètres table pour chaque paramètre table. L’objet d’ensemble de lignes de paramètres table expose les opérations Insert, Set et Delete de l’ensemble de lignes, que le consommateur utilisera pour manipuler les données des paramètres table. Le fournisseur récupère les données de cet objet d’ensemble de lignes de paramètres table au moment de l’exécution.
Lorsqu’un objet d’ensemble de lignes de paramètres table est fourni au consommateur, le consommateur peut le traiter en tant qu’objet d’ensemble de lignes. Le consommateur peut obtenir les informations de type de chaque colonne (type, longueur maximale, précision et échelle) à l’aide de la méthode d’interface IColumnsInfo ::GetColumnInfo ou IColumnsRowset ::GetColumnsRowset. Le consommateur crée ensuite un accesseur pour spécifier les liaisons des données. L’étape suivante consiste à insérer des lignes de données dans l’ensemble de lignes de paramètres table. Pour ce faire, utilisez IRowsetChange ::InsertRow. IRowsetChange ::SetData ou IRowsetChange ::D eleteRows peut également être utilisé sur l’objet d’ensemble de lignes de paramètres table si vous devez manipuler les données. Les objets d’ensemble de lignes de paramètres table sont comptabilisés comme des objets de flux.
Si IColumnsRowset ::GetColumnsRowset est utilisé, il y aura des appels ultérieurs à IRowset ::GetNextRows, IRowset ::GetData et les méthodes IRowset ::ReleaseRows sur l’objet d’ensemble de lignes de la colonne résultante.
Une fois que le fournisseur OLE DB SQL Server Native Client commence à exécuter la commande, les valeurs de paramètre table sont extraites de cet objet d’ensemble de lignes de paramètres table et envoyées au serveur.
Le modèle push nécessite un travail minimal par le consommateur, mais utilise plus de mémoire que le modèle d’extraction, car toutes les données de paramètre table doivent être en mémoire au moment de l’exécution.
Modèle d’extraction (obtention de données de paramètre Table-Valued à la demande auprès du consommateur)
Le modèle d’extraction est utile pour deux scénarios :
Pour diffuser en continu des lignes.
Si un ensemble de lignes d’un autre fournisseur est utilisé comme valeur de paramètre table.
Dans le modèle d’extraction, le consommateur fournit des données à la demande au fournisseur. Utilisez cette approche si votre application comporte de nombreuses insertions de données et si les données d’ensemble de lignes de paramètres table en mémoire entraînent un accès excessif à la mémoire. Si plusieurs fournisseurs OLE DB sont utilisés, le modèle d’extraction du consommateur permet au consommateur de fournir un objet d’ensemble de lignes comme valeur de paramètre table.
Pour utiliser le modèle collecteur, les consommateurs doivent fournir leur propre implémentation d’un objet d’ensemble de lignes. Lorsque vous utilisez le modèle collecteur avec des ensembles de lignes de paramètres table (CLSID_ROWSET_TVP), le consommateur est tenu d’agréger l’objet d’ensemble de lignes de paramètres table que le fournisseur expose via la méthode ITableDefinitionWithConstraints ::CreateTableWithConstraints ou la méthode IOpenRowset ::OpenRowset. L’objet consommateur est censé remplacer l’implémentation de l’interface IRowset. Vous devez remplacer les fonctions suivantes :
IRowset ::GetNextRows
IRowset ::AddRefRows
IRowset ::GetData
IRowset ::ReleaseRows
IRowset ::RestartPosition
Le fournisseur OLE DB SQL Server Native Client lit une ou plusieurs lignes à la fois à partir de l’objet d’ensemble de lignes consommateur pour prendre en charge le comportement de diffusion en continu dans les paramètres table. Par exemple, l’utilisateur peut avoir les données de l’ensemble de lignes de paramètres table sur le disque (pas en mémoire) et implémenter la fonctionnalité permettant de lire des données à partir du disque quand cela est requis par le fournisseur OLE DB SQL Server Native Client.
Le consommateur communique son format de données au fournisseur OLE DB SQL Server Native Client à l’aide de IAccessor ::CreateAccessor sur l’objet d’ensemble de lignes de paramètres table. Lors de la lecture des données à partir de la mémoire tampon du consommateur, le fournisseur vérifie que toutes les colonnes accessibles en écriture et non par défaut sont disponibles via au moins un handle d’accesseur et utilise les handles correspondants pour lire les données des colonnes. Pour éviter toute ambiguïté, il doit y avoir une correspondance un-à-un entre une colonne d’ensembles de lignes de paramètres table et une liaison. Les liaisons en double à la même colonne entraînent une erreur. En outre, chaque accesseur est censé avoir le membre iOrdinal de DBBindings dans la séquence. Il y aura autant d’appels à IRowset ::GetData que le nombre d’accesseurs par ligne, et l’ordre des appels sera basé sur l’ordre de la valeur iOrdinal de la valeur inférieure à supérieure.
Le fournisseur est censé implémenter la plupart des interfaces exposées par l’objet d’ensemble de lignes de paramètres table. Le consommateur implémente un objet d’ensemble de lignes avec des interfaces minimales (IRowset). En raison de l’agrégation aveugle, les interfaces d’objet d’ensemble de lignes obligatoires restantes seront implémentées par l’objet d’ensemble de lignes de paramètres table.
Pour tout autre objet d’ensemble de lignes, tel que les objets d’ensemble de lignes obtenus pour n’importe quel fournisseur OLE DB, l’ensemble de lignes fourni par le consommateur doit implémenter toutes les interfaces d’objet d’ensemble de lignes obligatoires, comme spécifié dans la spécification OLE DB.
Au moment de l’exécution, le fournisseur OLE DB SQL Server Native Client rappelle l’objet d’ensemble de lignes pour extraire des lignes et lire les données de colonne.
Voir aussi
paramètresTable-Valued (OLE DB)
Utiliser des paramètres Table-Valued (OLE DB)