none
Colocar comillas dobles dentro de comillas simples RRS feed

  • Pregunta

  • Hola amigos,

    Tengo el siguiente problema:

    Tengo el siguiente procedimiento almacenado en sql server:

    select * from clientes where contains(*, @CadenaDeBusqueda)

    Si por ejemplo quiero buscar los clientes cuyo nombres comiencen con "torre", esta variable @CadenaDeBusqueda debe contener lo siguiente: '"torre*"', quedando asi cuando se ejecute dicho procedimiento:

    select * from clientes where contains(*, '"torre*"')

    el valor de la cadena de búsqueda la transfiero desde una caja de texto

    como hago para que la propiedad text de esta caja de texto termine rodeado de comillas simples+dobles+el valor guardado en la propiedad text+asterico+comillas dobles+comillas simples.

    Estoy trabajando con VB.NET

    Gracias


    • Editado Tithus miércoles, 8 de marzo de 2017 22:46
    miércoles, 8 de marzo de 2017 22:44

Respuestas

  • Era así:

    cmd.Parameters.AddWithValue("@CadenaDeBusqueda", String.Format("{1}{0}*{1}", TextBox1.Text,chr(34)))

    Gracias

    Claro, es esa la solución, parametrizando la consulta no necesitas delimitar la cadena con caracteres de apóstrofo (') y es lo que inicialmente te propuse, quizá el único inconveniente era conocer la manera de insertar las comillas dobles en una cadena que está delimitada -también- por comillas dobles y la respuesta es insertando una secuencia de escape que para Visual Basic se resuelve insertando dos comillas seguidas (como en el ejemplo que te propuse). Sin embargo, quizá el insertar dos caracteres de comillas dobles ("") termine restando legibilidad al código -incluso escribiendo el código de carácter mediante la función chr()-, en cuyo caso te propongo utilizar la constante Quote que permite representar un carácter de comillas dobles.

    Dim cmd As New SqlCommand("SELECT * FROM CLIENTES 
    				WHERE CONTAINS(*, @CadenaDeBusqueda)", cn)
    
    cmd.Parameters.AddWithValue("@CadenaDeBusqueda",
    				String.Format("{0}{1}*{0}", ControlChars.Quote, TextBox1.Text))


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Tithus sábado, 11 de marzo de 2017 21:24
    jueves, 9 de marzo de 2017 4:24

Todas las respuestas

  • Hola Tithus,

    Si el valor a ingresar ya contiene las comillas :

    Podrías hacer :

    Dim query = String.Format("select * from clientes where contains(*, '{0}')", TextBox1.Text)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 8 de marzo de 2017 23:03
  • Tithus,

    Puedes utilizar el método String.Format() para interpolar valores con caracteres de sufijo y prefijo, por ejemplo:

    Dim cmd As New SqlCommand("SELECT * FROM CLIENTES 
                                     WHERE CONTAINS(*, @CadenaDeBusqueda)", cn)
    
    cmd.Parameters.AddWithValue("@CadenaDeBusqueda", String.Format("""{0}*""", TextBox1.Text))



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.


    miércoles, 8 de marzo de 2017 23:16
  • Gracias por la ayuda.

    Pero cuando yo ingreso el texto en el textbox este contendría lo siguiente:

    textbox.text="torre"

    si lo reemplazo directamente en la sentencia select quedaria asi:

    select * from clientes where contains(*,torre)

    y lo que se quiere es lo siguiente

    select * from clientes where contains(*, '"torre*"')

    torre esta entre comilla simple + comilla doble + torre + asterisco + comilla doble + comilla simple



    miércoles, 8 de marzo de 2017 23:20
  • Tithus,

    Claro, se espera que el usuario sólo escriba el valor sin colocar ningún carácter adicional, sobre eso lo único que debes de preocuparte es en concatenar las comillas dobles y el wilcard de coincidencia (*), al parametrizar se infiere el tipo y al tratarse de una cadena se enmarca entre comillas simples.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 8 de marzo de 2017 23:32
  • Era así:

    cmd.Parameters.AddWithValue("@CadenaDeBusqueda", String.Format("{1}{0}*{1}", TextBox1.Text,chr(34)))

    Gracias

    jueves, 9 de marzo de 2017 0:51
  • Era así:

    cmd.Parameters.AddWithValue("@CadenaDeBusqueda", String.Format("{1}{0}*{1}", TextBox1.Text,chr(34)))

    Gracias

    Claro, es esa la solución, parametrizando la consulta no necesitas delimitar la cadena con caracteres de apóstrofo (') y es lo que inicialmente te propuse, quizá el único inconveniente era conocer la manera de insertar las comillas dobles en una cadena que está delimitada -también- por comillas dobles y la respuesta es insertando una secuencia de escape que para Visual Basic se resuelve insertando dos comillas seguidas (como en el ejemplo que te propuse). Sin embargo, quizá el insertar dos caracteres de comillas dobles ("") termine restando legibilidad al código -incluso escribiendo el código de carácter mediante la función chr()-, en cuyo caso te propongo utilizar la constante Quote que permite representar un carácter de comillas dobles.

    Dim cmd As New SqlCommand("SELECT * FROM CLIENTES 
    				WHERE CONTAINS(*, @CadenaDeBusqueda)", cn)
    
    cmd.Parameters.AddWithValue("@CadenaDeBusqueda",
    				String.Format("{0}{1}*{0}", ControlChars.Quote, TextBox1.Text))


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Tithus sábado, 11 de marzo de 2017 21:24
    jueves, 9 de marzo de 2017 4:24