Acceder a datos con ASP.net

Acceder a datos con ASP.net no es nada difícil, sólo que es muy diferente de como se acostumbraba en ASP 3.0. Empecemos. Crearemos una base de datos llamada clientes (no es necesario que la crees, se incluye en el .zip con el código completo), nuestra base de datos tendrá una tabla llamada "Clientes", que tendrá cinco campos, ID (autonumérico), Nombre (texto), Apellido (texto), País (texto) y Ciudad (texto). Algo simple pero útil para nuestra necesidad. La rellenamos con datos como se muestra en la figura 1.

Figura 1: Tabla Clientes

Bueno, una vez que tenemos la base de datos, creamos una carpeta llamada "datosaspnet" en "wwwroot" y guardamos la base de datos como clientes.mdb en el directorio que creamos. Ahora si podemos poner todo nuestro esfuerzo en la programación de ASP.net.

Comencemos con algo teórico, para obtener datos, hace falta: un objeto de conexión con la base de datos; un objeto OleDBCommand, que sirve para ejecutar la sentencia SQL y un OleDBDataReader, para leer los datos.

Una vez que obtuvimos los datos, los cargaremos en un control DataGrid, un control que genera automáticamente una tabla con los datos que le pasamos.

Este es el código (luego paso a explicar cada cosa):

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">
Sub Page_Load(obj As object, e As eventargs)
Dim objConn As New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data " &_
  "Source=C:inetpubwwwrootdatosaspnetclientes.mdb")
Dim objCmd As New OleDbCommand ("SELECT * FROM tClientes;", objConn)
Dim objReader As OleDbDataReader
objConn.Open
objReader = objCmd.ExecuteReader
dgClientes.datasource = objReader
dgClientes.DataBind()
objConn.Close
End sub
</script>

<html><body>
<form runat="server">
<ASP:DataGrid id="dgClientes" runat="server"
AutogenerateColumns="true" />
</form>
</body></html>

Bueno, puede parecer confuso, pero sólo es cuestión de encontrarle la lógica. Las 3 primeras líneas:

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

Dicen a ASP.net que el código será escrito en Visual Basic.net, y que importe los espacios de nombre System.Data y System.Data.OleDB, recuerden que para usar acceso a datos se deben importar estos espacios de nombre, sino el compilador nos dará un error. Tabmien nótese que esto servirá sólo para trabajar con OleDB, es decir, si se quiere usar una base de datos SQL Server, se importarán los espacios de nombre System.Data y el System.Data.SQL.

Avancemos hacia la programación en <Script runat="Server">, veamos, primero creamos el objeto de conexión hacia la base de datos de esta forma:

Dim objConn As New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data " &_
  "Source=C:inetpubwwwrootdatosaspnetclientes.mdb")

El objeto objConn es un objeto del tipo OleDBConection, que sirve para hacer una conexión con la base de datos que le pasemos en el parámetro, pero como ven, el parámetro que recibe Dim objConn as OleDbConection() es más que el simple nombre de una base de datos. Aquí le estamos dando dos parámetros separados por un punto y coma, primero la información de nuestra base de datos (Provider=Microsoft.Jet.OleDB.4.0) y el otro parámetro es DataSource, ¡adivinaron! si es la ruta de la base de datos.

Una vez que ya tenemos la conexión hecha, necesitamos enviarle una consulta SQL a la base de datos para que nos traiga los datos, la consulta que enviaremos es "Select * From tClientes", o sea, Seleccionar todos los campos de la tabla tClientes. Para poder realizar esta consulta, necesitamos un objeto de consultas, entonces, les presento a OleDBCommand. Su sintaxis es la siguiente:

Dim objCmd As New OleDbCommand ("SELECT * FROM tClientes;", objConn)

Cuando lo declaramos, hay que pasarle dos parámetros, uno es la consulta SQL, y el otro es el nombre del objeto de conexión de base de datos, en este caso es objConn.

Ya hicimos una conexión, ya le enviamos la consulta, ¿qué más falta? Bueno, aún faltan algunas cosas, primero, se ha enviado la consulta, pero no se ha ejecutado, digamos que queda en un "estado de alerta" hasta que se ejecute, cuando se ejecuta, se devuelven los datos, aquí en la declaración no hay ninguna devolución de nada.

Y también necesitamos un objeto con el cual leer los datos, algo así como era un recordset en ASP 3.0, es ahí cuando les presento al OleDBDataReader. No es un recordset ni su sintaxis es parecida, aunque funciona de manera similar. Su sintaxis para declararlo es la siguiente:

Dim objReader As OleDbDataReader

Pero con solamente declararlo no hacemos nada, vamos a la acción, le vamos a asignar a este OleDbDataReader los datos que devuelve objCmd, o sea el objeto de comando SQL que creamos anteriormente. Para eso teníamos que ejecutar el comando, asignando a objReader su resultado (los datos devueltos). Lo hacemos de esta manera:

objConn.Open
objReader = objCmd.ExecuteReader

En estas líneas vemos, objReader.open, que envía la consulta y se queda "en estado de alerta" y luego, en la segunda le asigna al OleDbDataReader los datos devueltos por el comando SQL. Para ejecutar la consulta, se recurre al método ExecuteReader del objeto OleDBCommand.

Bueno, ¡listo!, ahora tenemos los datos, pero ¿que hacemos con ellos? ¿atravesamos a objReader con un bucle para sacar los datos? No, eso ya quedó en el pasado con ASP.net, ahora existen los controles de servidor.

Saltemos un poco de código y vamos al formulario:

<form runat="server">
<ASP:DataGrid id="dgClientes" runat="server"
AutogenerateColumns="true" />
</form>

Aquí vemos que pusimos un control DataGrid, que se encarga, cuando le dan una fuente de datos de generar automáticamente una tabla, este es un control muy versátil, se pueden definir las columnas, establecer la apariencia de la tabla, los encabezados, etc. Pero esta vez vamos a hacerlo sencillo, le vamos a dar el parámetro AutoGerenateColumns en valor true para que genere todo automáticamente, si todo va bien, este control llamado "dgClientes" generará una tabla con todos los datos que tenga.

Es nuestra tarea llenarlo con datos, entonces, retrocedamos al bloque de código y veamos las líneas que nos faltaban:

dgClientes.datasource = objReader
dgClientes.DataBind()

Si tienes intuición de programador, sabrás que la primera línea, establece como fuente de datos del control DataGrid dgClientes los datos que tiene el objReader. ¿Pero la última línea? dgClientes.DataBind() enlaza los datos al control. Siempre que cambies algo de un control, debes recurrir al método DataBind() de ese control para que los cambios se efectúen. Cuando olvidamos esto, la aplicación no funcionará y suele dar dolores de cabeza, por eso tomen nota, siempre después de cambiar algo de un control, llamar al método DataBind().

Y por último:

objConn.Close

Cierra el objeto de conexión.

Espero que todo esto les haya sido útil, hay mucho más que aprender sobre acceso a datos, ASP.net a diferencia de ASP 3.0 tiene varios caminos a seguir para llegar al mismo objetivo, cada uno con diferentes prestaciones y diferente rendimiento.

Pueden bajar a su PC el archivo datosaspnet.zip (9,42KB) con la base de datos y el código.

Por Pablo Fahnle ([email protected])
http://www.solotuweb.com
http://www.msjovenes.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR