Paramètres de commande
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, à moins que ICommandWithParameters::GetParameterInfo ou ICommandPrepare::Prepare ne soit appelé avant d'exécuter une commande. Cela signifie que le fournisseur OLE DB SQL Server Native Client n'effectue pas les opérations suivantes automatiquement :
Vérification de la convenance du type de données spécifiée avec ICommandWithParameters::SetParameterInfo.
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 :
s'assurer que pwszDataSourceType correspond au type de données SQL Server pour le paramètre en cas de codage effectué de manière irréversible 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.
[!REMARQUE]
Le fournisseur ne prend pas en charge l'appel à ICommandWithParameters::GetParameterInfo pour toute instruction SQL Server UPDATE ou DELETE contenant une clause FROM ; pour toute instruction SQL qui dépend 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 l'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 dans le 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 vous assurer que les valeurs renvoyées sont valides, utilisez IMultipleResults pour forcer la consommation d'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 afin d'indiquer que le fournisseur OLE DB SQL Server Native Client doit ignorer le nom de paramètre et utiliser uniquement l'ordinal spécifié dans le membre rgParamOrdinals de 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 afin de 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 des types XML SQL Server et des types définis par l'utilisateur, le fournisseur OLE DB SQL Server Native Client implémente une nouvelle interface ISSCommandWithParameters.