31 Mar 2016

Passage de paramètres avec Oracle Managed Driver

Lors du passage à .NET4, Microsoft a déprécié son fournisseur de données Oracle (System.Data.OracleClient). Dans le cadre des montés de version de framework, il est intéressant de supprimer les dépendances à ​System.Data.OracleClient et de mettre en place le provider managé oracle. Sur une de ces opération, j’ai du faire face à un problème difficile à diagnostiquer lié à une différence de passage des paramètres entre le provider Microsoft et Oracle lors de l’appel à une procédure stockée.

En effet, lors de l’ajout d’un paramètre, on spécifie :

  • son nom,
  • son type,
  • sa taille,
  • sa direction,
  • sa valeur

Par défaut, le provider Microsoft réalise une liaison des paramètres à l’aide de son nom (comme réalisé sur les appels de procédures stockées SQL Server). Hors, par défaut, le SGBD Oracle ne prend pas en compte le nom du paramètre mais de l’ordre dans lequel les paramètres sont ajoutés.

Petite illustration sur cette procédure stockée :

Le code suivant lèvera l’exception :

Pour résoudre se problème, la classe OracleCommand propose la propriété BindByName qu’il faut valoriser à true.

Comme il n’existe aucune mécanique de paramétrage de cette valeur par fichier de configuration, il faut redéfinir cette valeur sur chaque instance de OracleCommand créée.

Le code suivant produira le résultat attendu, à savoir paramOut sera valorisé à 3 :

Donc lors de vos mise à jour de System.Data.OracleClient, si vous constatez un comportement inexpliqué de vos appels à la base de données, pensez à ce petit paramètre booléen.

Share