none
buscar en tabla de sql conforme a nombre Y año RRS feed

  • Pregunta

  • Buenas, tengo un programa que me hace la busqueda de registros conectada a una base de datos conforme al nombre y año, me realiza correctamente la busqueda conforme al nombre, pero no hace la accion de buscar conforme al año,ignora completamente la instruccion, dejo el codigo de referencia, de antemano, gracias.

    -codigo para buscar

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;


    namespace Traspasos
    {
        public class TraspasosDAL
        {
            public static int Agregar(Traspaso pTraspaso)
            {
                int retorno = 0;
                using (SqlConnection Conn = BDcomun.ObtenerConexion())
                {
                    SqlCommand Comando = new SqlCommand(string.Format("Insert Into Traspaso (Acreedor, Año, Ruta, Colonia) values ('{0}','{1}','{2}','{3}')",
                        pTraspaso.ID, pTraspaso.Acreedor, pTraspaso.Año, pTraspaso.Ruta, pTraspaso.Colonia), Conn);

                    retorno = Comando.ExecuteNonQuery();
                    Conn.Close();

                }
                return retorno;
            }

            public static List<Traspaso> BuscarTraspaso(String pAcreedor, String pAño)
            {

                List<Traspaso> Lista = new List<Traspaso>();
                using (SqlConnection conexion = BDcomun.ObtenerConexion())
                {
                    SqlCommand comando = new SqlCommand(string.Format(
                        "Select Id, Acreedor, Año, Ruta, Colonia from Traspaso where Acreedor like '%{0}%' or Año like '%{0}%'", pAcreedor, pAño), conexion);
                    SqlDataReader reader = comando.ExecuteReader();
                     
                    while (reader.Read())
                    {
                        Traspaso pTraspaso = new Traspaso();
                        pTraspaso.ID = reader.GetString(0).ToString();
                        pTraspaso.Acreedor = reader.GetString(1).ToString();
                        pTraspaso.Año = reader.GetString(2).ToString();
                        pTraspaso.Ruta = reader.GetString (3).ToString();
                        pTraspaso.Colonia = reader.GetString(4).ToString();
                        Lista.Add(pTraspaso);

                    }
                    conexion.Close();
                    return Lista;


                }
            }


                }
            }
        

    -   codigo del form

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Traspasos
    {
        public partial class Busqueda : Form
        {
            public Busqueda()
            {
                InitializeComponent();
            }

            private void label1_Click(object sender, EventArgs e)
            {

            }

            public Traspaso TraspasoSeleccionado { get; set; }
            private void button1_Click(object sender, EventArgs e)

            {
                   
                dataGridView1.DataSource = TraspasosDAL.BuscarTraspaso(textnombre.Text, comboaño.Text);

            }

            private void btnaceptar_Click(object sender, EventArgs e)
            {
                
            }

            private void btncancel_Click(object sender, EventArgs e)
            {
                this.Close();
            }

            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                
            }
            

            private void btnreg_Click(object sender, EventArgs e)
            {
                Traspasos pRegistro = new Traspasos();
                pRegistro.ShowDialog();
            }

            private void textaño_TextChanged(object sender, EventArgs e)
            {

            }

            private void comboaño_SelectedIndexChanged(object sender, EventArgs e)
            {

            }
        }
    }

           


    viernes, 27 de julio de 2018 23:23

Respuestas

Todas las respuestas

  • Hola Eduardo Beltran Fernandez,

    El error puede producirse porque en el formato del 'String.Format' le estás asignando el valor que tiene la variable pAcreedor a los 2 campos de tu consulta (0 representa el índice del primer elemento enviado) y en ningún momento estás comparando el valor de pAño.

    ...Acreedor like '%{0}%' or Año like '%{0}%'", pAcreedor, pAño), conexion);

    Tendrías que cambiar a {1} para tomar el valor real de pAño :

    ...Acreedor like '%{0}%' or Año like '%{1}%'", pAcreedor, pAño), conexion);

    Lo recomendable en estos caso es utilizar parametrización utilizando la propiedad Parameters del SqlCommand.

    Por ejemplo :

    new SqlCommand("Select....Acreedor LIKE @ACREEDOR OR AÑO LIKE @ANIO", conexion);

    Y al enviarlo :

    comando.Parameters.AddWithValue("@ACREEDOR", $"%{pAcreedor}%");
    comando.Parameters.AddWithValue("@ANIO", $"%{pAño}%");

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 28 de julio de 2018 2:06
  • Hola, al momento de hacer el cambio de "

    ...Acreedor like '%{0}%' or Año like '%{0}%'", pAcreedor, pAño), conexion);

    a

    ...Acreedor like '%{0}%' or Año like '%{1}%'", pAcreedor, pAño), conexion);

    solo me agrega los registros que tengan ese año aunque no tengan relacion con el nombre escrito, no hace como el siguiente ejemplo:

    Existen 325 registros con el nombre "jose", pero solo 6 son del año 2010, quisiera que al momento de ingresar "jose" + "2010", aparecieran solo esos 6 registros

    sábado, 28 de julio de 2018 15:35
  • Encontre la solucion, en la linea del string es cambiar el "or" por un and

    ...Acreedor like '%{0}%' and Año like '%{1}%'", pAcreedor, pAño), conexion);

    sábado, 28 de julio de 2018 15:39