Ordre et priorité des paramètres OleDbCommand : un cas d'attentes mal alignées
Lors de la construction de requêtes à l'aide d'OleDbCommand, il est crucial de garantir l'ordre précis des paramètres suit la séquence dans l'instruction SQL. Une idée fausse courante tourne autour de l’hypothèse selon laquelle les paramètres nommés éliminent cette exigence. Cependant, comme l'a révélé une session de débogage approfondie, OleDbCommand ne prend pas en charge les paramètres nommés lorsque CommandType est défini sur Text.
Dans l'exemple donné :
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
Les paramètres sont ajoutés dans l'ordre suivant :
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
Cependant, aucun résultat n'est renvoyé, indiquant une incohérence. Lors de la réorganisation des paramètres pour qu'ils correspondent à l'instruction SQL, la requête s'exécute avec succès :
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
Cela correspond à la documentation disponible sur http://msdn.microsoft.com/en-us/library/system.data. oledb.oledbcommand.parameters.aspx, qui indique explicitement qu'OleDbCommand ne prend pas en charge les paramètres nommés pour les instructions SQL en mode texte. Au lieu de cela, des espaces réservés de point d'interrogation (?) doivent être utilisés et l'ordre des objets OleDbParameter dans la collection doit correspondre strictement à leur emplacement dans le texte de la commande.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!