Query block Try Catch DO NOT execute the catch block

0

Good I have the following code to consult and fill a DataGridView with the query but what I try is that if the data that user indicates as a filter does not match any BD record, I execute the Catch block but it does not

try
        {
            cn.Open();
            string sql = "SELECT DISTINCT cabeza.Identificacion, cabeza.Id_solicitud as #Solicitud, cabeza.Fecha,cabeza.Estatus,detalle.Id_producto,detalle.Cantidad FROM Tab_solicitud_mercancia_cabeza AS cabeza INNER JOIN Tab_solicitud_mercancia_detalle AS detalle ON cabeza.Id_solicitud = detalle.Id_producto WHERE cabeza.Id_solicitud = '" + txtidsolicitud.Text + "'";
            SqlCommand cmd = new SqlCommand(sql, cn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dtgv.DataSource = dt;

        }
        catch (Exception ex)
        {
            DialogResult respuesta;
            respuesta = MessageBox.Show("El dato ingresado no coincide con ningun registro. ¿Desea consultar el listado completo de solicitudes?", "Error En Consulta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (respuesta == DialogResult.Yes)
            {
                Consultasolicitudmercancia frm = new Consultasolicitudmercancia();
                frm.enviado += new Consultasolicitudmercancia.enviar(ejecutar);
                frm.Show();

            }
            else
            {
                if (respuesta == DialogResult.No)
                {
                    txtidsolicitud.Clear();
                    txtidsolicitud.Select();
                }
            }
        }
        finally
        {
            cn.Close();
        }
    
asked by Samuel Ignacio Susana Confesor 14.12.2018 в 20:37
source

1 answer

2

It is not programmed when there is an error when you can validate whether the datatable has records or not

Analyze this code to see how to achieve it

cn.Open();
string sql = @"SELECT DISTINCT cabeza.Identificacion, cabeza.Id_solicitud as #Solicitud, 
                cabeza.Fecha,cabeza.Estatus,detalle.Id_producto,detalle.Cantidad 
                FROM Tab_solicitud_mercancia_cabeza AS cabeza 
                INNER JOIN Tab_solicitud_mercancia_detalle AS detalle ON cabeza.Id_solicitud = detalle.Id_producto 
                WHERE cabeza.Id_solicitud = @id";

SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@id", txtidsolicitud.Text);

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

if(dt.Rows.Count > 0)
{
    dtgv.DataSource = dt;
    return;
}

var respuesta = MessageBox.Show("El dato ingresado no coincide con ningun registro. ¿Desea consultar el listado completo de solicitudes?", "Error En Consulta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (respuesta == DialogResult.Yes)
{
    Consultasolicitudmercancia frm = new Consultasolicitudmercancia();
    frm.enviado += new Consultasolicitudmercancia.enviar(ejecutar);
    frm.Show();
}
else
{
    txtidsolicitud.Clear();
    txtidsolicitud.Select();
}

It is also important to use parameters, the value you want to filter is not concatenated in the string

    
answered by 14.12.2018 / 20:46
source