El DataReader crea una instancia del objeto Command y de un DataReader a continuación, para lo cual se llama a Command.ExecuteReader a fin de recuperar filas de un origen de datos.
2. DEFINICIÓN
El DataReader crea una instancia del objeto Command y de un
DataReader a continuación, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de
datos.
DataReader es la mejor opción cuando se trata de recuperar
grandes cantidades de datos, ya que éstos no se almacenan en la
memoria caché.
3. RECORRER TODOS LOS REGISTROS
DE UN OBJETO DataReader
Para compilar el código se necesita:
Referencias a los espacios de nombres System y System.Data.
Una conexión de datos denominada SqlConnection1.
Un objeto SQLDataAdapter denominado SqlDataAdapter1.
Para la programación sólida las condiciones siguientes pueden provocar
una excepción:
La base de datos no está disponible (OleDbException (Clase),
SqlException (Clase), OdbcException (Clase) u OracleException
(Clase); la excepción será específica para la base de datos).
4. PROPIEDADES
TENEMOS DIFERENTES PROPIEDADES LAS CUALES LAS
PODEMOS USAR PARA PODER PROGRAMAR:
Connection, Depth, FieldCount, HasRows, IsClosed, Item(Int32),
Item(String), RecordsAffected, VisibleFieldCount.
6. EJEMPLO
A través de este ejemplo realizamos un listado de categorías y visualizamos los registros de
un ListBox1:
Public Sub()
Dim strSQl As String = "SELECT CategoriaID, CategoriaName FROM dbo.Categorias"
Dim mycomand As New SqlCommand(strSQl, myconexion)
Dim myreader As SqlDataReader
Try
myconexion.Open()
myreader = mycomand.ExecuteReader()
While myreader.Read Then
ListBox1.Items.Add(myreader(0).ToString+Space(5)+myreader(1).ToString)
End While
myreader.close()
Catch ex As Exception
Finally
myconexion.Close()
End Try
End Sub
7. A través de este ejemplo vamos a cargar los datos de las categorías en un DropDownList1:
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'Conectando a la base de datos DBVentas
Using cn as New SqlClient.SqlConnection("Server=.; DataBase=DBVentas; Integrated Security=true")
'Ejecutando el comando
Using CMD As New SqlCommand("Select * from tb_categorias", cn.conecta)
cn.conecta.Open()
'Ejecutar el ExecuteReader
Dim dr As SqlDataReader = CMD.ExecuteReader
DropDownList1.DataSource = dr
DropDownList1.DataTextField = "NombreCategoria"
DropDownList1.DataValueField = "idcategoria"
Me.DropDownList1.DataBind()
cn.conecta.Close()
End Using
End Using
End Sub
8. RESUMEN
Los objetos DataReader se utilizan para leer datos en situaciones en las que es necesario
el acceso una única vez, y de solo lectura, como cuando accedemos a una contraseña
almacenada, o se cumplimenta un control enlazado a una lista. Algunos de los aspectos
relativos al acceso a datos que se deben tener en cuenta a la hora de decidir entre
objetos DataSet y DataReader incluyen:
Acceder a datos mediante los objetos DataReader ya que son conexiones de sólo lectura
y deberían utilizarse únicamente cuando los datos vayan a utilizarse en una situación de
sólo lectura.
El acceso a múltiples bases de datos con los objetos DataReader ya que se basan en una
única instrucción SQL de una sola base de datos.
Enlazar los controles con los objetos DataReader para vincularse a un único control y al
conectarse debe ejecutarse en modo conectado.
9. RECOMENDACIONES
Con el DataReader puede aumentar el rendimiento de la aplicación al recuperar
datos en cuanto están disponibles y almacenar (de forma predeterminada) una sola
fila cada vez en memoria, lo que reduce la sobrecarga del sistema.
Para un rendimiento óptimo, System.Data.SqlClient.SqlDataReader evita la creación
de objetos innecesarios o la realización de copias innecesarias de datos.
Para el mejor rendimiento se logra con los métodos que ofrece DataReader y que
permiten tener acceso a los valores de las columnas en sus tipos de datos nativos
(GetDateTime, GetDouble, GetGuid, GetInt32, etc.).
10. CONCLUSIÓN
Sirve para recuperar flujos de datos de solo lectura. Los
resultados se devuelven a medida que se ejecuta la consulta y se
almacenan en el búfer de red del cliente hasta que se solicitan
con el método Read del DataReader.