Está en la página 1de 5

Introduccin:

En realidad esto que te voy a mostrar es un ejemplo basado en algo que ya publiqu hace un par de aos, (concretamente en Enero de 2004), pero en esta ocasin te mostrar las dos formas de hacerlo poniendo el cdigo junto, con idea de que puedas ver las diferencias de acceder a una base de datos, (que en este caso ser de Access), usando los objetos de ADO: Recordset y Connection, adems de usar los "equivalentes" (o casi), de ADO.NET, en esta ocasin, usaremos tambin un objeto Connection y un DataTable, pero del espacio de nombres System.Data.OleDb, ya que el tipo de base a la que accederemos es de Access, aunque para acceder a una base de datos de SQL Server o cualquier otro tipo, pues... en fin, que tendrs que usar otros objetos de ADO.NET ms adecuados, etc., pero para mantener la cosa sencilla, no vamos a entrar en esas comparaciones. Lo mismo ocurre con el cdigo, solo mostrar el de Visual Basic, ya que de lo que se trata es de comparar el acceso con VBScript, (porque el acceso a datos lo haremos desde una pgina Web, de tipo .aspx), que como sabes es un "sucedneo" de Visual Basic 6.0, as que... no hay nada para C#, aunque si quieres ver un ejemplo parecido, puedes verlo en los ejemplos que publiqu en Enero de 2004, en el que si que mostraba los dos, el de Visual Basic y el de C#. Aqu tienes los links a esos dos ejemplos de hace un par de aos: Acceder a una base de datos de Access usando ADO, desde un formulario Web (.aspx)

Acceder a una base de datos de Access usando ADO.NET, desde un formulario Web

Una vez hechas las presentaciones, veamos cmo acceder a una base de datos de Access usando esas dos tecnologas. Como ya he comentado, el acceso lo haremos desde una pgina .ASPX, es decir, desde una pgina de ASP.NET, s, aunque usemos ADO, se puede usar, pero de los pormenores, o detalles, de cmo hacer que se pueda usar ese sistema "obsoleto" de acceso a datos desde una pgina de ASP.NET, tendrs que verlo en el primero de los dos links que te he puesto antes, ya que aqu solo te mostrar qu cdigo usar para cada una de esas dos formas de acceder a los datos... incluso no pondr un ejemplo completo, que despus la gente se queja de que es muy complicado y se terminan perdiendo, as que... tendrs que echarle un poco de imaginacin y "pensar" un poco para que comprendas mejor todo... si no te enteras de nada, entonces significa que antes de entrar en esto deberas ver otras secciones tanto de cdigo ADO para Visual Basic 6.0 como de ADO.NET para Visual Basic .NET (incluido Visual Basic 2005).

Conectar a la base de datos y recuperar los datos


El cdigo "script" compatible con Visual Basic 6.0, usando ADO. Como sabes, en VBScript no se definen los tipos de datos, pero para que te hagas una idea, (por si quieres compararlo con una aplicacin normal de escritorio), la variable Rst sera de tipo ADODB.Recordset, y la variable Cnn sera del tipo ADODB.Connection.
' Variables usadas para crear los objetos, etc. Dim Rst, Cnn Dim sConn, sTip Dim sTitulo, sLink, sApartado, sDescripcion Dim sel, i

' Crear los objetos Cnn = Server.CreateObject("ADODB.Connection")

' Crear la conexin a la base de datos sConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _ Server.MapPath("datos\elguille.mdb") & ";" Cnn.Open(sConn) ' Crear la cadena SQL sel = "SELECT * FROM Titulos ORDER BY Apartado ASC" Rst = Cnn.Execute(sel)

El cdigo para Visual Basic .NET usando ADO.NET. En este cdigo no usamos ningn objeto del tipo Connection, ya que usamos un DataAdapter, y ese objeto solo necesita la cadena de conexin, pero no de una "conexin real".
Dim da As OleDbDataAdapter Dim dt As DataTable Dim i, n As Integer Dim sel, sCnn As String ' sel = "SELECT * FROM Titulos ORDER BY Apartado ASC;" ' sCnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _ Server.MapPath("datos\elguille.mdb") & ";" ' Crear el DataAdapter

da = New OleDbDataAdapter(sel, sCnn) ' ' Llenar el DataTable dt = New DataTable da.Fill(dt)

Como puedes comprobar, la cadena de conexin es la misma para los dos tipos de acceso a datos, la diferencia principal est en que el objeto Recordset de Visual Basic 6.0 lo creamos a partir del mtodo Execute de la conexin; mientras que en .NET la forma de recuperar los datos (una de ellas) es por medio del objeto OleDbDataAdapter, que es el que se encarga de recuperar los datos de la base de datos, y la forma de recuperarlos lo sabe por medio de la cadena de conexin. En ambos casos, los datos que se van a usar estn indicados por los datos de la cadena de seleccin (la variable sel). En el caso de ADO, esos datos los manipularemos por medio del Recordset, mientras que en ADO.NET vamos a usar un objeto DataTable. El primero lo "llenamos" usando el mencionado mtodo Execute, mientras que en el segundo, lo llenamos por medio del mtodo Fill del adaptador.

Navegar por los datos (mostrar todas las filas)


Una vez que ya tenemos los datos a los que queremos acceder, podremos navegar por ellos de la siguiente forma. En estos cdigos (primero el de ADO y despus del de ADO.NET), recorremos cada una de las filas que haya devuelto la cadena de seleccin usada (sel), los asignaremos a variables y los mostraremos, bueno, en realidad lo de mostrarlos es algo que no se hace en este cdigo, ya que es cosa tuya, porque lo que en realidad importa (al menos esa es mi intencin), es ver cdigo "compatible" entre ADO y ADO.NET. El cdigo de ADO que recorre todas las filas del Recordset:
' Buscar desde el principio Rst.MoveFirst i = 0 Do While Not (Rst.BOF Or Rst.EOF) i = i + 1 With Rst ' Asignar a las variables el contenido del registro sTitulo = .Fields("Titulo").Value & "" sLink = .Fields("Link").Value & "" sApartado = .Fields("Apartado").Value & "" sDescripcion = .Fields("Descripcion").Value & ""

' Mostrar los datos de la fila actual

... Esto es cosa tuya ...

End With ' ' Mostrar el siguiente registro Rst.MoveNext Loop

If i = 0 Then ' No se ha encontrado ningn registro que coincida con la seleccin End If ' Rst.Close Cnn.Close

Rst = Nothing Cnn = Nothing

El cdigo de ADO.NET que recorre todas las filas de la tabla:


' n = dt.Rows.Count

If n = 0 Then ' No se ha encontrado ningn registro que coincida con la seleccin

Else

For i = 0 To n - 1 Dim sTitulo, sLink, sApartado, sDescripcion As String ' ' Asignar a las variables el contenido del registro sApartado = dt.Rows(i)("Apartado").ToString sTitulo = dt.Rows(i)("Titulo").ToString sLink = dt.Rows(i)("Link").ToString sDescripcion = dt.Rows(i)("Descripcion").ToString

' Mostrar los datos de la fila actual

... Esto es cosa tuya ...

Next End If

Nota: En realidad, un cdigo "ms parecido" al de ADO, lo conseguiramos usando un objeto del tipo DataReader, el cual, a diferencia de la combinacin DataAdapter/DataTable, si que usa una conexin permanente a la base de datos, adems de que se obtiene por medio de un mtodo (ExecuteReader), en este caso, desde el objeto Command usado para realizar la seleccin indicada en la variable sel. Adems el DataReader tambin se utiliza para "navegar" de forma muy parecida al del Recordset... o casi... pero eso... lo mismo lo publico otro da, y por ahora, puedes practicarlo por tu cuenta, as de camino aprendes ms... (je, je... eso es lo que se dice cuando el que escribe no quiere hacer el ejemplo...) yo? que va! estoooo... es que... uf! cuantas cosas tengo que hacer!, adems... eso son cosas que dice del otro Guille... ;-)))

De cualquier forma, con o sin lo dicho en la nota, espero que todo esto te sea de utilidad. Nos vemos. Guillermo