Ordre et priorité des paramètres OleDbCommand
En tentant de déboguer une requête, il a été découvert que l'ordre des paramètres dans une OleDbCommand peut affecter la résultats. Lorsque les paramètres ont été ajoutés dans le désordre :
cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete;
aucun résultat n'a été renvoyé. Cependant, lorsque les paramètres ont été ajoutés dans le même ordre qu'ils sont apparus dans la requête :
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
la requête a fonctionné correctement.
Cette différence provient du fait qu'OleDbCommand ne prend pas en charge les noms nommés. paramètres pour les commandes de texte. Comme documenté sur MSDN :
Le fournisseur OLE DB .NET ne prend pas en charge les paramètres nommés pour transmettre des paramètres à une instruction SQL ou à une procédure stockée appelée par un OleDbCommand lorsque CommandType est défini sur Text. Dans ce cas, l'espace réservé au point d'interrogation (?) doit être utilisé.
Par conséquent, lors de l'utilisation de commandes de texte avec OleDbCommand, l'ordre dans lequel les paramètres sont ajoutés à la collection est crucial. L'ordre doit correspondre directement à l'ordre des points d'interrogation fictifs 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!