Escolar Documentos
Profissional Documentos
Cultura Documentos
FACULTAD DE INGENIERÍA
INGENIERÍA ELÉCTRICA
Programación en
Visual Basic (VB 2010)
Anexo
Acceso a Base de Datos
ADO.NET
1
Información general acerca de ADO.NET
ADO.NET proporciona acceso coherente a orígenes de datos como Microsoft SQL Server y XML, así como a
orígenes de datos expuestos mediante OLE DB (Microsoft Access) y ODBC. Las aplicaciones para usuarios que
comparten datos pueden utilizar ADO.NET para conectar a estos orígenes de datos y recuperar, manipular y
actualizar los datos contenidos.
ADO.NET separa el acceso a datos de la manipulación de datos y crea componentes discretos que se pueden
utilizar por separado o conjuntamente. ADO.NET incluye proveedores de datos de .NET Framework para
conectarse a una base de datos, ejecutar comandos y recuperar resultados. Los resultados se procesan
directamente o se colocan en un objeto DataSet de ADO.NET con el fin de exponerlos al usuario para un propósito
específico, combinados con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El objeto
DataSet de ADO.NET también puede utilizarse independientemente de un proveedor de datos de .NET Framework
para administrar datos que son locales de la aplicación o que proceden de un origen XML.
El diseño de ADO.NET satisface muchos de los requisitos del modelo de desarrollo de aplicaciones de hoy en día.
Al mismo tiempo, el modelo de programación permanece similar a ADO, en la medida de lo posible, de manera
que los actuales programadores de ADO no tengan que comenzar desde el principio. ADO.NET forma parte
intrínseca de .NET Framework y al programador de ADO le sigue resultando familiar.
ADO.NET también coexiste con ADO. Aunque la mayoría de las nuevas aplicaciones basadas en .NET se escribirán
mediante ADO.NET, ADO sigue estando disponible para el programador de .NET a través de los servicios de
interoperabilidad COM de .NET.
Para obtener más información sobre las diferencias entre ADO y ADO.NET, vea ADO.NET for the ADO Programmer.
La idea de trabajar con un conjunto de datos sin mantener una conexión abierta se ha convertido en un objetivo
del modelo de programación. ADO.NET proporciona compatibilidad de primera clase con el entorno de
programación n-tier sin mantener una conexión abierta para el que están escritas muchas aplicaciones nuevas.
La solución de ADO.NET para la programación n-tier es el DataSet.
Para obtener más información sobre DataSets, vea Utilizar DataSets en ADO.NET.
2
XML y el acceso a datos están estrechamente relacionados. XML trata la codificación de datos y el acceso a datos
trata cada vez más sobre XML. .NET Framework no sólo admite los estándares Web, sino que está basado
totalmente en ellos.
La compatibilidad con XML está integrada en los cimientos de ADO.NET. Las clases de XML incluidas en .NET
Framework y ADO.NET forman parte de la misma arquitectura: están integradas en muchos niveles. Ya no es
necesario elegir entre el conjunto de servicios de acceso a datos y los correspondientes servicios de XML; la
capacidad para cruzar de uno a otro es inherente al diseño de ambos.
Arquitectura de ADO.NET
Tradicionalmente, el procesamiento de datos ha dependido principalmente de un modelo de dos niveles basado
en una conexión. A medida que el procesamiento de datos utiliza cada vez más arquitecturas de varios niveles,
los programadores están pasando a un enfoque sin conexión con el fin de proporcionar una escalabilidad mejor
para sus aplicaciones.
Componentes de ADO.NET
Existen dos componentes de ADO.NET que se pueden utilizar para obtener acceso a datos y manipularlos:
• El DataSet
DataSet
El DataSet de ADO.NET está expresamente diseñado para el acceso a datos independientemente del origen de
datos. Como resultado, se puede utilizar con múltiples y distintos orígenes de datos, con datos XML o para
administrar datos locales de la aplicación. El DataSet contiene una colección de uno o más objetos DataTable
formados por filas y columnas de datos, así como información sobre claves principales, claves externas,
restricciones y relaciones relativa a los datos incluidos en los objetos DataTable.
En el diagrama siguiente se ilustra la relación entre un proveedor de datos de .NET Framework y un DataSet.
Arquitectura de ADO.NET
3
Elegir un DataReader o un DataSet
A la hora de decidir si su aplicación debe utilizar un DataReader o un DataSet debe tener en cuenta el tipo de
funcionalidad que su aplicación requiere. Use un DataSet para hacer lo siguiente:
• Almacene datos en la memoria caché de la aplicación para poder manipularlos. Si solamente necesita leer
los resultados de una consulta, el DataReader es la mejor elección.
• Utilizar datos de forma remota entre un nivel y otro o desde un servicio Web XML.
• Interactuar con datos dinámicamente, por ejemplo para enlazar con un control de formularios Windows
Forms o para combinar y relacionar datos procedentes de varios orígenes.
• Realizar procesamientos exhaustivos de datos sin necesidad de tener una conexión abierta con el origen de
datos, lo que libera la conexión para que la utilicen otros clientes.
Un proveedor de datos de .NET Framework sirve para conectarse a una base de datos, ejecutar comandos y
recuperar resultados. Esos resultados se procesan directamente o se colocan en un DataSet de ADO.NET con el
fin de exponerlos al usuario para un propósito específico, combinarlos con datos de varios orígenes o utilizarlos
de forma remota entre niveles. Los proveedores de datos de .NET Framework son ligeros, de manera que crean
un nivel mínimo entre el origen de datos y su código, con lo que aumenta el rendimiento sin sacrificar la
funcionalidad.
En la tabla siguiente se muestran los proveedores de datos de .NET Framework que se incluyen en .NET
Framework.
4
Proveedor de datos de .NET
Framework Descripción
Proveedor de datos de .NET Proporciona acceso de datos para Microsoft SQL Server versión 7.0 o posterior. Utiliza el espacio de
Framework para SQL Server nombres System.Data.SqlClient.
Proveedor de datos de .NET Para orígenes de datos que se exponen mediante OLE DB. Utiliza el espacio de nombres
Framework para OLE DB System.Data.OleDb.
Proveedor de datos de .NET Para orígenes de datos que se exponen mediante ODBC. Utiliza el espacio de nombres System.Data.Odbc.
Framework para ODBC
Proveedor de datos de .NET Para orígenes de datos de Oracle. El proveedor de datos de .NET Framework para Oracle es compatible
Framework para Oracle con la versión 8.1.7 y posteriores del software de cliente de Oracle y utiliza el espacio de nombres
System.Data.OracleClient.
Nota
En la tabla siguiente se describen los cuatro objetos centrales que constituyen un proveedor de datos de .NET
Framework.
Objeto Descripción
Connection Establece una conexión a un origen de datos determinado. La clase base para todos los objetos Connection es DbConnection.
Command Ejecuta un comando en un origen de datos. Expone Parameters y puede ejecutarse en el ámbito de un objeto Transaction
de Connection. La clase base para todos los objetos Command es DbCommand.
DataReader Lee una secuencia de datos de sólo avance y sólo lectura desde un origen de datos. La clase base para todos los objetos
DataReader es DbDataReader.
DataAdapter Llena un DataSet y realiza las actualizaciones necesarias en el origen de datos. La clase base para todos los objetos
DataAdapter es DbDataAdapter.
DataSet de ADO.NET
El objeto DataSet es esencial para la compatibilidad con situaciones de datos distribuidos desconectados con
ADO.NET. El DataSet es una representación de datos residente en memoria que proporciona un modelo de
programación relacional coherente con independencia del origen de datos. Se puede utilizar con muchos y
distintos orígenes de datos, con datos XML o para administrar datos locales de la aplicación. El DataSet
representa un conjunto completo de datos que incluye tablas relacionadas y restricciones, así como relaciones
entre las tablas. En la siguiente ilustración se muestra el modelo de objetos DataSet.
5
Los métodos y objetos de un DataSet concuerdan con los del modelo de base de datos relacional.
El DataSet también puede mantener y recargar su contenido como XML y su esquema como esquema de lenguaje
de definición de esquemas XML (XSD).
Cada proveedor de datos de .NET Framework incluido en .NET Framework cuenta con un objeto Connection: el
proveedor de datos de .NET Framework para OLE DB incluye un objeto OleDbConnection, el proveedor de datos
de .NET Framework para SQL Server incluye un objeto SqlConnection, el proveedor de datos de .NET Framework
para ODBC incluye un objeto OdbcConnection y el proveedor de datos de .NET Framework para Oracle incluye un
objeto OracleConnection.
6
Cada proveedor de datos de .NET Framework incluido en .NET Framework cuenta con un objeto DataAdapter:
el proveedor de datos de .NET Framework para OLE DB incluye un objeto OleDbDataAdapter, el proveedor de
datos de .NET Framework para SQL Server incluye un objeto SqlDataAdapter, el proveedor de datos de .NET
Framework para ODBC incluye un objeto OdbcDataAdapter y el proveedor de datos de .NET Framework para
Oracle incluye un objeto OracleDataAdapter.
La propiedad SelectCommand del DataAdapter es un objeto Command que recupera datos del origen de
datos. Las propiedades InsertCommand, UpdateCommand y DeleteCommand de DataAdapter son objetos
Command que permiten administrar las actualizaciones de los datos en el origen de datos para reflejar las
modificaciones efectuadas en el DataSet. Estas propiedades se describen más detalladamente en Actualizar
orígenes de datos con DataAdapters.
El método Fill del DataAdapter se usa para llenar un DataSet con los resultados de la propiedad
SelectCommand del DataAdapter. El método Fill acepta como argumentos un DataSet que se debe llenar y
un objeto DataTable, o su nombre, que se debe llenar con las filas que devuelve SelectCommand.
El método Fill utiliza el objeto DataReader de forma implícita para devolver los nombres y tipos de columna
utilizados para crear las tablas de DataSet, así como los datos para llenar las filas de las tablas de DataSet. Las
tablas y columnas sólo se crean cuando no existen; en caso contrario, Fill utiliza el esquema existente de
DataSet. Los tipos de columna se crean como tipos de .NET Framework conforme se indica en las tablas que
aparecen en Asignar los tipos de datos del proveedor de datos de .NET para los tipos de datos de .NET Framework.
No se crean claves principales a menos que existan en el origen de datos y se haya dado el valor
MissingSchemaAction.AddWithKey a DataAdapter.MissingSchemaAction. Si el
método Fill determina que una tabla tiene clave principal, sobrescribe los datos del DataSet con los del origen
de datos en aquellas filas en las que los valores de la columna de clave principal coincidan con los de la fila que
devuelve el origen de datos. Si no se detecta ninguna clave principal, los datos se anexan a las tablas del DataSet.
Fill utiliza cualquier asignación que pueda existir al llenar el DataSet (vea Configurar las asignaciones de
DataTable y DataColumn).
Nota
Si SelectCommand devuelve los resultados de una combinación externa (OUTER JOIN), DataAdapter no establecerá un valor
PrimaryKey para la tabla DataTable resultante. Es necesario definir PrimaryKey para asegurarse de que las filas duplicadas se resuelven
correctamente. Para obtener más información, vea Definir una clave principal para una tabla.
En el ejemplo de código siguiente se crea una instancia de un SqlDataAdapter que utiliza un objeto SqlConnection
a la base de datos Northwind de Microsoft SQL Server y llena una DataTable en un DataSet con la lista de
clientes. La instrucción SQL y los argumentos SqlConnection pasados al constructor SqlDataAdapter se utilizan
para crear la propiedad SelectCommand del SqlDataAdapter.
Ejemplo
7
Dim queryString As String = _
"SELECT CustomerID, CompanyName FROM dbo.Customers"
Al actualizar una fila en el origen de datos, se llama a la instrucción UPDATE que utiliza un identificador único
para identificar la fila de la tabla que debe actualizarse. El identificador único suele ser el valor del campo de
clave principal. La instrucción UPDATE utiliza parámetros que contienen el identificador único y las columnas y
valores que se van a actualizar, como muestra la siguiente instrucción Transact-SQL.
8
Agregar una fuente de datos desde Visual Studio 2010
Mostrar registros:
Me.ProductosTableAdapter.Fill(Me.NegocioDataSet.Productos)
Sería como un SELECT de SQL
9
DataGridView.Update()
Sería como un INSERT de SQL
Modificar un registro:
Dim Posicion as Byte
Posicion = txtPosicion.text – 1
Me.NegocioDataSet.Productos.Rows(Posicion).Item(“Precio”) = NuevoPrecio
Me.ProductostableAdapter.Update(Me.NegocioDataSet)
DataGridView.Update()
Sería como un UPDATE de SQL
Eliminar un registro:
Dim Posicion as Byte
Posicion = txtPosicion.text - 1
Me.NegocioDataSet.Productos.Rows(Posicion).Delete()
Me.ProductostableAdapter.Update(Me.NegocioDataSet)
DataGridView.Update()
Sería como un DELETE de SQL
10