post icon

Recorrer un DataReader y cargar un DataGridView en C#

Hoy estaba mostrandoles a unos compañeros de trabajo trozos de código básicos para comenzar a programar en C#.Net y lo primero que hicimos fue Conectarnos a un motor de Base de Datos MySQL y cargamos una grilla a partir de un DataReader y noté que resultó más complicado que cargarlo desde un DataTable, entonces decidí escribir el código aquí para otros que lo necesiten en algún momento.

Basicamente, lo que haremos será seleccionar datos de una tabla y lo cargaremos en un DataReader, luego recorreremos secuencialmente la misma e iremos cargando fila por fila la grilla. Deben tener en cuenta que la grilla ya tiene que tener diseñada las columnas o en su defecto ir agregandoles por código las mismas.

Deben tener muy en cuenta que si bien se puede poblar una grilla u otros controles a partir de un DataSet/DataTable o DataReader cada uno presenta ventajas en distintas situaciones. Un DataTable puede recorrerse hacia delante como hacia atrás en cualquier momento, se pueden modificar sus datos, serializarse, agregar filas al mismo e incluso contener varios DataTables con distintas fuentes de alimentación e ir agrupándolos en un DataSet, pero son más lentas ya que deben cargarse completamente para poder utilizarlas además que tienen un espacio mayor en la memoria por su estructura compleja. En cambio el DataReader pierde flexibilidad de trabajo ya que es de sólo lectura de lectura secuencial hacia delante, pero gana mucho en velocidad de trabajo, especialmente si hablamos de consultas que devuelven miles de registros de una vez.

Hora de ver código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//String para cadena de conexion
StringBuilder sCadena = new StringBuilder("");
 
// crear la cadena de conexion
sCadena.Append("Server=SERVIDOR;");
sCadena.Append("Port=PUERTO;");
sCadena.Append("DataBase=BD;");
sCadena.Append("Uid=USUARIO;");
sCadena.Append("Pwd=PASSWORD;");
sCadena.Replace("SERVIDOR", "127.0.0.1");
sCadena.Replace("PUERTO", "3306");
sCadena.Replace("BD", "devtroce");
sCadena.Replace("USUARIO", "usuario");
sCadena.Replace("PASSWORD", "**************");
 
using (MySql.Data.MySqlClient.MySqlConnection connMY = new MySql.Data.MySqlClient.MySqlConnection())
{
	// asignar cadena de conexion
	connMY.ConnectionString = Convert.ToString(sCadena);
	using (MySqlCommand cmdConsulta = new MySqlCommand())
	{
		try
		{
			// setear parametros del command
			cmdConsulta.CommandType = CommandType.Text;
			cmdConsulta.Connection = connMY;
			cmdConsulta.CommandText = "Select * from tabla";
 
			connMY.Open();
 
			MySqlDataReader dr = cmdConsulta.ExecuteReader();
			while (dr.Read()){
				grilla.Rows.Add(dr.GetInt32(0), dr.GetString(1), dr.GetString(2), dr.GetDateTime(3), dr.GetString(4), dr.GetDateTime(5), dr.GetString(6));
			} // end while
		} // end try
		catch (Exception ex)
		{
			MessageBox.Show(ex.Message);
		} // end catch
		finally
		{
			connMY.Close();
		} // end finally
	} // end using command
} // end using conexion

Comentarios desde Facebook:

  1. avatar
    sophie PERU Internet Explorer Windows
    17 noviembre 2011 at 10:44 #

    Hola amigo y como hago para q en ese dataReader se carge una imagen? o como hago para cargar la imagen..?? en la BD no se guardara como Blob si no…que se guarda solo la ruta de la imagen, como hago para q con esa columna se muestre la imagen…en mi tabla???:shock::-(
    una ayudita porfiss ❗
    P.D: uhhmm pq mi avatar es de una carita rosada molesta?? =(

  2. avatar
    Marco VENEZUELA Google Chrome Windows
    8 diciembre 2010 at 01:41 #

    buenas!

    bro no tienes necesidad de hacer el while podrías hacer

    gridview.datasource = reader;
    gridview.databind();

    y listo tienes la grilla con toda la data

    saludos!

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      8 diciembre 2010 at 11:39 #

      Hola marcos, gracias por la acotación, es cierto lo que comentas y funciona para ASP.Net pero para Winform no. Además lo que intentaba queria plasmar el recorrido por separado por si alguien necesite recorrer para hacer otra labor y no solo rellenar un datagrid..

Trackbacks/Pingbacks

  1. Como Cargar un DataGridView (Grilla) a partir de un DataSet o DataTable | DevTroce.com WordPress - 10 noviembre 2010

    […] El día de ayer veíamos como como recorrer un DataReader y rellenar una grilla con sus filas, además de las ventajas y desventajas de cada uno en cada caso, hoy veremos la misma […]

Responder