none
Listar Disponibles por periodos RRS feed

  • Pregunta

  • Hola, tengo los siguientes procedimientos, en capa de persistencia, logica y webform, el tema es que solo mee sta listando un vehiculo, no todos los disponibles en X periodo

    Webform:
    protected void btnDis_Click(object sender, EventArgs e)
        {
            try
            {
                DateTime ini;
                DateTime fin;
                ini = Convert.ToDateTime(txtIni.Text);
                fin = Convert.ToDateTime(txtFin.Text);
                List<string> disponible = logicaAlquiler.dispo(ini, fin);
                for (int i = 0; i < disponible.Count; i++)
                {
                    lstDis.Items.Add(disponible[i].ToString());


                }


            }
            catch (Exception ex)
            {
                lblerror.Text = ex.Message;
            }
        }

    logica:
            public static List<Alquiler> dispo(DateTime ini, DateTime fin)
            {
                List<Alquiler> oAux = persistenciaAlquiler.//disponible(ini, fin);
                return oAux;
            }

    persistencia:
            public static List<Vehiculo> disponible(DateTime Ini, DateTime Fin)
            {
                List<Vehiculo> vehiculodis = new List<Vehiculo>();
                string letmatv = "", marca = "", modelo = "", anclaje = "", tipo = "";
                int nrosmatv = 0, año = 0, cantP = 0, costo = 0, carg = 0;
                DateTime inicio = Ini;
                DateTime final = Fin;
                DateTime i;
                DateTime f;
                Alquiler aA = null;
                Vehiculo v = null;
                Utilitario U = null;
                string x = null;
                SqlConnection oconexion = new SqlConnection(conexion.STR);
                SqlCommand oComando = new SqlCommand("VehiculosDisponiblesPeriodo", oconexion);
                oComando.CommandType = CommandType.StoredProcedure;
                SqlParameter oComando1 = new SqlParameter("@desde", inicio);
                SqlParameter oComando2 = new SqlParameter("@hasta", final);
                oComando.Parameters.Add(oComando1);
                oComando.Parameters.Add(oComando2);
                SqlDataReader oreader;
                try
                {
                    oconexion.Open();
                    oreader = oComando.ExecuteReader();

                    if (oreader.Read())
                    {
                       
                            letmatv = (string)oreader["LetrasMatV"];
                            nrosmatv = (int)oreader["NrosMatV"];
                            marca = (string)oreader["marcaV"];
                            modelo = (string)oreader["modeloV"];
                            año = (int)oreader["añoV"];
                            cantP = (int)oreader["cantPV"];
                            costo = (int)oreader["costoDV"];
                            i = (DateTime)oreader["fechaIni"];
                            f = (DateTime)oreader["fechaFin"];
                            aA = new Alquiler(i, f, v);
                        }



                        vehiculodis.Add(aA);
                        return vehiculodis;
                    
                }

                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    oconexion.Close();
                }

    miércoles, 27 de diciembre de 2017 19:51

Respuestas

  • hola

    pero deberias usar un while no un if con el reader

    while(oreader.Read())
    {
       
    	letmatv = (string)oreader["LetrasMatV"];
    	nrosmatv = (int)oreader["NrosMatV"];
    	marca = (string)oreader["marcaV"];
    	modelo = (string)oreader["modeloV"];
    	año = (int)oreader["añoV"];
    	cantP = (int)oreader["cantPV"];
    	costo = (int)oreader["costoDV"];
    	i = (DateTime)oreader["fechaIni"];
    	f = (DateTime)oreader["fechaFin"];
    	Alquiler aA = new Alquiler(i, f, v);
    	
    	vehiculodis.Add(aA);
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 27 de diciembre de 2017 20:01
  • Hola, Hay algunas cosas mal en el codigo:

          List<Vehiculo> vehiculodis = new List<Vehiculo>();
          //.....
          aA = new Alquiler(i, f, v);
          //......
          vehiculodis.Add(aA);

    Esas 3 lineas aparecen en diferentes lugares de tu código. Eso no puede funcionar porque en la última línea intentas agregar un objeto de tipo "Alquiler" a una lista de objetos de tipo "Vehiculo".

    Otra: ¿Para qué son todas esas variables que pusiste dentro del bloque if (el que Lenadro te sugiere cambiar por while) si no las usas después: 

                           letmatv = (string)oreader["LetrasMatV"];
                            nrosmatv = (int)oreader["NrosMatV"];
                            marca = (string)oreader["marcaV"];
                            modelo = (string)oreader["modeloV"];
                            año = (int)oreader["añoV"];
                            cantP = (int)oreader["cantPV"];
                            costo = (int)oreader["costoDV"];


    Además, aunque esto no tiene importancia, podrías abreviar el código con los parámetros:

    ...........
       oComando.CommandType = CommandType.StoredProcedure;
       oComando.Parameters.AddWithValue("@desde", inicio);
       oComando.Parameters.AddWithValue("@hasta", final);
       SqlDataReader oreader;
    .............

    Saludos



    jueves, 28 de diciembre de 2017 11:35

Todas las respuestas

  • hola

    pero deberias usar un while no un if con el reader

    while(oreader.Read())
    {
       
    	letmatv = (string)oreader["LetrasMatV"];
    	nrosmatv = (int)oreader["NrosMatV"];
    	marca = (string)oreader["marcaV"];
    	modelo = (string)oreader["modeloV"];
    	año = (int)oreader["añoV"];
    	cantP = (int)oreader["cantPV"];
    	costo = (int)oreader["costoDV"];
    	i = (DateTime)oreader["fechaIni"];
    	f = (DateTime)oreader["fechaFin"];
    	Alquiler aA = new Alquiler(i, f, v);
    	
    	vehiculodis.Add(aA);
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 27 de diciembre de 2017 20:01
  • hola

    pero deberias usar un while no un if con el reader

    while(oreader.Read())
    {
       
    	letmatv = (string)oreader["LetrasMatV"];
    	nrosmatv = (int)oreader["NrosMatV"];
    	marca = (string)oreader["marcaV"];
    	modelo = (string)oreader["modeloV"];
    	año = (int)oreader["añoV"];
    	cantP = (int)oreader["cantPV"];
    	costo = (int)oreader["costoDV"];
    	i = (DateTime)oreader["fechaIni"];
    	f = (DateTime)oreader["fechaFin"];
    	Alquiler aA = new Alquiler(i, f, v);
    	
    	vehiculodis.Add(aA);
    }

    saludos


    Leandro Tuttini


    Perfecto, lo voy a intentar en un rato cuando llegue a mi casa, para ver si es ese el error, muchas gracias!
    miércoles, 27 de diciembre de 2017 20:16
  • Hola, Hay algunas cosas mal en el codigo:

          List<Vehiculo> vehiculodis = new List<Vehiculo>();
          //.....
          aA = new Alquiler(i, f, v);
          //......
          vehiculodis.Add(aA);

    Esas 3 lineas aparecen en diferentes lugares de tu código. Eso no puede funcionar porque en la última línea intentas agregar un objeto de tipo "Alquiler" a una lista de objetos de tipo "Vehiculo".

    Otra: ¿Para qué son todas esas variables que pusiste dentro del bloque if (el que Lenadro te sugiere cambiar por while) si no las usas después: 

                           letmatv = (string)oreader["LetrasMatV"];
                            nrosmatv = (int)oreader["NrosMatV"];
                            marca = (string)oreader["marcaV"];
                            modelo = (string)oreader["modeloV"];
                            año = (int)oreader["añoV"];
                            cantP = (int)oreader["cantPV"];
                            costo = (int)oreader["costoDV"];


    Además, aunque esto no tiene importancia, podrías abreviar el código con los parámetros:

    ...........
       oComando.CommandType = CommandType.StoredProcedure;
       oComando.Parameters.AddWithValue("@desde", inicio);
       oComando.Parameters.AddWithValue("@hasta", final);
       SqlDataReader oreader;
    .............

    Saludos



    jueves, 28 de diciembre de 2017 11:35