Passage de paramètres à une commande nommée
Tout comme le résultat de la commande est passé en tant que variable out de la commande nommée, les paramètres d’une commande paramétrable peuvent être transmis comme variables in à la commande nommée.
L’exemple de code suivant tente de récupérer toutes les commandes passées par le client dont le CustomerID est « ALKFI » à partir de la base de données Northwind. La valeur de CustomerID est fournie au moment où la commande nommée est appelée.
Const DS = "MySqlServer"
Const DB = "Northwind"
Const DP = "SQLOLEDB"
Dim objConn As New ADODB.Connection
Dim objRs As New ADODB.Recordset
Dim objComm As New ADODB.Command
CommandText = "SELECT OrderID, OrderDate, " & _
"RequiredDate, ShippedDate " & _
"FROM Orders " & _
"WHERE CustomerID = ? " & _
"ORDER BY OrderID"
ConnectionString = "Provider=" & DP & _
";Data Source=" & DS & _
";Initial Catalog=" & DB & _
";Integrated Security=SSPI;"
' Connect to the data source.
objConn.Open ConnectionString
' Set a named command.
objComm.CommandText = CommandText
objComm.CommandType = adCmdText
objComm.Name = "GetOrdersOf"
Set objComm.ActiveConnection = objConn
' Call the named command, passing a CustomerID value
' as the input parameter.
' "ALFKI" is the required input parameter,
' objRs is the resultant output variable.
objConn.GetOrdersOf "ALKFI", objRs
' Display the result.
Debug.Print "All orders by ALFKI:"
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
' Clean up.
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing
Set objComm = Nothing
Notez que tous les paramètres d’entrée doivent précéder toutes les variables de sortie et que les types de données des paramètres doivent correspondre ou pouvoir être convertis en ceux des champs correspondants. L’instruction suivante :
objConn.GetOrdersOf 12345, objRs
entraîne une erreur de types de données incompatibles, car le paramètre d’entrée requis est String, et non Integer.
L’appel suivant :
objConn.GetOrdersOf "12345", objRs
est valide, mais génère un jeu de résultats vide, car aucun enregistrement de ce type n’existe dans la base de données.