Actualmente estoy usando el proveedor Microsoft ADO.NET para Oracle (System.Data.OracleClient
). Soy consciente de que ciertamente no es el mejor proveedor de Oracle disponible y que will soon be deprecated, debería estar usando Oracle ODP.NET en su lugar. La razón por la que todavía uso el proveedor MS es porque ODP.NET vincula los parámetros por posición, no por su nombre. Esto realmente puede ser un PITA cuando usa muchos parámetros en una consulta, porque debe tener cuidado de agregarlos en el orden correcto, lo que puede conducir fácilmente a errores. También es molesto cuando se utiliza el mismo parámetro varias veces en la misma consulta, por ejemplo:Enlazar parámetros de consulta por nombre con ODP.NET
SELECT A,B,C FROM FOO WHERE X = :PARAM_X OR :PARAM_X = 0
Con ODP.NET, tengo que añadir dos parámetros a la OracleCommand
, que creo que es estúpida ...
OracleCommand
de ODP.NET tiene una propiedad para cambiar ese comportamiento predeterminado: BindByName
. Cuando se establece en verdadero, los parámetros están vinculados por nombre, que es lo que quiero. Por desgracia, esto realmente no me ayuda, porque:
- Se establece en false por defecto
- que casi nunca uso de ADO.NET clases concretas de forma explícita, yo prefiero usar ADO.NET 2.0 capa de abstracción (
DbProviderFactory
,DbConnection
,DbCommand
...) para reducir el acoplamiento a cualquier RDBMS específico. Así que no tengo acceso a la propiedadBindByName
, a menos que la use explícitamente enOracleCommand
, perdiendo todos los beneficios o la abstracción. - Cuando uso un ASP.NET SqlDataSource, no creo el DbCommand yo mismo, así que no tengo la oportunidad de establecer
BindByName
en verdadero (podría hacerlo en el evento de selección, pero realmente me duele hágalo por cada SqlDataSource ...)
¿Cómo se supone que debo manejar este problema? ¿Hay un ajuste BindByNameByDefault
en alguna parte? (No encontré nada de eso, pero es posible que me lo haya perdido ...)
¡Acabo de perder 3 horas debido a esta "función"! – Grzenio