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 |








en
en
en
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?? =(
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!
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..