Header Ads Widget

Utilizando Parámetros por nombre en Oracle

 Había desarrollado un módulo en un sistema que se conecta a una base de datos de Oracle, y este módulo ejecutaba un procedimiento de un package. En desarrollo funcionaba todo bien, pero cuando se publicó en otro ambiente, falló por completo.

Revisé el código y el package y aparentemente todo estaba igual, excepto el package que tenía un parámetro en un orden diferente al que tenía originalmente. Alguien había hecho una modificación (son los riesgos a mitigar por trabajar en un equipo numeroso) y el orden se había alterado.

Al alterarse el orden el programa ya no funcionaba correctamente, ya que el Oracle Data Provider siempre enlaza los parámetros por orden sin importar el nombre que pongas en el código. A menos que le digas otra cosa.

Lo que entre otras cosas, significa también que puedes poner cualquier texto en el nombre de tus parámetros en C# o Vb.NET y si están en el orden correcto, tu procedimiento funcionará.

Una solución, la más práctica, era poner en orden los parámetros de nuevo. Otra, y que en caso alguien mueva nuevamente los parámetros y los deje en otro orden, era enlazar los parámetros por nombre, utilizando la propiedad BindByName.


OracleCommand command = new OracleCommand(query, connection) 
	{ CommandType = CommandType.Text, BindByName = true };

De esa forma no importa el orden en que se envíen los parámetros o en que orden estén en el package, el provider los enlazará por nombre.

Espero les sirva y les ahorre tiempo, me tomó un poco de tiempo descubrir el orden alterado, ya que eran varios parámetros de mi procedimiento.

Publicar un comentario

0 Comentarios