+ All Categories
Home > Documents > tema11_bd2008

tema11_bd2008

Date post: 18-Jul-2015
Category:
Upload: jazquij
View: 194 times
Download: 0 times
Share this document with a friend
Popular Tags:

of 30

Transcript

Bases de Datos : ADO.netBases de Datos : ADO.net ............................................................................................................... 1 1. Bases de Datos : ADO.net ........................................................................................................... 1 1.2 Arquitectura de ADO.NET.................................................................................................... 2 2 Conectarse a datos ........................................................................................................................ 4 2.2 Asistente para la Configuracin de orgenes de datos. .......................................................... 4 2.2 Crear una conexin por cdigo: ............................................................................................ 6 3. Objetos comunes de ADO.NET .................................................................................................. 9 3.1. Dataset. ................................................................................................................................. 9 3.2. TableAdapter, Bindingsource y BindingNavigator. ........................................................... 11 4. Validar datos ............................................................................................................................. 14 5. Guardar datos ............................................................................................................................ 14 6. Ejercicios resueltos. ................................................................................................................... 14

1. Bases de Datos : ADO.netLa arquitectura de datos subyacente que se utiliza para crear aplicaciones en Visual Studio es ADO.NET. Independientemente de lo que haga con los datos, hay ciertos conceptos fundamentales que debe entender. Es posible que nunca utilice ciertos detalles sobre manipulacin de datos, por ejemplo, tal vez nunca cree una base de datos mediante programacin, pero es muy til comprender los conceptos bsicos de ADO.NET, al igual que las herramientas de datos (asistentes y diseadores) disponibles en Visual Studio. La tarea general de trabajar con datos en una aplicacin se puede dividir en varios procesos de nivel superior. Por ejemplo, antes de mostrar los datos a un usuario en un formulario, debe conectarse a un origen de datos (posiblemente una base de datos) y, a continuacin, obtener los datos que desea mostrar. Una vez incluidos estos datos en la aplicacin, necesitar almacenarlos temporalmente en alguna parte, por ejemplo en un objeto DataSet. Una aplicacin de datos tpica utilizar la mayora de los procesos que se ilustran en el diagrama siguiente: El ciclo de datos

1

1.2 Arquitectura de ADO.NETEl concepto ms importante que hay que tener claro sobre ADO.NET es su modo de funcionar, que se revela claramente al analizar su arquitectura:

Figura 1.3.- Arquitectura de ADO.NET

Existen dos capas fundamentales dentro de su arquitectura: la capa conectada y la desconectada.

Capa conectadaLa primera de ellas contiene objetos especializados en la conexin con los orgenes de datos. As, la clase genrica Connection se utiliza para establecer conexiones a los orgenes de datos. La clase Command se encarga de enviar comandos de toda ndole al origen de datos. Por fin la clase DataReader est especializada en leer los resultados de los comandos mientras se permanece conectado al origen de datos. La clase DataAdapter hace uso de las tres anteriores para actuar de puente entre la capa conectada y la desconectada. Estas clases son abstractas, es decir, no tienen una implementacin real de la que se pueda hacer uso directamente. Es en este punto en donde entran en juego los proveedores de datos. Cada origen de datos tiene un modo especial de comunicarse con los programas que los utilizan, adems de otras particularidades que se deben contemplar. Un proveedor de datos de ADO.NET es una implementacin concreta de las clases conectadas abstractas que hemos visto, que hereda de stas y que tiene en cuenta ya todas las particularidades del origen de datos en cuestin. As, por ejemplo, las clases especficas para acceder a SQL Server se llaman SqlConnection, SqlCommand, SqlDataReader y SqlDataAdapter y se encuentran bajo el espacio de nombres 2

System.Data.SqlClient. Es decir, al contrario que en ADO clsico no hay una nica clase Connection o Command que se use en cada caso, si no que existen clases especializadas para conectarse y recuperar informacin de cada tipo de origen de datos.Nota: El hecho de utilizar clases concretas para acceso a las fuentes de datos no significa que no sea posible escribir cdigo independiente del origen de datos. Todo lo contrario. La plataforma .NET ofrece grandes facilidades de escritura de cdigo genrico basadas en el uso de herencia e implementacin de interfaces. De hecho la versin 2.0 de .NET ofrece grandes novedades especficamente en este mbito.

Existen proveedores nativos, que son los que se comunican directamente con el origen de datos (por ejemplo el de SQL Server o el de Oracle), y proveedores "puente", que se utilizan para acceder a travs de ODBC u OLEDB cuando no existe un proveedor nativo para un determinado origen de datos.Nota: Estos proveedores puente, si bien muy tiles en determinadas circunstancias, ofrecen un rendimiento menor debido a la capa intermedia que estn utilizando (ODBC u OLEDB). Un programador novel puede sentir la tentacin de utilizar siempre el proveedor puente para OLEDB y as escribir cdigo compatible con diversos gestores de datos de forma muy sencilla. Se trata de un error y siempre que sea posible es mejor utilizar un proveedor nativo.

Capa desconectadaUna vez que ya se han recuperado los datos desde cualquier origen de datos que requiera una conexin sta ya no es necesaria. Sin embargo sigue siendo necesario trabajar con los datos obtenidos de una manera flexible. Es aqu cuando la capa de datos desconectada entra en juego. Adems, en muchas ocasiones es necesario tratar con datos que no han sido obtenidos desde un origen de datos relacional con el que se requiera una conexin. A veces nicamente necesitamos un almacn de datos temporal pero que ofrezca caractersticas avanzadas de gestin y acceso a la informacin. Por otra parte las conexiones con las bases de datos son uno de los recursos ms escasos con los que contamos al desarrollar. Su mala utilizacin es la causa ms frecuente de cuellos de botella en las aplicaciones y de que stas no escalen como es debido. Esta afirmacin es especialmente importante en las aplicaciones Web en las que se pueden recibir muchas solicitudes simultneas de cualquier parte del mundo. Finalmente otro motivo por el que es importante el uso de los datos desconectado de su origen es la transferencia de informacin entre capas de una aplicacin. stas pueden encontrarse distribuidas por diferentes equipos, e incluso en diferentes lugares del mundo gracias a Internet. Por ello es necesario disponer de algn modo genrico y eficiente de poder transportar los datos entre diferentes lugares, utilizarlos en cualquiera de ellos y posteriormente tener la capacidad de conciliar los cambios realizados sobre ellos con el origen de datos del que proceden. Todo esto y mucho ms es lo que nos otorga el uso de los objetos DataSet. Es obvio que no se trata de tareas triviales, pero los objetos DataSet estn pensados y diseados con estos objetivos en mente. Como podremos comprobar ms adelante en este curso es bastante sencillo conseguir

3

estas funcionalidades tan avanzadas y algunas otras simplemente usando de manera adecuada este tipo de objetos.Nota: Otra interesante caracterstica de los DataSet es que permiten gestionar simultneamente diversas tablas (relaciones) de datos, cada una de un origen diferente si es necesario, teniendo en cuenta las restricciones y las relaciones existentes entre ellas.

Los DataSet, como cualquier otra clase no sellada de .NET, se pueden extender mediante herencia. Ello facilita una tcnica avanzada que consiste en crear tipos nuevos de DataSet especializados en la gestin de una informacin concreta (por ejemplo un conjunto de tablas relacionadas). Estas nuevas tipos clases se denominan genricamente DataSet Tipados, y permiten el acceso mucho ms cmodo a los datos que representan, verificando reglas de negocio, y validaciones de tipos de datos ms estrictas.

2 Conectarse a datosPara llevar datos a la aplicacin (y devolver los cambios al origen de datos), debe establecerse algn tipo de comunicacin bidireccional. Por lo general, esta comunicacin bidireccional es controlada por un objeto de conexin (por ejemplo, una SqlConnection) que est configurado con una cadena de conexin, o sea, la informacin que necesita para conectarse al origen de datos.

2.2 Asistente para la Configuracin de orgenes de datos.Visual Studio proporciona herramientas para conectar la aplicacin a datos de muchos orgenes diferentes, como bases de datos, servicios Web y objetos. Si se utilizan herramientas de diseo de datos en Visual Studio, a menudo no ser necesario crear de forma explcita un objeto de conexin para el formulario o componente. El objeto de conexin se crea normalmente como resultado de la finalizacin de uno de los asistentes de datos o al arrastrar objetos de datos al formulario. Para conectar la aplicacin a los datos de una base de datos, servicio Web u objeto, ejecute el Asistente para la configuracin de orgenes de datos seleccionando Agregar nuevo origen de datos en la Ventana Orgenes de Datos.

4

5

Seleccionar los Objetos de la BD y Finalizar con la conexin.

2.2 Crear una conexin por cdigo:OBJETOS Y PROCESOS DE CONEXIN : 1.- OBJETOS DE CONEXIN: System.Data.SqlClient.SqlConnection System.Data.ODBC.ODBCConnection System.Data.OleDBConnection.OLEDBConnection System.Data.OracleClient.OracleConnection 2.- Creacin de un Objeto de la clase OleDbConnection: Dim cnADONetConnection As New OleDb. OleDbConnection() 3.- Creacin de una Variable de Mdulo para almacenar la conexin: OleDB: Private g_conexion As New OleDb. OleDbConnection() Oracle: Dim instance As OracleConnection 4.- Origen de datos a donde queremos acceder. Tenemos que usar la propiedad ConnectionString del Objeto g_conexion Provider Data Source Iser ID Password DRIVER SERVER (Tipo de BD JET, SQL.. ) (Nombre de Usuario) (Nombre del controlador de la BD) (Nombre de la Red donde se encuentra el Servidor) 6

a) Definicin de la cadena de conexin: g_conexion. ConnectionString = Provider = Microsoft.Jet.OLDB.4.0;Data Source = c:\...\...\...NombreBD.mdb Para oracle:Dim instance As OracleConnection

b) Establecer Conexin a travs del Mtodo Open() : g_conexion.Open() c) Cerrar una Conexin con una Base de Datos. Seleccionar el Evento FormClosed y escribir como cdigo: g_conexion.Close() g_conexion.Dispose() PASOS A SEGUIR PARA CONECTAR CON UNA BASE DE DATOS a) Crear Base de Datos en Access. b) En el Proyecto de Visual Basic: 1.- Ejecutar el comando Proyecto / Propiedades Nombre Proyecto. - Hacer Clic sobre Referencias. En la zona inferior de esta Ficha activar las casillas: System.Data (suele estar activa) System.XML 2.- Creacin de una Variable de mdulo para almacenar la conexin. Public Class frmMain Private g_conexion As New OleDb.OleDbConnection 3.- Indicar a qu origen de datos queremos acceder. Esto se hace a travs de la Propiedad ConnectionString que contiene la informacin de la conexin, como el nombre del proveedor, el nombre del usuario y la contrasea de acceso. Para especificar varios parmetros separarlos con punto y coma. Alguno de los parmetros que acepta ConnectionString son: Provider Nombre del Proveedor de datos (JET, SQL) Data Source Origen de la Base de Datos. User ID Usuario autorizado a acceder a la B.D. Password Contrasea asociada al usuario. DRIVER Controlador de la Base de Datos No es obligatorio si se especifica un DSN. SERVER Nombre de la Red donde se encuentra El Servidor de la Base de Datos.Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load g_conexion.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Ramon\AdoNet\BDTelefonos.mdb" End Sub 4.- Establecer conexin con el Mtodo Open del Objeto de conexin.

7

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load g_conexion.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Ramon\AdoNet\BDTelefonos.mdb" g_conexion.Open() End Sub

d) Cerrar conexin con la Base de Datos. Para cerrar la conexin se utiliza el Mtodo Close(), y si se quiere el Mtodo Dispose() para dejar disponibles los recursos que ha usado la Base de Datos. Como ejemplo, una de las opciones donde cerrar una Base de Datos, es cuando se cierra el Formulario:

Private Sub frmMain_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed g_conexion.Close() g_conexion.Dispose() End Sub Cierra Libera recursos

Si trabaja con TableAdapters, DataAdapters o DataCommands, no tendr que abrir ni cerrar conexiones explcitamente. Cuando se llama a un mtodo de estos objetos (por ejemplo, a los mtodos Fill o Update de un adaptador), el mtodo comprueba si ya est abierta la conexin. Si no es as, el adaptador abre la conexin, ejecuta su lgica y cierra de nuevo la conexin. Los mtodos como Fill slo abren y cierran automticamente la conexin si no est ya abierta. Si la conexin est abierta, los mtodos la utilizan pero no la cierran. Esto le proporciona la flexibilidad necesaria para abrir y cerrar comandos de datos. Puede hacer esto si tiene mltiples adaptadores que compartan una conexin. En este caso, hacer que cada adaptador abra y cierre la conexin cuando se llame a su mtodo Fill no resulta eficiente. En lugar de hacerlo as, puede abrir la conexin, llamar al mtodo Fill de cada adaptador y, cuando termine, cerrar la conexin.Qu es un entorno conectado?

Un entorno conectado es aquel en que los usuarios estn conectados continuamente a una fuente de datos Ventajas: El entorno es ms fcil de mantener La concurrencia se controla ms fcilmente Es ms probable que los datos estn ms actualizados que en otros escenarios Inconvenientes: Debe existir una conexin de red constante Escalabilidad limitada

8

Qu es un entorno desconectado? Un entorno desconectado es aquel en el que los datos pueden modificarse de forma independiente y los cambios se escriben posteriormente en la base de datos Ventajas: Las conexiones se utilizan durante el menor tiempo posible, permitiendo que menos conexiones den servicio a ms usuarios Un entorno desconectado mejora la escalabilidad y el rendimiento de las aplicaciones Inconvenientes: Los datos no siempre estn actualizados Pueden producirse conflictos de cambios que deben solucionarse

3. Objetos comunes de ADO.NETBase de datos Gestiona la conexin a una base de datos Ejecuta un comando de consulta en la base de datos

Connection CommandTableAdapter DataSet3.1. Dataset.

Intercambia datos entre el conjunto de datos y la base de datos Almacena datos en un cach distinto de la base de datos Proporciona acceso eficaz a un flujo de datos de slo lectura

DataReader

Diseado para acceder a datos con independencia de la fuente de datos. En consecuencia, podemos utilizarlo con varias y diferentes fuentes de datos,. El objeto DataSet contiene una coleccin de uno o ms objetos DataTable formados por filas y columnas de datos, adems de clave principal, clave fornea, restricciones e informacin de la relacin sobre los datos en los objetos DataTable.

DataSet est compuesto por una coleccin de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. Tambin se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Los objetos DataTable contienen los datos, mientras que DataRelationCollection permite desplazarse por la jerarqua de la tabla. Las tablas estn incluidas en un DataTableCollection al que se obtiene acceso a travs de la propiedad Tables. Al obtener acceso a los objetos DataTable, hay que tener en cuenta que stos distinguen entre maysculas y minsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina "mydatatable" y otro "Mydatatable", la cadena 9

que se utilice para buscar una de las tablas se considerar que distingue entre maysculas y minsculas. Sin embargo, si existe "mydatatable" pero no existe "Mydatatable", se considerar que la cadena de bsqueda no distingue entre maysculas y minsculas. Para obtener ms informacin sobre el trabajo con los objetos DataTable, vea Crear DataTable. Un DataSet puede leer y escribir datos y esquemas como documentos XML. Los datos y esquemas pueden transportarse, a continuacin, a travs de HTTP y cualquier aplicacin puede utilizarlos en cualquier plataforma que sea compatible con XML. Los esquemas se pueden guardar como esquemas XML mediante el mtodo WriteXmlSchema, y tanto los esquemas como los datos se pueden guardar mediante el mtodo WriteXml. Hay que utilizar el mtodo ReadXml para leer un documento XML que incluya esquema y datos. En una implementacin normal de varios niveles, los pasos de creacin y actualizacin de un DataSet y, a su vez, de actualizacin de los datos originales, son los siguientes:

1. Construir y llenar cada DataTable de un DataSet con datos desde un origen de datos mediante TableAdapter. 2. Cambiar los datos de los objetos DataTable individuales mediante la adicin, actualizacin o eliminacin de objetos DataRow. 3. Llamar al mtodo GetChanges para crear un segundo DataSet que slo incorpore los cambios realizados en los datos. 4. Llame al mtodo Update de TableAdapter, pasando el segundo DataSet como argumento. 5. Se invoca el mtodo Merge para combinar los cambios del segundo DataSet con el primero. 6. Invocar al mtodo AcceptChanges de DataSet. O bien, invocar al mtodo RejectChanges para cancelar los cambios. Mtodos pblicos: Nombre AcceptChanges BeginInit Descripcin Confirma todos los cambios realizados en este DataSet desde que se ha cargado o desde la ltima vez que se ha llamado a AcceptChanges. Activa la inicializacin de un objeto DataSet que se emplea en un formulario o que utiliza otro componente. La inicializacin se produce en tiempo de ejecucin. Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas. Copia la estructura de DataSet, incluidos todos los esquemas, relaciones y restricciones de DataTable. No copia ningn dato. Copia la estructura y los datos para este objeto DataSet. Sobrecargado. Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde la ltima vez que se carg o desde que se llam a AcceptChanges.

Clear Clone Copy GetChanges

10

GetHashCode

Sirve como funcin hash para un tipo concreto. GetHashCode es apropiado para su utilizacin en algoritmos de hash y en estructuras de datos como las tablas hash. (Se hereda de Object). Rellena un objeto de informacin de serializacin con los datos necesarios para serializar la clase DataSet. Obtiene el implementador de IServiceProvider. (Se hereda de MarshalByValueComponent). Sobrecargado. Obtiene un valor que indica si DataSet presenta cambios, incluyendo filas nuevas, eliminadas o modificadas. Sobrecargado. Rellena un objeto DataSet con valores de un origen de datos utilizando la interfaz IDataReader proporcionada. Sobrecargado. Combina el objeto DataSet, el objeto DataTable o la matriz de objetos DataRow que se especifique en el objeto DataSet o DataTable actual. Deshace todos los cambios realizados en el DataSet desde que se ha creado o desde que se ha llamado por ltima vez a DataSet.AcceptChanges. Restablece el estado original del objeto DataSet. Las subclases deben reemplazar a Reset para restaurar el estado original de un DataSet. Devuelve una String que contiene el nombre de la clase Component si la hay. Este mtodo no debe reemplazarse. (Se hereda de MarshalByValueComponent).

GetObjectData GetService HasChanges Load Merge

RejectChanges

Reset ToString

3.2. TableAdapter, Bindingsource y BindingNavigator.El diagrama siguiente muestra el flujo estndar de operaciones al conectarse a datos ejecutando una consulta TableAdapter para recopilar y mostrar datos en un formulario de una aplicacin para Windows.

11

.BindingSource El componente BindingSource se utiliza para dos fines. En primer lugar, simplifica el enlace de datos de los controles de un formulario proporcionando una capa de direccionamiento indirecto, proporcionando administracin de moneda, notificacin de cambios y otros servicios. Esto se consigue adjuntando el componente BindingSource al origen de datos y, a continuacin, enlazando los controles del formulario al componente BindingSource. Toda la interaccin adicional con los datos, incluyendo la exploracin, ordenacin, filtrado y actualizacin, se realiza mediante llamadas al componente BindingSource. Propiedades: DataMember Obtiene o establece la lista concreta del origen de datos a la que est enlazado el conector en ese momento. DataSource Obtiene o establece el origen de datos con el que est enlazado el conector. Filter Obtiene o establece la expresin utilizada para filtrar las filas que se deben mostrar. SuspendBinding Suspende el enlace a datos para impedir que los cambios actualicen el origen de datos enlazado. Eventos: AddingNew Se produce antes de que se agregue un elemento a la lista subyacente. BindingComplete Se produce cuando todos los clientes se han enlazado a este BindingSource. DataError Aparece cuando el BindingSource controla en modo silencioso una excepcin relacionada con la moneda. DataMemberChanged Se produce cuando cambia el valor de la propiedad DataMember. 12

DataSourceChanged Se produce cuando cambia el valor de la propiedad DataSource. BimdingNavigator Representa la interfaz de usuario de exploracin y manipulacin para los controles de un formulario que estn enlazados a datos. Propiedades: BindingContext Obtiene o establece el contexto de enlace para ToolStrip.(Se hereda de ToolStrip). BindingSource Obtiene o establece el componente System.Windows.Forms.BindingSource que es el origen de datos. Bottom Obtiene la distancia, en pxeles, que existe entre el borde inferior del control y el borde superior del rea cliente de su contenedor.(Se hereda de Control). Bounds Obtiene o establece el tamao y la ubicacin del control incluyendo sus elementos no cliente, en pxeles, con respecto al control primario.(Se hereda de Control). DataBindings Obtiene los enlaces de datos del control.(Se hereda de Control). Mtodos: AddStandardItems Agrega el conjunto estndar de elementos de desplazamiento al control BindingNavigator. BeginInit Deshabilita la actualizacin de los controles ToolStripItem de BindingNavigator durante la inicializacin del componente. BeginInvoke Sobrecargado. Ejecuta un delegado de forma asincrnica en el subproceso donde se cre el identificador subyacente del control. (Se hereda de Control). BringToFront Coloca el control al principio del orden Z. (Se hereda de Control). Contains Obtiene un valor que indica si el control especificado es un control secundario del control. (Se hereda de Control). CreateControl Obliga a que se cree el control, incluidos el identificador y los controles secundarios. (Se hereda de Control). Dispose Sobrecargado. Libera todos los recursos utilizados por BindingNavigator. BindingNavigator despus de que haya finalizado la inicializacin del componente. Tableadapter. Los TableAdapters comunican la aplicacin con una base de datos. Ms especficamente, un TableAdapter se conecta con una base de datos, ejecuta consultas o procedimientos almacenados, y devuelve una nueva tabla de datos rellena con los datos devueltos o rellena una DataTable existente con los datos devueltos. Los TableAdapters tambin se utilizan para devolver los datos actualizados desde la aplicacin a la base de datos. Los usuarios de versiones anteriores de Visual Studio pueden pensar en un TableAdapter como un DataAdapter que lleva integrado un objeto de conexin y la capacidad de contener varias consultas. Cada consulta agregada a un TableAdapter se expone como un mtodo pblico al que se llama simplemente como a cualquier otro mtodo o funcin de un objeto. Adems de la funcionalidad estndar del control DataAdapter, los objetos TableAdapter proporcionan mtodos con tipo adicionales que encapsulan consultas que comparten un esquema 13

comn con el control DataTable con tipo asociado. Dicho de otra forma, puede tener tantas consultas como desee en un TableAdapter, siempre y cuando devuelvan datos que cumplan el mismo esquema A continuacin se muestran los mtodos y propiedades de TableAdapter ms utilizados: MiembroTableAdapter.Fill TableAdapter.Update TableAdapter.GetData TableAdapter.Insert TableAdapter.ClearBeforeFill

Descripcin Rellena la tabla de datos asociada del TableAdapter con los resultados del comando SELECT del TableAdapter.. Devuelve los cambios a la base de datos. Devuelve una nueva DataTable rellena con datos. Crea una nueva fila en la tabla de datos.. Determina si se vaca una tabla de datos antes de llamar a uno de los mtodos Fill.

4. Validar datosAl realizar cambios en los datos, es posible que desee comprobar los cambios antes de permitir que los valores sean aceptados de regreso en la base de datos o que stos se escriban en ella. Validacin es el nombre del proceso de comprobar que estos nuevos valores son aceptables para los requisitos de la aplicacin. Puede comprobar los valores de la aplicacin a medida que los modifica.

5. Guardar datosDespus de realizar los cambios en la aplicacin (y validarlos), es posible que desee enviar los cambios a la base de datos. Si est utilizando conjuntos de datos y un modelo de datos desconectado, debera comprobar si existen infracciones de concurrencia. (Este trmino se refiere a una situacin en la que los datos de una base de datos se han modificado desde que se cargaron originalmente en la aplicacin y ahora contiene valores ms recientes que los de la aplicacin). Tambin es posible que desee actualizar varias tablas al mismo tiempo, en cuyo caso puede utilizar una transaccin.

6. Ejercicios resueltos.Ejercicio 1: Bases de datos con VB.net 2008 (arrastrando sobre formulario)

14

1. Agregar origen de datos

2. Seleccionar las tablas y el tipo de control para cada campo de la Tabla.

15

3. Arrastrar cada tabla que se desee sobre el Formulario

4. Aparecen los siguientes Objetos:

16

DataSet

Diseado para acceder a datos con independencia de la fuente de datos. En consecuencia, podemos utilizarlo con varias y diferentes fuentes de datos,. El objeto DataSet contiene una coleccin de uno o ms objetos DataTable formados por filas y columnas de datos, adems de clave principal, clave fornea, restricciones e informacin de la relacin sobre los datos en los objetos DataTable. Visual Basic 2008 trae un nuevo componente de acceso a datos llamado TableAdapterManager. En teora debe simplificarnos el actualizar una base de datos partiendo de un dataset tipado con varias tablas relacionadas. El TableAdapterManager tiene un mtodo, UpdateAll, que guarda los datos de todas las tablas del dataset (filas aadidas, modificadas y eliminadas) en el orden correcto, respetando las relaciones y reglas de integridad referencial. Los TableAdapters proporcionan comunicacin entre la aplicacin y una base de datos. Para ser ms exactos, un TableAdapter se conecta a una base de datos, ejecuta consultas o procedimientos almacenados y devuelve una nueva tabla de datos rellena con los datos devueltos o con una DataTable con los datos devueltos. TableAdapters tambin se utilizan para enviar datos actualizados desde la aplicacin a la base de datos. El componente BindingSource simplifica el enlace de datos de los controles de un formulario proporcionando una capa de direccionamiento indirecto, proporcionando administracin de moneda, notificacin de cambios y otros servicios. Esto se consigue adjuntando el componente BindingSource al origen de datos y, a continuacin, enlazando los controles del formulario al componente BindingSource. Toda la interaccin adicional con los datos, incluyendo la exploracin, ordenacin, filtrado y actualizacin, se realiza mediante llamadas al componente BindingSource. El control BindingNavigator representa una manera normalizada para desplazarse y manipular los datos en un formulario. En la mayora de los casos, se empareja un control BindingNavigator con un control BindingSource para desplazarse por los registros de datos de un formulario e interactuar con ellos

TableAdapterManager

TableAdapter

BindingSource

BindingNavigator

2- Ejercicio de bases de Datos con vb.net 2008 Esquema de Relaciones de la BD 1- Aadir un formulario MDIParent

17

2Aadir la opcin de men de Universidad con un elemento por cada tabla: Alumnos, asignaturas y carreras

3. Agregar origen de datos

18

4. Seleccionar los Objetos de la BD y Finalizar con la conexin.

5. Mostrar el origen de los Datos.

19

6. Seleccionar las tablas y el tipo de control para cada campo de la Tabla.

7. Arrastrar cada tabla que se desee sobre el Formulario. En este ejemplo Carreras y asig_car

20

8. aparecen los siguientes Objetos:DataSet (1)

Diseado para acceder a datos con independencia de la fuente de datos. En consecuencia, podemos utilizarlo con varias y diferentes fuentes de datos,. El objeto DataSet contiene una coleccin de uno o ms objetos DataTable formados por filas y columnas de datos, adems de clave principal, clave fornea, restricciones e informacin de la relacin sobre los datos en los objetos DataTable. Visual Basic 2008 trae un nuevo componente de acceso a datos llamado TableAdapterManager. En teora debe simplificarnos el actualizar una base de datos partiendo de un dataset tipado con varias tablas relacionadas. El TableAdapterManager tiene un mtodo, UpdateAll, que guarda los datos de todas las tablas del dataset (filas aadidas, modificadas y eliminadas) en el orden correcto, respetando las relaciones y reglas de integridad referencial. Los TableAdapters proporcionan comunicacin entre la aplicacin y una base de datos. Para ser ms exactos, un TableAdapter se conecta a una base de datos, ejecuta consultas o procedimientos almacenados y devuelve una nueva tabla de datos rellena con los datos devueltos o con una DataTable con los datos devueltos. TableAdapters tambin se utilizan para enviar datos actualizados desde la aplicacin a la base de datos. Podemos apreciar en el ejemplo que crea un TableAdapter por cada tabla.

TableAdapterManager

TableAdapter (2)

21

BindingSource (2)

El componente BindingSource simplifica el enlace de datos de los controles de un formulario proporcionando una capa de direccionamiento indirecto, proporcionando administracin de moneda, notificacin de cambios y otros servicios. Esto se consigue adjuntando el componente BindingSource al origen de datos y, a continuacin, enlazando los controles del formulario al componente BindingSource. Toda la interaccin adicional con los datos, incluyendo la exploracin, ordenacin, filtrado y actualizacin, se realiza mediante llamadas al componente BindingSource. Un BindingSource para cada tabla que arrastremos sobre el formulariocon . El control BindingNavigator representa una manera normalizada para desplazarse y manipular los datos en un formulario. En la mayora de los casos, se empareja un control BindingNavigator con un control BindingSource para desplazarse por los registros de datos de un formulario e interactuar con ellos

BindingNavigator (1)

8. Podemos arrastrar una consulta de la BD sobre un segundo formulario:

22

3. Bases de Datos con ado.net : Cristal Report El siguiente ejercicio, programa una BD de Access (utilizaremos una sola tabla: alumno) en vb.net realizaremos listado. Con el siguiente diseo de pantalla:

Seguiremos los siguientes pasos: 1. Crearemos un nuevo Proyecto . 2. Sobre el proyecto Agregar-> Nuevo elemento -> Cristal Report 3. Arrastrar de La Caja de herramientas un CystalReporViewer sobre el formulario. 4. Modificar la propiedad ReportSource del CrystalViewer con el documento CristalReport creado. 5. Ejecutar. 6. Se puede modificar el diseo del listado al gusto de cada uno.

23

4. Bases de Datos con ado.net desconectada El siguiente ejercicio, programa una BD de Access (utilizaremos una sola tabla) en vb.net y trabajaremos de forma desconectada. El diseo de pantalla ser el siguiente:

Seguiremos los siguientes pasos: 7. Crearemos un nuevo Formulario en la aplicacin de base de Datos . 8. Crearemos una conexin con una BD en Access o utilizaremos una ya exixtente desplegando el explorador de servidores o en Datos-> agregar nuevo origen de datos.. 9. Necesitamos : Un Dataset un TableAdapter y un BindingSource. Arrastraremos sobre el formulario el dataset y el Bindingsource y automticamente crea los objetos. El TableAdapter de crea automticamente al conectar el BindingSource con las propiedades DATAsource Y Datamenber. El orden es Dataset, BindingSource y al enlazar se crea automticamente el TableAdapter. 10. Las propiedades del BindingSource : Datasource y Datamenber las modificamos apuntando al dataset creado y a la tabla Alumno.

Este dataset nos permitir manipular los datos, y lo podremos utilizar como enlace entre las cajas de texto y los campos de la tabla que estamos utilizando, tambin podremos agregar, eliminar, actualizar registrosetc. 11. Agregar al formulario las cajas de texto (una por cada columna de la tabla Alumno) y sus etiquetas necesarias. 24

12. Modificar la propiedad DataBIndings de cada caja de texto de la siguiente forma: (para el campo Interno pondremos un CheckBox, con la propiedad Checkstate enlazada al BindingSource1-Interno)

Para enlazar las cajas de texto a los campos de la tabla. 13. Crear los botones y Label1.

14. Aadir el siguiente cdigo: Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'rellenar los datos AlumnoTableAdapter1.Fill(Me.UniversidaD_SINFOTO2000DataSet1.ALUMN O) ' etiqueta de informacin sobre las filas de la tabla Label1.Text = "Tabla ALUMNO:" & Me.UniversidaD_SINFOTO2000DataSet1.ALUMNO.Rows.Count End Sub

25

Private Sub anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles anterior.Click 'Me.BindingSource1.Position = Me.BindingSource1.Position - 1 Me.BindingSource1.MovePrevious() Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End Sub Private Sub primero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles primero.Click Me.BindingSource1.Position = 0 'me.BindingSource1.MoveFirst Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End Sub Private Sub ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ultimo.Click Me.BindingSource1.MoveLast() ' se puede hacer tambien con: 'Me.BindingSource1.Position = Me.UniversidaD_SINFOTO2000DataSet1.ALUMNO.Rows.Count - 1 'Me.BindingSource1.Position = Me.BindingSource1.Count - 1 Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End Sub Private Sub siguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles siguiente.Click 'Me.BindingSource1.Position = Me.BindingSource1.Position + 1 Me.BindingSource1.MoveNext() Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End Sub Private Sub borrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles borrar.Click If Me.BindingSource1.Count > 0 Then 'Me.BindingSource1.Remove(Me.BindingSource1.Position) 'Me.BindingSource1.RemoveCurrent() Me.BindingSource1.RemoveAt(Me.BindingSource1.Position) Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End If End Sub Private Sub agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles agregar.Click 26

' posicionarse en el ltimo registro Me.BindingSource1.MoveLast() 'otra forma 'Me.BindingSource1.Position = Me.BindingSource1.Count - 1 ' aadir un registro en blanco Me.BindingSource1.AddNew() ' actualizar etiqueta Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count 'pasar foco a la caja de texto de la clave principal. TextBox1.Focus() 'bloquear botones siguiente.Enabled = False ultimo.Enabled = False anterior.Enabled = False primero.Enabled = False bcancelar.Enabled = False actualizar.Enabled = False End Sub Private Sub Cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancelar.Click Me.BindingSource1.CancelEdit() Label1.Text = "Tabla ALUMNO:" & Me.BindingSource1.Position + 1 & " de " & Me.BindingSource1.Count End Sub Private Sub actualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles actualizar.Click Me.Validate() 'detener todas las ediciones Me.BindingSource1.EndEdit() 'actualizar Me.AlumnoTableAdapter1.Update(Me.UniversidaD_SINFOTO2000DataSet1. ALUMNO) End Sub Private Sub bcancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bcancelar.Click 'solo es posible antes de actualizar Me.UniversidaD_SINFOTO2000DataSet1.ALUMNO.RejectChanges() End Sub Private Sub final_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles final.Click Me.Close() End Sub Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave 'cuando el foco de entrada deja la caja de texto 27

clave_principal(TextBox1.Text) End Sub Module Module1 Public Sub clave_principal(ByVal clave As String) If clave = "" Then MessageBox.Show("el DNI es clave principal y no puede tener valores nulos") 'bloquear botones form5.siguiente.Enabled = False form5.ultimo.Enabled = False form5.anterior.Enabled = False form5.primero.Enabled = False form5.bcancelar.Enabled = False form5.actualizar.Enabled = False ' foco al caja dni form5.TextBox1.Focus() Else 'desbloquear botones form5.siguiente.Enabled = True form5.ultimo.Enabled = True form5.anterior.Enabled = True form5.primero.Enabled = True form5.bcancelar.Enabled = True form5.actualizar.Enabled = True End If End Sub End Module

5. Bases de Datos con ado.net El siguiente ejercicio, programa una BD de Access (utilizaremos una sola tabla: alumno) en vb.net realizaremos consultas por apellido. Con el siguiente diseo de pantalla:

28

Seguiremos los siguientes pasos: 15. Crearemos un nuevo Formulario en la aplicacin de base de Datos . 16. Crearemos una conexin con una BD en Access o utilizaremos una ya exixtente desplegando el explorador de servidores. 17. Necesitamos : Un Dataset un TableAdapter y un BindingSource arrastraremos sobre el formulario y automticamente crea los objetos . El TableAdapter de crea automticamente al conectar el BindingSource con las propiedades DATAsource Y Datamenber. El orden es Dataset, BindingSource y al enlazar se crea automticamente el TableAdapter. 18. Las propiedades del BindingSource : Datasource y Datamenber las modificamos apuntando al dataset creado y a la tabla Alumno.

19. Agregar al formulario la caja de texto, un ListBox y un DataGridView. 20. enlazar la propiedad DataSource del DataGridView con el BindingSource1. 21. aadir el siguiente cdigo: Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Clear() 'limpiar caja de texto 'rellenar los datos AlumnoTableAdapter1.Fill(Me.UniversidaD_SINFOTO2000DataSet1.ALUMN O) End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged ' CADENA PARA LA SELECT DE APELLIDOS Dim CADENA As String CADENA = "APELLIDOS LIKE '" & TextBox1.Text & "%'" 'Crear una array para guardar las filas del dataSet Dim filas() As DataRow 'rellenar el array filas con las filas de la tabla alumno y el select filas = Me.UniversidaD_SINFOTO2000DataSet1.ALUMNO.Select(CADENA) 'limpiar el listbox Me.ListBox1.Items.Clear() 'recorrer array filas y aadir al listBox If filas.Length > 0 Then 29

For Each i As DataRow In filas ' en el listbox pongo el apellido,nombre de cada fila Me.ListBox1.Items.Add(i("apellidos").ToString & "," & i("nombre".ToString)) Next End If End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 'c_apell es un string donde guardar el apellido solo Dim c_apell As String 'coma es un entero con la posicin de la caja de texto donde esta la coma 'que separa el apellido del nombre Dim coma As Integer 'busco la posicin de la coma coma = InStr(Me.ListBox1.SelectedItem.ToString, ",") 'separo el apellido c_apell = Mid(Me.ListBox1.SelectedItem.ToString, 1, coma - 1) 'pasar a la caja de texto el seleccionado Me.TextBox1.Text = Me.ListBox1.SelectedItem.ToString ' eliminar selecciones anteriores Me.DataGridView1.ClearSelection() 'buscar la fila del DataGridview que coincide For Each i As DataGridViewRow In Me.DataGridView1.Rows If c_apell = i.Cells(2).Value.ToString Then 'seleccionarla Me.DataGridView1.Rows(i.Index).Selected = True 'ponerla visible Me.DataGridView1.FirstDisplayedScrollingRowIndex = i.Index Exit For End If Next End Sub

30