| ASP.NET & ADO.NET |
Acceder a una base de datos usando ADO y ADO.NET
|
Introducción:En realidad esto que te voy a mostrar es un ejemplo basado en algo que ya
publiqué hace un par de años, (concretamente en Enero de 2004), pero en esta ocasión te mostraré
las dos formas de hacerlo poniendo el código 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, además de usar los "equivalentes" (o casi), de ADO.NET, en
esta ocasión, usaremos también 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 tendrás que usar otros objetos de ADO.NET más adecuados, etc., pero para mantener la
cosa sencilla, no vamos a entrar en esas comparaciones.
Una vez hechas las presentaciones, veamos cómo acceder a una base de datos de
Access usando esas dos tecnologías.
Conectar a la base de datos y recuperar los datosEl código "script" compatible con Visual Basic 6.0, usando ADO. ' 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 conexión 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 código para Visual Basic .NET usando ADO.NET. 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 conexión 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 método Execute de la conexión; 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 conexión.
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 códigos (primero el de ADO y después del de ADO.NET), recorremos cada una de las filas que haya devuelto la cadena de selección usada (sel), los asignaremos a variables y los mostraremos, bueno, en realidad lo de mostrarlos es algo que no se hace en este código, ya que es cosa tuya, porque lo que en realidad importa (al menos esa es mi intención), es ver código "compatible" entre ADO y ADO.NET. El código 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 ningún registro que coincida con la selección
End If
'
Rst.Close
Cnn.Close
Rst = Nothing
Cnn = Nothing
El código de ADO.NET que recorre todas las filas de la tabla: '
n = dt.Rows.Count
If n = 0 Then
' No se ha encontrado ningún registro que coincida con la selección
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:
De cualquier forma, con o sin lo dicho en la nota, espero que todo esto te sea de utilidad. Nos vemos.
Espacios de nombres usados en el código de este artículo:System.Data |