Pregunta

Me estoy conectando con éxito a un Oracle 10g DB con un controlador ODBC de Microsoft para Oracle.

Las consultas regulares sin parámetros funcionan bien, pero las consultas parametrizadas actúan como si no se pasaran los parámetros.

ej.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

Así es como se ve mi cadena de conexión:

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

Y estoy agregando parámetros a mi comando ODBC como este:

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

Perdona el código parcialmente copiado, algo pseuedo.

¿Fue útil?

Solución

Un poco de nigromancia aquí, pero como acabo de lidiar con un problema similar, aquí es cómo funcionó con el controlador ODBC para Centura SQLBase:

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

Esto busca en la tabla " " para registros con el valor 12345 en " searchInt " y la fecha de hoy en '' serachDat ''.
Cosas a tener en cuenta:

  • Los parámetros están marcados como ? en el Comando SQL
  • Los parámetros no necesitan nombre, Pero la posición (y el tipo correcto) son importante

Otros consejos

Los

parámetros ODBC (marcados por el símbolo ? ) están vinculados por la posición, por lo que debe asegurarse de agregar los OdbcParameter en el orden correcto. Su nombre no es importante, pero sugeriría paramName , sin el @ que es un formato de nombre específico de SQL Server (o, más bien, de Microsoft).

También puede intentar usar el formato de parámetro de Oracle, que debe ser reconocido por el controlador ODBC de Microsoft para Oracle y le permitiría vincularlo por su nombre (aunque no estoy 100% seguro de esto):

  • ¿Reemplazar ? por : paramName en su consulta.
  • Nombre su parámetro paramName .

Prueba a usar ": paramName " en lugar de " paramName " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top