Principales respuestas
buscar en tabla de sql conforme a nombre Y año

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)
{
}
}
}
- Editado Eduardo Beltran Fernandez viernes, 27 de julio de 2018 23:24
Respuestas
-
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);
- Marcado como respuesta Eduardo Beltran Fernandez sábado, 28 de julio de 2018 15:40
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 -
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
-
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);
- Marcado como respuesta Eduardo Beltran Fernandez sábado, 28 de julio de 2018 15:40