none
como mostrar unos numeros con listview RRS feed

  • Pregunta

  • tengo esta funcion devuelve ula cantidad de gestores  pero me sale 2 fallos unos que la query siempre es 0 y que  me saca este mensaje  

     An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dllAdditional information: ExecuteScalar requiere una Connection abierta y disponible. El estado actual de la conexión es cerrada.


     public int gestor_sinenviar()// esta bien el select lo comprobé y da bien el resultado 
            {

                DateTime answer = DateTime.Now;

                    string query = @"SELECT distinct COUNT(L.IDGESTOR)AS sin_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>= '01-11-2015'
                            AND L.FPET_PEDIDO<@answer
                            and l.idarticulo<>13
                            and L.IDGESTOR=300
                            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);
                int prueba = Convert.ToInt32(sqlcmd.ExecuteScalar());//en esta linea
                return Convert.ToInt32(sqlcmd.ExecuteScalar()); 
            }

     despues tenemos como  hago para mostrar 

                

     private void button1_Click(object sender, EventArgs e)
            {

                int dt= mostrar.gestor_sinenviar();
                int dt2 = mostrar.gestor_enviar();
                int dt3 = mostrar.ventanilla_sinenviar();
                int dt4 = mostrar.ventanilla_enviar();

                ListViewItem item = new ListViewItem(Convert.ToString(dt));
                item.SubItems.Add(Convert.ToString(dt2));
                item.SubItems.Add(Convert.ToString(dt3));
                item.SubItems.Add(Convert.ToString(dt4));
                listView1.Items.Add(item);
            }

    este es mi listview  

     el resultado tiene que ser algo asi 

     enviado  sin_enviar  Venviado sin_venviar
    12			11		13		14

                                       


    lunes, 21 de diciembre de 2015 14:23

Respuestas

  •    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["sin_enviar"];
                }
                dr.Close();
                
                conn.Close();
                return n;

    • Marcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 15:08
    • Desmarcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 15:08
    • Marcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 16:08
    lunes, 21 de diciembre de 2015 15:08

Todas las respuestas

  • Hola carlos carpio2,

    El mensaje indica claramente lo que está sucediendo: intentas ejecutar un comando pero no estás abriendo una conexión con la base de datos:

    SqlConnection cn = new SqlConnection("CONN");
    SqlCommand sqlcmd = new SqlCommand(query, cn);
                sqlcmd.Parameters.AddWithValue("@answer", answer);
                cn.Open();
                int prueba = Convert.ToInt32(sqlcmd.ExecuteScalar());//en esta linea
                return Convert.ToInt32(sqlcmd.ExecuteScalar()); 


    lunes, 21 de diciembre de 2015 15:03
  •    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["sin_enviar"];
                }
                dr.Close();
                
                conn.Close();
                return n;

    • Marcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 15:08
    • Desmarcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 15:08
    • Marcado como respuesta carlos carpio2 lunes, 21 de diciembre de 2015 16:08
    lunes, 21 de diciembre de 2015 15:08
  • Hola,

    Como dice Willams tienes que abrir la conexión pero recuerda que luego la tienes que cerrar.

    ¿Porque ejecutas 2 veces la consulta?.

    int prueba = Convert.ToInt32(sqlcmd.ExecuteScalar());//en esta linea
    return Convert.ToInt32(sqlcmd.ExecuteScalar());

    seria

    return Convert.ToInt32(sqlcmd.ExecuteScalar());

    o

     int prueba = Convert.ToInt32(sqlcmd.ExecuteScalar());//en esta linea
     return prueba;

    respecto al select es una consulta muy complicada dificil de analizar, te puede estar pasando cualquier cosa, que falte una coma, que el formato de fecha no sea correcto, ten encuenta que alguas BD necesitan algun caracter delante de la fecha por ejemplo acces necesita # delante de la fecha, ¿por que no la vas montando poco a poco y probando? primero el select hasta el from ,luego añades el primer LEFT y asi sucesivamente para ver donde falla


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog

    lunes, 21 de diciembre de 2015 15:17
  • ¿Por qué haces uso de DataReader? Si sólo esperas recibir un valor escalar entonces basta con usar el método ExecuteScalar()
    lunes, 21 de diciembre de 2015 15:17
  • el prueba lo use para ver que tenia la linea aver si funcionaba  solamente si lo ven lo quite 
    lunes, 21 de diciembre de 2015 15:57
  • porque el otro no lo cogia para nada nose porque al final lo cambie ya iba 
    lunes, 21 de diciembre de 2015 15:58
  • Perfecto, si tu requerimiento ya ha sido atendido debes cerrar el post marcando la(s) respuesta(s)  que te hayan ayudado a solucionar el problema, ello hará que otros usuarios puedan encontrar solución rápida a un problema similar.
    lunes, 21 de diciembre de 2015 16:06