none
duda sobre un sentencia RRS feed

  • Pregunta

  • buenas estoy haciendo un programa que me cuenta gestores los muestra pero el problema es que me da  0 cuando tiene que salirme algun numero esta es la funcion comprobe el select y lo saca bien

                       

            public DataTable ventanilla_sinenviar()//buscador de  los pedidos
            {
                DateTime answer = DateTime.Today;
                string query = @"SELECT count(L.IDGESTOR) as vsin_enviar
                                        FROM TBLINEA_PEDIDO L 
                        LEFT OUTER JOIN TBPEDIDO PD ON(PD.IDPEDIDO = L.IDPEDIDO) 
                        LEFT OUTER JOIN TBARTICULO A ON (A.IDARTICULO = L.IDARTICULO) 
                        LEFT OUTER JOIN TBREGISTRO R ON(R.IDREGISTRO = L.IDREGISTRO) 
                        LEFT OUTER JOIN TBGESTOR G ON(G.IDGESTOR = L.IDGESTOR) 
                        LEFT OUTER JOIN TBCLIENTE CL ON (CL.IDCLIENTE = PD.IDCLIENTE) 
                        LEFT OUTER JOIN TBCODIGO F ON (F.VALOR=PD.COD_FENVIO AND F.CODIGO='COD_FENVIO') 
                        LEFT OUTER JOIN TBCONTACTO CT ON (CT.id_usrwww=l.id_usrwww) 
                        LEFT OUTER JOIN TBCODIGO PL ON (PL.VALOR = L.COD_PLAZO AND PL.CODIGO='COD_PLAZO')  
                        LEFT OUTER JOIN TBLOCALIDAD LOC ON (L.IDLOCALIDAD=LOC.IDLOCALIDAD) 

                            WHERE (CL.idcliente=218356)
                            AND L.FPET_PEDIDO>= CONVERT(DATETIME,'01/11/2015 00:00',103) 
                            AND L.FPET_PEDIDO< @answer
                            and l.idarticulo<>13
                            and L.IDGESTOR!=300 and L.IDGESTOR!=1 
                            and (l.fenvio_cliente is null )
                            AND L.COD_ESTADO = 'A' AND L.COD_ESTADO <> 'D' ";
                SqlCommand sqlcmd = new SqlCommand(query, new SqlConnection(CONN));
                sqlcmd.Parameters.AddWithValue("@answer", answer);
                SqlDataAdapter da = new SqlDataAdapter(sqlcmd);

                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }

    aparte de eso  la linea sqlcmd.Parameters.AddWithValue("@answer", answer); no la reconoce bueno no me salta error pero no me sale en celeste como las demas  y 

    claro para mostrar uso esto 

                

            private void button1_Click(object sender, EventArgs e)
            {

                DataTable dt= mostrar.gestor_sinenviar();
                DataTable dt2 = mostrar.gestor_enviar();
                DataTable dt3 = mostrar.ventanilla_sinenviar();
                DataTable dt4 = mostrar.ventanilla_enviar();
                DataRow row = dt.Rows[0];
                DataRow row2 = dt2.Rows[0];
                DataRow row3 = dt3.Rows[0];
                DataRow row4 = dt4.Rows[0];
                ListViewItem item = new ListViewItem(Convert.ToString(row["sin_enviar"]));
                item.SubItems.Add(Convert.ToString(row2["envidas_300"]));
                item.SubItems.Add(Convert.ToString(row3["vsin_enviar"]));
                item.SubItems.Add(Convert.ToString(row4["enviadas"]));
                listView1.Items.Add(item);
            }

    sale solo un campo  el 0 tendria que haber 4  campos 


    lunes, 21 de diciembre de 2015 11:44

Respuestas

  • nada volvi a poner la conexion  tal cual y ya iba  devolvia todo correcto 

    agrege esto tambien 

                SqlConnection conn = new SqlConnection(CONN);
                conn.Open();
                SqlCommand sqlcmd = conn.CreateCommand();
                sqlcmd.Parameters.AddWithValue("@answer", answer);
                sqlcmd.CommandText = query;
                var dr = sqlcmd.ExecuteReader();
                if (dr.Read())
                {
                    n = (int)dr["vsin_enviar"];
                }
                dr.Close();

                conn.Close();
                return n;

    eso esta ya solucionado pero ahora 
     el fallo es este 


     
              int dt= mostrar.gestor_sinenviar();            int dt2 = mostrar.gestor_enviar();            int dt3 = mostrar.ventanilla_sinenviar();            int dt4 = mostrar.ventanilla_enviar();            ListViewItem item = new ListViewItem("sinenviarG");            item.SubItems.Add(Convert.ToString(dt));            listView1.Items.Add(item);            ListViewItem item2 = new ListViewItem("enviadoG");            item2.SubItems.Add(Convert.ToString(dt2));            listView1.Items.Add(item2);            ListViewItem item3 = new ListViewItem("sin_enviarV");            item3.SubItems.Add(Convert.ToString(dt3));            listView1.Items.Add(item3);            ListViewItem item4 = new ListViewItem("enviadoV");            item4.SubItems.Add(Convert.ToString(dt4));            listView1.Items.Add(item4);
    no me saca el numero solo el nombre aunque le ponga subitem

    • Marcado como respuesta carlos carpio2 martes, 22 de diciembre de 2015 7:46
    lunes, 21 de diciembre de 2015 15:55

Todas las respuestas

  • hola

    >>sale solo un campo  el 0 tendria que haber 4  campos

    si solo tomas un valro porque usas un datatable ? eso esta mal deberias usar el ExecuteScalar()

    public int ventanilla_sinenviar()
    {
    	DateTime answer = DateTime.Today;
    	string query = @"SELECT count(L.IDGESTOR) as vsin_enviar
    							FROM TBLINEA_PEDIDO L 
    			... ";
    	SqlCommand sqlcmd = new SqlCommand(query, new SqlConnection(CONN));
    	sqlcmd.Parameters.AddWithValue("@answer", answer);
    	
    	return Convert.ToInt32(sqlcmd.ExecuteScalar());
    } 

    y lo usas

     int vsin_enviar = mostrar.ventanilla_sinenviar();

    asi de simple

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    lunes, 21 de diciembre de 2015 12:01
  • muentras tardes leandro  modifique lo que me dijistes pero sigue igual en el select me devuelve 0 aunque lo comprobado  y si me da el resultado el select solo cuando ejecuto el programa me devuelve 0 . 

    gracias por tu ayuda  eh corregido lo otro asi se ve mas limpio el codigo 

    lunes, 21 de diciembre de 2015 12:21
  • ¿Cómo estás haciendo la asignación?

    La única manera de que te retorne cero es que la cuenta no encuentre registros, lo otro es que estés equivocando la manera de asignar el valor a una variable o celda.

    lunes, 21 de diciembre de 2015 15:34
  • >>modifique lo que me dijistes pero sigue igual en el select me devuelve 0 aunque lo comprobado  y si me da el resultado el select solo cuando ejecuto el programa me devuelve 0 .

    una duda, porque tantos LEFT JOIN sino usas ninguna de esas tablas que relacionas en los filtros o como datos que devuelves

    que pasa si usas

     string query = @"SELECT count(L.IDGESTOR) as vsin_enviar
                    FROM TBLINEA_PEDIDO L 
    				WHERE (CL.idcliente=218356)
    						AND L.FPET_PEDIDO>= CONVERT(DATETIME,'01/11/2015 00:00',103) 
    						AND L.FPET_PEDIDO< @answer
    						and l.idarticulo<>13
    						and L.IDGESTOR!=300 and L.IDGESTOR!=1 
    						and (l.fenvio_cliente is null )
    						AND L.COD_ESTADO = 'A' AND L.COD_ESTADO <> 'D' ";

    quitando todas las relaciones

    es mas que pasa si vas quitando algunos filtros validando cual es el culpable que devuelva cero como respuesta ?

    validaste que el parametro @answer que asignas no es el causante que devuelva cero como respuesta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de diciembre de 2015 15:47
  • nada volvi a poner la conexion  tal cual y ya iba  devolvia todo correcto 

    agrege esto tambien 

                SqlConnection conn = new SqlConnection(CONN);
                conn.Open();
                SqlCommand sqlcmd = conn.CreateCommand();
                sqlcmd.Parameters.AddWithValue("@answer", answer);
                sqlcmd.CommandText = query;
                var dr = sqlcmd.ExecuteReader();
                if (dr.Read())
                {
                    n = (int)dr["vsin_enviar"];
                }
                dr.Close();

                conn.Close();
                return n;

    eso esta ya solucionado pero ahora 
     el fallo es este 


     
              int dt= mostrar.gestor_sinenviar();            int dt2 = mostrar.gestor_enviar();            int dt3 = mostrar.ventanilla_sinenviar();            int dt4 = mostrar.ventanilla_enviar();            ListViewItem item = new ListViewItem("sinenviarG");            item.SubItems.Add(Convert.ToString(dt));            listView1.Items.Add(item);            ListViewItem item2 = new ListViewItem("enviadoG");            item2.SubItems.Add(Convert.ToString(dt2));            listView1.Items.Add(item2);            ListViewItem item3 = new ListViewItem("sin_enviarV");            item3.SubItems.Add(Convert.ToString(dt3));            listView1.Items.Add(item3);            ListViewItem item4 = new ListViewItem("enviadoV");            item4.SubItems.Add(Convert.ToString(dt4));            listView1.Items.Add(item4);
    no me saca el numero solo el nombre aunque le ponga subitem

    • Marcado como respuesta carlos carpio2 martes, 22 de diciembre de 2015 7:46
    lunes, 21 de diciembre de 2015 15:55