Foros del Web » Programación para mayores de 30 ;) » .NET »

Problemas al mandar sql con parametros

Estas en el tema de Problemas al mandar sql con parametros en el foro de .NET en Foros del Web. Buenos días, Miren, me ocurre lo siguiente. Tengo esta funcion: Código: Public Function DameDetallesCliente_Destino(ByVal Nombre As String, ByVal Direccion As String) As DetallesCliente Dim cN ...
  #1 (permalink)  
Antiguo 24/01/2006, 06:19
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Problemas al mandar sql con parametros

Buenos días,

Miren, me ocurre lo siguiente. Tengo esta funcion:

Código:
Public Function DameDetallesCliente_Destino(ByVal Nombre As String, ByVal Direccion As String) As DetallesCliente
    Dim cN As New OleDbConnection(ConnStrDestino)
    Dim cMSelect As New OleDbCommand("SELECT * FROM Clientes WHERE IIF(Len(Apellidos)>0, Apellidos + ' ' + Nombre, Nombre) = @Nombre AND Direccion = @Direccion", cN)
    cMSelect.Parameters.Add("@Direccion", OleDbType.VarChar, 200)
    cMSelect.Parameters.Add("@Nombre", OleDbType.VarChar, 150)
    cMSelect.Parameters("@Direccion").Value = Direccion
    cMSelect.Parameters("@Nombre").Value = Nombre
    Dim dR As OleDbDataReader
    Dim misDetallesCliente As New DetallesCliente
    misDetallesCliente.IdCliente = 0
    Try
      cN.Open()
      dR = cMSelect.ExecuteReader
      If dR.Read Then
        misDetallesCliente.IdCliente = dR("IdCliente")
        misDetallesCliente.Nombre = dR("Nombre")
        misDetallesCliente.Apellidos = dR("Apellidos")
        misDetallesCliente.Direccion = dR("Direccion")
        misDetallesCliente.Poblacion = dR("Poblacion")
        misDetallesCliente.Telf1 = dR("Telf1")
        misDetallesCliente.Telf2 = dR("Telf2")
      End If
    Catch ex As Exception
      MessageBox.Show(ex.Message)
    End Try
    If cN.State = ConnectionState.Open Then cN.Close()
    cN.Dispose()
    Return misDetallesCliente
  End Function
El Tema está en el IIF, supongo, de la consulta. Ocurre que si capto los valores que están tomando los dos parámetros y ejecuto la consulta desde Access directamente, me devuelve el registro que cumple la condición. Dicho de otra manera, el registro existe.
Pero resulta que cuando ejecuto el código, no entra en el IF DR.READ THEN
sino que se va al else.
Yo llevo un buen rato, e imagino que será porqué no estoy utilizando del todo bien los parámetros...

Porqué si elimino todo el tema de los parámetros y lo hago a pelo, si funciona. Me refiero a sustituir la linea donde especifico la SQL por esta:
Código:
Dim cMSelect As New OleDbCommand("SELECT * FROM Clientes WHERE IIF(Len(Apellidos)>0, Apellidos + ' ' + Nombre, Nombre) = '" & Nombre & "' AND Direccion = '" & Direccion & "'", cN)
Y sin utilizar parámetros, entonces si que entra en el IF. Vamos, que seguro que se trata que hago mal algo con los parámetros.

Alguna ayudita plis.
Muchas Gracias!
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 24/01/2006 a las 06:28
  #2 (permalink)  
Antiguo 27/01/2006, 09:18
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Nadie puede ayudarme?
Esto me funciona bien, me devuelve un registro:
Código:
Dim cMSelect As New OleDbCommand("SELECT * FROM Clientes WHERE IIF(Len(Apellidos)>0, Apellidos + ' ' + Nombre, Nombre) = '" & Nombre & "' AND Direccion = '" & Direccion & "'", cN)
Por qué esto no?

Código:
Dim cMSelect As New OleDbCommand("SELECT * FROM Clientes WHERE IIF(Len(Apellidos)>0, Apellidos + ' ' + Nombre, Nombre) = @Nombre AND Direccion = @Direccion", cN)
    cMSelect.Parameters.Add("@Direccion", OleDbType.VarChar, 200)
    cMSelect.Parameters.Add("@Nombre", OleDbType.VarChar, 150)
    cMSelect.Parameters("@Direccion").Value = Direccion
    cMSelect.Parameters("@Nombre").Value = Nombre
Disculpen que reviva el post, pero todavia no he dado con el asunto...
Gracias una vez más.
Saludos.
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 27/01/2006, 10:19
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 20 años
Puntos: 8
La sintaxis está bien, yo lo que haría sería reducir la consulta e ir ampliandola poco a poco para ver si falla en el iif o quizá es en otro sitio.
Ya se que no es una solución, pero es el metodo que utilizo yo para descubrir errores de este tipo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.