Partager via


Paramètres de commande SQL Server Native Client

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Les paramètres sont marqués dans le texte de la commande avec le caractère de point d'interrogation. Par exemple, l'instruction SQL suivante est marquée pour un paramètre d'entrée unique :

{call SalesByCategory('Produce', ?)}  

Pour améliorer les performances en réduisant le trafic réseau, le fournisseur OLE DB SQL Server Native Client ne dérive pas automatiquement les informations de paramètre, sauf si ICommandWithParameters ::GetParameterInfo ou ICommandPrepare ::P repare est appelé avant d’exécuter une commande. Cela signifie que le fournisseur OLE DB SQL Server Native Client n’est pas automatiquement :

  • La vérification de ce que le type de données spécifié avec ICommandWithParameters::SetParameterInfo est correct.

  • Mappage du DBTYPE spécifié dans les informations de liaison d'accesseur au type de données SQL Server correct pour le paramètre.

Les applications recevront des erreurs ou présenteront une perte de précision avec l'une ou l'autre de ces méthodes si elles spécifient des types de données qui ne sont pas compatibles avec le type de données SQL Server du paramètre.

Pour éviter cela, l'application doit :

  • vérifier que pwszDataSourceType correspond au type de données SQL Server pour le paramètre en cas de codage en dur de ICommandWithParameters::SetParameterInfo.

  • s'assurer que la valeur DBTYPE qui est liée au paramètre est du même type que le type de données SQL Server pour le paramètre en cas de codage effectué de manière irréversible d'un accesseur ;

  • coder l’application de façon à appeler ICommandWithParameters::GetParameterInfo afin que le fournisseur puisse obtenir dynamiquement les types de données SQL Server des paramètres. Notez que cela provoque une boucle réseau supplémentaire au serveur.

Notes

Le fournisseur ne prend pas en charge l’appel à ICommandWithParameters::GetParameterInfo pour les instructions UPDATE ou DELETE SQL Server contenant une clause FROM ; pour les instructions SQL qui dépendent d’une sous-requête contenant des paramètres ; pour les instructions SQL contenant des marqueurs de paramètre dans les deux expressions d’un prédicat de comparaison, like ou quantifié ; ou les requêtes dans lesquelles un des paramètres est un paramètre d’une fonction. Lors du traitement d’un lot d’instructions SQL, le fournisseur ne prend pas non plus en charge l’appel à ICommandWithParameters::GetParameterInfo pour les marqueurs de paramètre dans les instructions après la première instruction du lot. Les commentaires (/* */) ne sont pas autorisés dans la commande Transact-SQL.

Le fournisseur OLE DB SQL Server Native Client prend en charge les paramètres d’entrée dans les commandes d’instruction SQL. Sur les commandes d’appel de procédure, le fournisseur OLE DB SQL Server Native Client prend en charge les paramètres d’entrée, de sortie et d’entrée/sortie. Les valeurs de paramètre de sortie sont retournées à l'application lors de l'exécution (uniquement si aucun ensemble de lignes n'est retourné) ou lorsque tous les ensembles de lignes retournés sont épuisés par l'application. Pour garantir que les valeurs retournées sont valides, utilisez IMultipleResults pour forcer la consommation de l’ensemble de lignes.

Les noms des paramètres de procédure stockée n'ont pas besoin d'être spécifiés dans une structure DBPARAMBINDINFO. Utilisez NULL pour la valeur du membre pwszName pour indiquer que le fournisseur OLE DB SQL Server Native Client doit ignorer le nom du paramètre et utiliser uniquement l’ordinal spécifié dans le membre rgParamOrdinals d’ICommandWithParameters ::SetParameterInfo. Si le texte de la commande contient à la fois des paramètres nommés et sans nom, tous les paramètres sans nom doivent être spécifiés avant les paramètres nommés.

Si le nom d’un paramètre de procédure stockée est spécifié, le fournisseur OLE DB SQL Server Native Client vérifie le nom pour s’assurer qu’il est valide. Le fournisseur OLE DB SQL Server Native Client retourne une erreur lorsqu’il reçoit un nom de paramètre erroné du consommateur.

Remarque

Pour exposer la prise en charge de SQL Server XML et de types définis par l’utilisateur (UDT), le fournisseur OLE DB SQL Server Native Client implémente une nouvelle interface ISSCommandWithParameters .

Voir aussi

Commandes