none
Convertir DataReader a List<Entidad> RRS feed

  • Pregunta

  • Hola, como dice el titulo, tengo en la capa de datos un SqlDataReader que me obtiene la lista de clientes y el retorno de este metodo es una List<Persona>. Mi duda es cual es una buena practica para convertir los campos de este DataReader en un objeto de Persona y agregarlo a la lista de retorno. Tambien pensaba en pasarlo a un DataTable y de ahi convertirlo pero no se como hacerlo tampoco porque estoy aprendiendo bien esta parte de SQL.

    Desde ya gracias.

    martes, 13 de noviembre de 2018 22:02

Respuestas

  • hola seria algo como esto
    using (DataReader reader = ...)
    {    
       List<Persona> per = reader.AutoMap<Persona>()
                                        .ToList();
    }

    • Marcado como respuesta Nacho Sa martes, 13 de noviembre de 2018 23:01
    martes, 13 de noviembre de 2018 22:26
  • hola

    >>primero gracias por la respuesta. No entiendo bien donde aplicar ese codigo,

    porque cierras la pregunta marcando la respuesta sino entiendes como debes resolverlo ?

    >>tengo en la capa de datos un SqlDataReader que me obtiene la lista de clientes y el retorno de este metodo es una List<Persona>.

    podria ser algo como esto

    public List<Class1> Obtener(int param1)
    {
    	string connstring = "connection string";  
    	using (SqlConnection cn = new SqlConnection(connstring)) {  
    		cn.Open();  
    	 
    		string sql = "SELECT campo1, campo2, campo3 FROM Tabla WHERE campo=@param1";  
    		SqlCommand cmd = new SqlCommand(query, cn);  
    		cmd.Parameters.AddwithValue("@param1", param1);  
    	 
    		SqlDataReader reader = cmd.ExecuteReader();  
    	 
    	        List<Class1> lista = new List<Class1>();
    		while(reader.Read())  
    		{  
    			Class1 item = new Class1();
    			item.prop1 = Convert.ToString(reader["campo1"]);  
    			item.prop2 = Convert.ToString(reader["campo2"]);  
    			item.prop3 = Convert.ToString(reader["campo3"]);  
    			lista.Add(item);
    		}  
    	}
    }

    como veras iteras el reader y vas poneindo los datos en las propiedades de la clase que instancias

    [WinForms] Edición Empleados

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 14 de noviembre de 2018 0:09
    • Marcado como respuesta Nacho Sa miércoles, 14 de noviembre de 2018 5:00
    miércoles, 14 de noviembre de 2018 0:08

Todas las respuestas

  • hola seria algo como esto
    using (DataReader reader = ...)
    {    
       List<Persona> per = reader.AutoMap<Persona>()
                                        .ToList();
    }

    • Marcado como respuesta Nacho Sa martes, 13 de noviembre de 2018 23:01
    martes, 13 de noviembre de 2018 22:26
  • Hola greg_dorian, primero gracias por la respuesta. No entiendo bien donde aplicar ese codigo, te muestro como esta mi codigo

    public DataTable ObtenerClientes()
            {
                command.Connection = conexion.AbrirConexion();
                command.CommandText = "ObtenerClientes";
                command.CommandType = CommandType.StoredProcedure;
                dataReader = command.ExecuteReader();
                dt.Load(dataReader);
                conexion.CerrarConexion();
    
                return dt;
            }
    Se que tengo que cambiar el retorno del metodo, pero no entiendo como aplicar ese using, si me podrias explicar te lo agradeceria.
    martes, 13 de noviembre de 2018 23:01
  • hola

    >>primero gracias por la respuesta. No entiendo bien donde aplicar ese codigo,

    porque cierras la pregunta marcando la respuesta sino entiendes como debes resolverlo ?

    >>tengo en la capa de datos un SqlDataReader que me obtiene la lista de clientes y el retorno de este metodo es una List<Persona>.

    podria ser algo como esto

    public List<Class1> Obtener(int param1)
    {
    	string connstring = "connection string";  
    	using (SqlConnection cn = new SqlConnection(connstring)) {  
    		cn.Open();  
    	 
    		string sql = "SELECT campo1, campo2, campo3 FROM Tabla WHERE campo=@param1";  
    		SqlCommand cmd = new SqlCommand(query, cn);  
    		cmd.Parameters.AddwithValue("@param1", param1);  
    	 
    		SqlDataReader reader = cmd.ExecuteReader();  
    	 
    	        List<Class1> lista = new List<Class1>();
    		while(reader.Read())  
    		{  
    			Class1 item = new Class1();
    			item.prop1 = Convert.ToString(reader["campo1"]);  
    			item.prop2 = Convert.ToString(reader["campo2"]);  
    			item.prop3 = Convert.ToString(reader["campo3"]);  
    			lista.Add(item);
    		}  
    	}
    }

    como veras iteras el reader y vas poneindo los datos en las propiedades de la clase que instancias

    [WinForms] Edición Empleados

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 14 de noviembre de 2018 0:09
    • Marcado como respuesta Nacho Sa miércoles, 14 de noviembre de 2018 5:00
    miércoles, 14 de noviembre de 2018 0:08
  • Gracias Leandro, funciono perfecto. Si marque como respuesta pero queria hacer el +1 y no me di cuenta, la costumbre parece jaja. Muchas gracias.
    miércoles, 14 de noviembre de 2018 5:02