Está en la página 1de 10

Introducción a ADO .

NET

1. ARQUITECTURA DE ADO .NET

A partir de esta lección vamos a trabajar con los objetos que


conforman ADO .NET para acceder a orígenes de datos.

Y lo primero es tener una visión general de ADO .NET, ya que


se trata de una tecnología compleja en la que podemos aplicar dos
enfoques a la hora de acceder a los orígenes de datos.

Aunque nos centraremos en el acceso a bases de datos relacionales,


ADO .NET es una tecnología independiente del origen de datos, por lo
que permite acceder a otros tipos de información, como XML, archivos
planos, etc.

En ADO .NET disponemos de la posibilidad de aplicar dos


enfoques para acceder a los datos: el enfoque conectado y el enfoque
desconectado.

¿Qué quiere decir esto? Bien, un acceso conectado a una base


de datos significa que se mantiene la conexión abierta durante todo el
tiempo en que se manipulan los datos.

El procedimiento que se sigue es:

1. Establecer y abrir la conexión con la base de datos.


2. Manipular los datos: obtenerlos, modificarlos, etc.
3. Cerrar la conexión con la base de datos.

La principal característica de este enfoque es que la conexión está


abierta durante todo el tiempo, por lo que dicha conexión no puede ser
utilizada por otra aplicación o acceso a la base de datos.

Las conexiones son recursos limitados, por lo que este enfoque es


“caro” en cuanto a este aspecto. A cambio, es un proceso más sencillo
de utilizar y es el enfoque que tradicionalmente se ha empleado en las
aplicaciones Windows.

ADO .NET permite otro enfoque en el acceso a la base de datos:


el acceso desconectado. En este caso, el procedimiento que se sigue
es:

1. Establecer y abrir la conexión con la base de datos.


2. Obtener los datos deseados.
3. Cerrar la conexión.
4. Manipular los datos obtenidos en el paso 2.

Copyright © Computer Aided Education, S.A. 1


Introducción a ADO .NET

Fíjese que en este otro procedimiento, la conexión se cierra


(o libera) una vez se han obtenido los datos con los que queremos
trabajar.

Esto permite que sea reutilizada por otra aplicación o acceso. A


cambio, en este enfoque se hace necesaria una estructura en el equipo
cliente donde almacenar los datos obtenidos, ya que no se mantiene
abierta la conexión.

Veremos que dicha estructura es principalmente el DataSet, pero


también puede ser el objeto DataTable.

Ambos enfoques tienen sus ventajas e inconvenientes, por lo que


lo importante es acertar en la elección.

Encontraremos escenarios donde el acceso conectado es el más


adecuado y otros donde lo es el enfoque desconectado.

ADO .NET dispone de toda una serie de objetos que permiten


aplicar ambos enfoques y que iremos conociendo.

2. PROVEEDORES DE DATOS

L as clases que componen ADO .NET se encuentran en el


espacio de nombres System.Data.

Sin embargo, en función del origen de datos al que realmente


accedemos, utilizaremos unas clases más especializadas.

Esto es así porque no es lo mismo, por ejemplo, acceder a una


base de datos Microsoft SQL Server, que hacer lo propio con una
base de datos Oracle.

ADO .NET dispone de clases especializadas en el acceso a las


distintas bases de datos. Estas clases vienen organizadas en distintos
espacios de nombres y se conocen como proveedores de datos.

Los proveedores de datos son las clases que conocen con exactitud
la forma de acceder al tipo de origen de datos con el que interactúa la
aplicación.

Así pues, podemos utilizar distintos proveedores de datos:

2
Introducción a ADO .NET

 Proveedor de datos .NET para SQL Server: clases dispuestas


en el espacio de nombres System.Data.SqlClient que se utilizan
para el acceso a una base de datos SQL Server 7.0 o posterior.

Es fácil reconocer esta clases, ya que sus nombres empiezan con


el prefijo Sql.

 Proveedor de datos .NET para Oracle: clases dispuestas en el


espacio de nombres System.Data.OracleClient que se utilizan
para el acceso a una base de datos Oracle 8.1.6 o posterior.

Es fácil reconocer esta clases, ya que sus nombres empiezan con


el prefijo Oracle.

 Proveedor de datos .NET para bases de datos compatibles


OLE Db: clases dispuestas en el espacio de nombres System.
Data.OleDb que se utilizan para el acceso a cualquier base de
datos compatible OLE DB. Por ejemplo, Access, SQL Server,
Oracle, etc. disponen de un controlador OLE DB, por lo que
podríamos acceder también a través de este proveedor de datos
.NET.

Es fácil reconocer esta clases, ya que sus nombres empiezan con


el prefijo OleDb.

 Proveedor de datos .NET para bases de datos compatibles


ODBC: clases dispuestas en el espacio de nombres System.Data.
ODBC que se utilizan para el acceso a cualquier base de datos
compatible ODBC. Es similar al anterior, pero utilizando una
tecnología más antigua de acceso a datos, como es ODBC.

Es fácil reconocer esta clases, ya que sus nombres empiezan con


el prefijo Odbc.

Ante esta situación, el programador debe elegir el proveedor que


mejor se adapta a las necesidades de su aplicación, eligiendo, siempre
que sea posible, un proveedor específico para la base de datos con la
interactúa.

Sin embargo, en muchas ocasiones no conoce dicha base de datos


o, lo que es más común, desea desarrollar una aplicación independiente
del tipo de base de datos donde se almacenará la información.

Copyright © Computer Aided Education, S.A. 3


Introducción a ADO .NET

ADO .NET introduce, desde la versión 2.0, lo que se conoce


como las “Factorías de proveedores”. Estas clases, que permiten una
programación independiente de la base de datos, se encuentran en el
espacio de nombres System.Data.Common.

Visto todo esto, hemos decidido empezar con un proveedor


específico, como es el que permite acceder a bases de datos SQL
Server y, después, comprobar cómo podríamos hacer lo mismo con las
factorías de proveedores, de forma que el código sea independiente de
la base de datos.

Empecemos, pues, conociendo las clases que encontraremos


en el espacio de nombres System.Data.SQlClient, aunque debemos
mencionar que son prácticamente las mismas que encontraremos en
los otros proveedores de datos.

3. ESTABLECER LA CONEXIÓN

Si repasamos el procedimiento que se sigue al acceder a una


base de datos, encontramos que el primer paso siempre es
establecer la conexión.

Para ello, se utiliza el objeto Connection, que si se trata de una


base de datos SQL Server, será del tipo SqlConnection.

En la figura anterior tenemos una pequeña aplicación que nos


servirá para comprobar cómo podemos extraer resultados de una base
de datos.

La aplicación es muy sencilla, ya que consta de un formulario en


el que aparece un cuadro de lista y dos botones.
4
Introducción a ADO .NET

La idea es que al pulsar en el botón Load, el cuadro de lista


muestre el conjunto de proveedores que está almacenado en la tabla
Providers de la base de datos VideoStore.

Aunque es un ejemplo sencillo, va a servirnos muy bien para


conocer los pasos que tenemos que dar y los objetos que intervienen.

Imports System.Data.SqlClient
.....

Private Sub btnLoad_Click(...) Handles btnLoad.Click


Dim connection As New SqlConnection()
connection.ConnectionString = "Data Source=.\SQLEXPRESS;" _
& "AttachDbFilename=C:\...\Documents\VideoStore.mdf;" _
& "Integrated Security=True;” _
& "User Instance=True"
connection.Open()

connection.Close()
End Sub

Como se ha comentado, tendremos que utilizar un objeto


SqlConnection para establecer la conexión con la base de datos. Esto
es el paso previo a cualquier acceso a la información almacenada.

Antes de ello, tendremos que importar el espacio de nombres


System.Data.SqlClient, ya que sólo se importa por defecto el espacio
System.Data.

Debemos indicar cómo se establecerá la conexión, es decir, los


detalles necesarios para ello. Esto se establece mediante la propiedad
ConnectionString del objeto Connection.

Lógicamente, para cada tipo de base de datos, la cadena de


conexión o ConnectionString puede ser distinta.

En la cadena de conexión indicaremos detalles como el servidor de


bases de datos al que queremos acceder, la base de datos en particular
y los detalles de autenticación (por ejemplo, el nombre de usuario y
contraseña).

La cadena de conexión del código anterior es adecuada para el


acceso a un archivo de base de datos SQL Server 2008 Express.

Copyright © Computer Aided Education, S.A. 5


Introducción a ADO .NET

Así, con la propiedad Data Source indicamos la instancia del


servidor a la que queremos acceder (el punto indica que el servidor
es local, es decir, que se trata del mismo equipo en el que estamos
desarrollando la aplicación); con AttachDbFilename indicamos el
archivo de base de datos (debemos indicar su ubicación); se utiliza
Integrated Security cuando la autenticación es Windows (y no del
propio servidor de bases de datos) y, finalmente, User Instance es un
requerimiento para acceder a la versión Express.

No importan demasiado estos detalles, ya que, como podremos


ver, utilizando Visual Studio las cadenas de conexión se generan
automáticamente.

Por otra parte, utilizaremos el método Open del objeto Connection


para abrir la conexión. A este respecto es importante recordar que
debemos abrir la conexión lo más tarde posible y cerrarla lo antes
posible.

Finalmente, cerraremos la conexión con su método Close. Es muy


importante hacerlo siempre.

El objeto Connection es sencillo, ya que se encarga únicamente


de negociar la conexión de nuestra aplicación con el servidor o motor
de base de datos. Una vez conseguida esa conexión, podremos acceder
a la información que nos interese.

4. EJECUTAR COMANDOS

E l segundo objeto que vamos a estudiar de ADO .NET es el


objeto Command, que permite ejecutar comandos SQL para
obtener datos de la base de datos o para modificarla.

Lógicamente, antes de ejecutar un comando SQL, habremos


abierto la conexión.

El código necesario lo puede ver en la página siguiente.

Como ocurre con la conexión, utilizamos una clase especializada


de comando para ejecutar comandos contra una base de datos SQL
Server. De ahí que hayamos utilizado la clase SqlCommand.

Tenemos que establecer dos propiedades fundamentalmente para


un comando: la conexión que debe utilizar y el propio comando SQL.
6
Introducción a ADO .NET

Private Sub btnLoad_Click(...) Handles btnLoad.Click


Dim connection As New SqlConnection()
connection.ConnectionString = "Data Source=.\SQLEXPRESS;" _
& "AttachDbFilename=C:\...\Documents\VideoStore.mdf;" _
& "Integrated Security=True;” _
& "User Instance=True"
connection.Open()
Dim command As New SqlCommand()
command.Connection = connection
command.CommandText = "SELECT * FROM Providers"
Dim reader As SqlDataReader
reader = command.ExecuteReader()
While reader.Read()
lstProviders.Items.Add(reader.Item("Name"))
End While
reader.Close()
connection.Close()
End Sub

Con la propiedad Connection del objeto Command especificamos


la conexión y con CommandText el comando o consulta SQL.

Claro está que estableciendo la consulta en CommandText no


hacemos otra cosa que preparar la ejecución del comando, incluyendo
el código SQL para ello. Deberemos utilizar uno de los métodos de la
clase Command para ejecutarlo. Por ejemplo, ya que queremos obtener
un listado de proveedores, el método adecuado es ExcecuteReader.

El método ExecuteReader devuelve el resultado de la ejecución


del comando en un objeto DataReader, que es el que realmente nos
permitirá acceder a la información.

El objeto Command realiza su operación a través de un método


Execute. Dispone de varios métodos de este tipo:

 ExecuteNonQuery: ejecuta una instrucción SQL contra la


base de datos y devuelve el número de registros afectados
por la misma. Es el método que se utiliza para efectuar
operaciones de modificación o actualización de la base de
datos.
 ExecuteScalar: ejecuta el comando y devuelve la primera
columna de la primera fila del resultado obtenido.
 ExecuteReader: ejecuta el comando y devuelve un objeto
DataReader con el resultado obtenido.
 ExecuteXMLReader: igual que el anterior, pero devuelve un
objeto de tipo XMLDataReader con el resultado obtenido.

Copyright © Computer Aided Education, S.A. 7


Introducción a ADO .NET

El objeto DataReader (SqlDataReader porque empleamos el


proveedor de datos para SQL Server) permite recorrer el resultado de
Cada vez que
se ejecuta el la ejecución del comando. Para ello, dispone del método Read.
método Read
del objeto Con la propiedad Item del DataReader estaremos accediendo al
DataReader
nos desplaza- registro completo de la tabla Providers. Si sólo deseamos uno de sus
mos al registro campos, podremos indicar su nombre entre paréntesis.
siguiente, sin
posibilidad
lstProviders.Items.Add(reader.Item("Name"))
de volver al
anterior (es
un objeto de Finalmente, cerraremos también el DataReader para liberar sus
sólo lectura y
recursos.
siempre hacia
delante).
Con esto estamos programando un escenario aplicando el enfoque
conectado. Fíjese:

1.- Abrimos la conexión con la base de datos.

connection.Open()

2.- Manipulamos los datos: en este caso obtenemos resultados


desde la base de datos.

While reader.Read()
lstProviders.Items.Add(reader.Item("Name"))
End While

3.- Y, finalmente, cerramos la conexión.

connection.Close()

Observe que la conexión se mantiene abierta durante la


manipulación de los datos a los que accedemos mediante el objeto
Command, es decir, mientras el método Read devuelve el valor
True.

Si este proceso fuera muy costoso, seguramente no sería una buena


idea aplicar este enfoque de acceso conectado a la base de datos.

En esta lección hemos conocido los principales objetos ADO


.NET, excepto el objeto DataSet, que nos va a permitir trabajar de
forma desconectada con la base de datos.

Así pues, tenemos una visión general del proceso, sabiendo que
elegiremos el proveedor de datos que mejor se adapte al origen de
datos al que se accede.

8
Introducción a ADO .NET

Como en este caso accedíamos a una base de datos SQL Server,


hemos elegido el proveedor .NET para SQL Server, cuyas clases
empiezan con el prefijo Sql.

Pero si se tratara de una base de datos Oracle, podríamos hacer lo


propio con las clases del espacio de nombres System.Data.OracleClient,
cuyas clases empiezan con el prefijo Oracle (OracleConnection,
OracleCommand, OracleDataReader, etc.).

Y si queremos desarrollar una aplicación independiente del origen


de datos, podremos utilizar las correspondientes clases del espacio de
nombres System.Data.Common, como tendremos oportunidad de
comprobar.

En las próximas lecciones ampliaremos todo esto, donde


presentaremos escenarios y ejemplos mucho más elaborados.

Además, podremos comprobar cómo Visual Studio proporciona


muchas herramientas que nos facilitarán el desarrollo de aplicaciones
con acceso a datos.

Copyright © Computer Aided Education, S.A. 9

También podría gustarte