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 |