none
Busqueda avanzada RRS feed

  • Pregunta

  • Buenas tardes : bueno quiero realizar una busqueda avanzada de articulos por ejemplo y tengo una idea que creo que funcionara, paso a explicar a continuacion:

    *en el sql server este es mi procedimiento almacenado:

       -create proc BusquedaAvanzada

    @nombre varchar(60)

    as

    select * from productos where nombreProducto like'%'+@nombre+'%'

    como resultado me arrojara todo producto que contengan las letras de @nombre , si tengo estos productos

    1.- televisor-lg, 2.- televisor-panasonic 3.- televisor-noc 4.- televisor-sony

    si yo escribo en el textbox=" televisor"  -como resultado me saldra  los 4 productos q tengo

    si yo escribo en el textbox= tv lg - como resultado no me arrojara ningun producto.

    lo que quiero hacer es lo siguiente; que cada ves q escriba en el textbox una letra por programacion le agrege un comodin . ejemplo

    si escribo en el textbox= tv lg  --este enviara a mi procedimiento de la siguiente manera=

    %t%v%l%g%, con esto si me arrojara como resultado de la busqueda lo siguiente:

    1.- televisor-lg

    agradeceria que me ayudaran con esto por favor , estare pendiente de sus respuestas.

     

     

    miércoles, 18 de julio de 2012 23:11

Respuestas

  • pero  en:  cadena = string.Join("%", cadena.ToCharArray());  me indica que tiene algunos argumentos no validos

    seguramente es porque espera una lista de string y no de char

    solo para probar intenta

                        string cadena = "tv lg";
                        List<string> items = new List<string>();
                        foreach (char item in cadena)
    	                {
                    		 items.Add(item.ToString());
    	                }
        
                        cadena = string.Join("%", items.ToArray()); 

    o sea cada char habria que ponerlo como string para poder usar el join

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Robin Ramirez jueves, 19 de julio de 2012 15:49
    jueves, 19 de julio de 2012 14:51

Todas las respuestas

  • la verdad no el veo mucho el sentido a lo que planteas, pero bueno podrias usar

    string cadena  = "tv lg";

    string cadena = string.Join("%", cadena.ToCharArray())


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    miércoles, 18 de julio de 2012 23:17
  • hola leandro: gracias por la respuesta , inicialmente esto es mi codigo de busqueda en c#

            public void BuscarProductos() {
                objBusnomprod_BE.PNom_prod = textBox1.Text;  // tv lg
                DataSet ds = new DataSet();
                ds = objBusProducto_BL.consultarproducto(objBusnomprod_BE);
                dataGridView1.DataSource = ds.Tables[0];
                                  
            }

    de acuerdo a tu respuesta me indicas que lo trabaje de esta manera:

     public void BuscarProductos() {
           string cadena=textBox1.Text;
           cadena = string.Join("%", cadena.ToCharArray());  // asumo q me aparece : "%t%v%l%g"
                objBusnomprod_BE.PNom_prod = cadena;
                DataSet ds = new DataSet();
                ds = objBusProducto_BL.consultarproducto(objBusnomprod_BE);
                dataGridView1.DataSource = ds.Tables[0];


            }

    pero  en:  cadena = string.Join("%", cadena.ToCharArray());  me indica que tiene algunos argumentos no validos

     

                                   
    jueves, 19 de julio de 2012 14:36
  • Hola Lenin,

    Te recomendaría que si estás utilizando SQL Server, le des un vistazo a FullTextSearch. Creo que te podría servir de ayuda.

    Saludos


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras

    jueves, 19 de julio de 2012 14:39
    Moderador
  • la verdad no el veo mucho el sentido a lo que planteas, pero bueno podrias usar

    string cadena  = "tv lg";

    string cadena = string.Join("%", cadena.ToCharArray())

    ----------------------------------------------------------------------

    Lo que pasa leandro es lo siguiente tengo productos con nombre muy largos ejm:

    1.- PISO-FSB-SOLUBLE SALT-W6S122-HUESO-60X60 1ERA

    y lo que propongo es que el vendedor  como no sabe todo el nombre completo con solo escribir parte de ello  como "122 hue 60x60" le arroge como resultado el producto ya entes mencionado, por ahora creo que lo que propuse es lo mas adecuado para eso ya que el el sql server si corre, y creo q yo debo enviar cada letra acompañado de un comodin para q realice la busqueda.  tal ves halla otra opcion.pero en mente solo veo eso por ahora. espero me entiendas lo  que trato decir ...


    jueves, 19 de julio de 2012 14:45
  • pero  en:  cadena = string.Join("%", cadena.ToCharArray());  me indica que tiene algunos argumentos no validos

    seguramente es porque espera una lista de string y no de char

    solo para probar intenta

                        string cadena = "tv lg";
                        List<string> items = new List<string>();
                        foreach (char item in cadena)
    	                {
                    		 items.Add(item.ToString());
    	                }
        
                        cadena = string.Join("%", items.ToArray()); 

    o sea cada char habria que ponerlo como string para poder usar el join

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Robin Ramirez jueves, 19 de julio de 2012 15:49
    jueves, 19 de julio de 2012 14:51
  • Como han mencionado anteriormente me parece que es una sobre carga estar lanzando este tipo de querys al servidor, pero si igual quieres hacerlo debes implementar algo como lo siguiente:

    StringBuilder sb = new StringBuilder();
    sb.Append("%");
    for (int i = 0; i < cadena.Length; i++)
    {
        if (cadena[i] != ' ')
            sb.Append(cadena[i]);
        sb.Append("%");
    }

    Nuevamente, no es la mejor práctica, pero creo que es lo que estás pidiendo.

    EDICIÓN: finalmente utilizas sb.ToString() como la cadena de búsqueda.

    Saludos


    Eliel Aguilera Microsoft Student Partner - Venezuela

    • Editado Eliel Aguilera jueves, 19 de julio de 2012 15:14 Olvidé colocar la última línea del código
    jueves, 19 de julio de 2012 14:52
  • Un pequeño inciso, yo he estado añadiendo mejoras en la web de administracion de mi empresa. Tambien necesitaba un buscador para buscar parciales de nombres (apellidos incluido) de personas.. no es lo mismo Jose Maria, que Jose M. etc... Implemente algo parecido a lo que propone Lenin, pero la unica diferencia es que yo no lanzaba la query hasta que el usuario pulsaba buscar.

    Puede ser bastante desesperante para un usuario que cada tecla que pulse en un Textbox tenga que esperar 1-2 segundos... (esperemos que haya algo de ajax o jquery.. sino la cosa es mortal..)

    saludos

    jueves, 19 de julio de 2012 15:09
  • amigo es en windows form , si fuera en web claro que no lo haria de esta manera pero gracias por el comentario.
    jueves, 19 de julio de 2012 15:17
  • Lenin que tipo de Base de Datos estás utilizando?

    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras

    jueves, 19 de julio de 2012 15:18
    Moderador
  • Lenin que tipo de Base de Datos estás utilizando?

    Javier Torrecilla 

    utilizo sql server 2008  amigo javier

    jueves, 19 de julio de 2012 19:59