Partager via


Liaison de marqueurs de paramètre

L’application lie des paramètres en appelant SQLBindParameter. SQLBindParameter lie un paramètre à la fois. Avec elle, l’application spécifie les éléments suivants :

  • Numéro de paramètre. Les paramètres sont numérotés dans l’ordre croissant des paramètres dans l’instruction SQL, en commençant par le nombre 1. Bien qu’il soit légal de spécifier un nombre de paramètres supérieur au nombre de paramètres de l’instruction SQL, la valeur du paramètre est ignorée lorsque l’instruction est exécutée.

  • Type de paramètre (entrée, entrée/sortie ou sortie). À l’exception des paramètres dans les appels de procédure, tous les paramètres sont des paramètres d’entrée. Pour plus d’informations, consultez Paramètres de procédure, plus loin dans cette section.

  • Type de données C, adresse et longueur d’octet de la variable liée au paramètre. Le pilote doit pouvoir convertir les données du type de données C vers le type de données SQL ou une erreur est retournée. Pour obtenir la liste des conversions prises en charge, consultez Conversion de données de C en types de données SQL dans l’annexe D : Types de données.

  • Type de données SQL, précision et échelle du paramètre lui-même.

  • Adresse d’une mémoire tampon de longueur/indicateur. Il fournit la longueur d’octet des données binaires ou caractères, spécifie que les données sont NULL, ou spécifie que les données seront envoyées avec SQLPutData. Pour plus d’informations, consultez Utilisation des valeurs de longueur/indicateur.

Par exemple, le code suivant lie SalesPerson et CustID aux paramètres des colonnes SalesPerson et CustID. Étant donné que SalesPerson contient des données de caractères, qui sont de longueur variable, le code spécifie la longueur d’octet de SalesPerson (11) et lie SalesPersonLenOrInd pour contenir la longueur d’octet des données dans SalesPerson. Ces informations ne sont pas nécessaires pour CustID , car elles contiennent des données entières, qui sont de longueur fixe.

SQLCHAR       SalesPerson[11];  
SQLINTEGER    SalesPersonLenOrInd, CustIDInd;  
SQLUINTEGER   CustID;  
  
// Bind SalesPerson to the parameter for the SalesPerson column and  
// CustID to the parameter for the CustID column.  
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0,  
                  SalesPerson, sizeof(SalesPerson), &SalesPersonLenOrInd);  
SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 10, 0,  
                  &CustID, 0, &CustIDInd);  
  
// Set values of salesperson and customer ID and length/indicators.  
strcpy_s((char*)SalesPerson, _countof(SalesPerson), "Garcia");  
SalesPersonLenOrInd = SQL_NTS;  
CustID = 1331;  
CustIDInd = 0;  
  
// Execute a statement to get data for all orders made to the specified  
// customer by the specified salesperson.  
SQLExecDirect(hstmt1,"SELECT * FROM Orders WHERE SalesPerson=? AND CustID=?",SQL_NTS);  

Lorsque SQLBindParameter est appelé, le pilote stocke ces informations dans la structure de l’instruction. Lorsque l’instruction est exécutée, elle utilise les informations pour récupérer les données de paramètre et l’envoyer à la source de données.

Remarque

Dans ODBC 1.0, les paramètres étaient liés à SQLSetParam. Le Gestionnaire de pilotes mappe les appels entre SQLSetParam et SQLBindParameter, en fonction des versions d’ODBC utilisées par l’application et le pilote.