Partager via


Table-Valued création d’un ensemble de lignes de paramètres

Bien que les consommateurs puissent fournir n’importe quel objet d’ensemble de lignes pour les paramètres table, les objets d’ensemble de lignes classiques sont implémentés sur les magasins de données principaux, et fournissent donc des performances limitées. Pour cette raison, le fournisseur OLE DB SQL Server Native Client permet aux consommateurs de créer un objet d’ensemble de lignes spécialisé sur les données en mémoire. Cet objet d’ensemble de lignes en mémoire spécial est un nouvel objet COM appelé ensemble de lignes de paramètres table. Il fournit des fonctionnalités similaires aux jeux de paramètres.

Les objets d’ensemble de lignes de paramètres table sont créés explicitement par le consommateur pour les paramètres d’entrée via plusieurs interfaces au niveau de la session. Il existe une instance d’un objet d’ensemble de lignes de paramètres table par paramètre table par paramètre table. Le consommateur peut créer les objets d’ensemble de lignes de paramètres table en fournissant des informations de métadonnées déjà connues (scénario statique) ou en la découvrant via des interfaces de fournisseur (scénario dynamique). Les sections suivantes décrivent ces deux scénarios.

Scénario statique

Lorsque les informations de type sont connues, le consommateur utilise ITableDefinitionWithConstraints ::CreateTableWithConstraints pour instancier un objet d’ensemble de lignes de paramètres table qui correspond à un paramètre table.

Le champ guid (paramètre pTableID ) contient le GUID spécial (CLSID_ROWSET_TVP). Le membre pwszName contient le nom du type de paramètre table que le consommateur souhaite instancier. Le champ eKind est défini sur DBKIND_GUID_NAME. Ce nom est requis lorsque l’instruction est ad hoc SQL ; le nom est facultatif s’il s’agit d’un appel de procédure.

Pour l’agrégation, le consommateur transmet le paramètre pUnkOuter avec le contrôle IUnknown.

Les propriétés de l’objet d’ensemble de lignes de paramètres table sont en lecture seule. Le consommateur n’est donc pas censé définir des propriétés dans rgPropertySets.

Pour le membre rgPropertySets de chaque structure DBCOLUMNDESC, le consommateur peut spécifier des propriétés supplémentaires pour chaque colonne. Ces propriétés appartiennent au jeu de propriétés DBPROPSET_SQLSERVERCOLUMN. Ils vous permettent de spécifier les paramètres calculés et par défaut pour chaque colonne. Ils prennent également en charge les propriétés de colonne existantes, telles que la nullabilité et l’identité.

Pour récupérer les informations correspondantes à partir d’un objet d’ensemble de lignes de paramètres table, le consommateur utilise IRowsetInfo ::GetProperties.

Pour récupérer des informations sur l’état null, unique, calculé et de mise à jour de chaque colonne, le consommateur utilise IColumnsRowset ::GetColumnsRowset ou IColumnsInfo ::GetColumnInfo. Ces méthodes fournissent des informations détaillées sur chaque colonne d’ensemble de lignes de paramètres table.

Le consommateur spécifie le type de chaque colonne du paramètre table. Cela est similaire à la façon dont les colonnes sont spécifiées lorsqu’une table est créée dans SQL Server. Le consommateur obtient un objet d’ensemble de lignes de paramètres table à partir du fournisseur OLE DB SQL Server Native Client via le paramètre de sortie ppRowset .

Scénario dynamique

Lorsque le consommateur n’a pas d’informations de type, il doit utiliser IOpenRowset ::OpenRowset pour instancier des objets d’ensemble de lignes de paramètres table. Tout le consommateur doit fournir au fournisseur le nom du type.

Dans ce scénario, le fournisseur obtient des informations de type sur un objet d’ensemble de lignes de paramètres table auprès du serveur pour le compte du consommateur.

Les paramètres pTableID et pUnkOuter doivent être définis comme dans le scénario statique. Le fournisseur OLE DB SQL Server Native Client obtient ensuite les informations de type (informations de colonne et contraintes) du serveur, puis retourne un objet d’ensemble de lignes de paramètres table via le paramètre ppRowset . Cette opération nécessite une communication avec le serveur et ne fonctionne donc pas aussi bien que le scénario statique. Le scénario dynamique fonctionne uniquement avec les appels de procédure paramétrables.

Voir aussi

paramètresTable-Valued (OLE DB)
Utiliser des paramètres Table-Valued (OLE DB)