Vous êtes sur la page 1sur 12

Sistemas UNI. Instructor: V. Carlos, Segura P.

LABORATORIO ADO.NET – 3.

Derechos Reservados, solo para ser usados dentro de la


institución.
Derechos de Autor

El contenido de este laboratorio tiene todos los derechos reservados, por lo tanto no se
puede reproducir, transcribir, almacenar a un sistema de recuperación o de alteración,
asimismo la traducción a otro idioma de ninguna forma o por ningún medio mecánico,
manual, electrónico, magnético, óptico o de otro modo.

La persecución de una reproducción no autorizada tiene como


consecuencia la cárcel y/o multas.

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

3 ADO.NET

Propiedades Importantes de un DataGridView.

Obteniendo el valor de una celda

Para el DataSet:

Para Obtener el valor de la celda seleccionada:


DataSet.Tables(“Name”).Rows( Index ).Item( ColumnIndex ).ToString

Para Obtener el numero de Filas y Columnas:


Ds.Tables(0).Columns.Count
Ds.Tables(0).Rows.Count

Para averiguar si el DataSet ha sufrido un Cambio:


HasChanges

Para el DataGridView:

Estilo de Selección de la Fila


SelectionMode

Para obtener el valor de la fila seleccionada.


CurrentRow.Index

Para Obtener el valor de la celda seleccionada


CurrentCell.Value

CurrentCellAddress

Para Obtener el numero de Filas y Columnas


RowCount y ColumnCount

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

1 Trabajar en Forma Desconectada.


1.1 Forma no Administrada - SqlCommandBuilder.

El SqlCommandBuilder genera automáticamente comandos de tabla única que se utilizan para realizar los
cambios desde un objeto DataSet con la base de datos de SQL Server asociada

Por si solo el SqlDataAdapter no genera automáticamente las instrucciones de modificación requeridas para
realizar los cambios de un DataSet con la instancia asociada de SQL Server, pero se puede crear un objeto
SqlCommandBuilder que genera automáticamente instrucciones de modificación para las actualizaciones de
una sola tabla.

El objeto SqlCommandBuilder se asocia como un ente que reacciona a eventos de RowUpdating siempre que
se establezca la propiedad en el SqlDataAdapter.

La asociación entre el SqlDataAdapter y SqlCommandBuilder sólo se pueden asociar un objeto SqlDataAdapter


y un objeto SqlCommandBuilder simultáneamente.

SqlCommandBuilder en síntesis lo que hace este objeto es implementar al DataAdapter con comandos para
que ejecuten las tareas de:
Insert
Update
Delete

Implementación del SqlDataAdapter:

Primero creamos el SqlDataAdapter instanciado con la consulta y conexión establecida.

Objeto As New SqlDataAdapter (Consulta, Conexión)

Luego, definir un SqlCommandBuilder para agregarle el parámetro que necesita indicándole el


SqlDataAdapter que tenemos que implementar

SqlCommandBuilder ( SqlDataAdapter )

Para realizar los cambios del DataSet en la base de datos se debe ejecutar el método Update desde el
DataAdapter

SqlDataAdapter.Update ( DataSet )

Y antes de realizar lo anterior tenemos que saber si es que el DataSet ha sido modificado, para esto
podemos preguntar en el DataSet con HasChanges que devuelve false o true si es que ha cambiado el
DataSet.:

DataSet.HasChanges

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

I.- Creamos un formulario con el nombre frmClientesNOAdministrado, el cual tendrá el siguiente diseño

II.- Necesitamos las siguientes variables globales:

III.- En el load del formulario colocamos lo siguiente:

IV.- En el botón modificar agregamos:

V.- Al ejecutar el formulario, debemos agregar 4 registros en el DataGrid, modificar 2 de ellos y eliminar uno
de ellos, al realizar esto, las modificaciones están ocurriendo en el DataSet, al momento de darle clic al botón
modificar estamos haciendo que los cambios efectuados en el DataSet lo modificamos en la base de datos.

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

VI.- El SqlDataAdapter creado en el punto II, debe ser cambiado por lo siguiente:

Dim Adapter As SqlDataAdapter

Luego realizar los cambios respectivos en los eventos para que nos permita realizar la modificación.

1.2 Forma Administrada.

Potenciando nuestro Adaptador de Datos.

La forma mas correcta de trabajar en forma desconectada es que nosotros mismos controlemos nuestros
cambios a la base de datos, para esto el DataAdapter se le puede configurar, observemos primero el siguiente
ejemplo.

El SqlDataAdapter para administrar las modificaciones a la base de datos cuenta con comandos para definir,
primero debemos configurar este comando e indicarle que tipo de modificación debe realizar; luego se le
asigna al SqlDataAdapter con el comando especifico según la acción del comando.

La configuración del SqlCommand, varia al del anterior en este tenemos que indicarle el tipo de dato y
además el nombre del campo que se hace referencia.

SqlDataAdapter.SelectCommand
Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para seleccionar
registros en el origen de datos.

SqlCommand ([Procedimiento para la Inserción], [Conexión])


SqlDataAdapter.SelectCommand = SqlCommand

SqlDataAdapter.InsertCommand
Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para insertar
nuevos registros en el origen de datos.

SqlCommand ([Procedimiento para la Inserción], [Conexión])


SqlDataAdapter.InsertCommand = SqlCommand

SqlDataAdapter.DeleteCommand

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar


registros de un conjunto de datos.

SqlCommand ([Procedimiento para la Inserción], [Conexión])


SqlDataAdapter.DeleteCommand = SqlCommand

SqlDataAdapter.UpdateCommand
Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para actualizar
los registros del origen de datos.

SqlCommand ([Procedimiento para la Inserción], [Conexión])


SqlDataAdapter.UpdateCommand = SqlCommand

I.- Crear un nuevo formulario con el nombre frmClientesAdministrado y el siguiente diseño:

II.- Debemos crear las siguientes variables:

III.- En el load del formulario colocaremos lo siguiente:

Acá configuramos nuestro Adaptador de Datos para realizar un Select

Acá configuramos nuestro Adaptador de Datos para realizar una Eliminación

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Acá configuramos nuestro Adaptador de Datos para realizar una Inserción

Acá configuramos nuestro Adaptador de Datos para realizar una Modificación

IV.- Y en el botón modificar colocamos lo siguiente:

V.- Al ejecutar este formulario, obtendremos lo siguiente:

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Método Obsoleto para el SqlCommand

En el ejemplo anterior teníamos un aviso de método obsoleto al agregar parámetros a nuestro SqlCommand,
el cual nos indicaba que era obsoleto:

En el cual si estuviéramos trabajando con Ado.Net 1.x todo era normal, y la forma genérica de hacer esto era:

SqlCommand.Parameters.Add("@TipoCliente", 1);

Pero si el estamos trabajando sobre ADO.NET 2.0 y escribimos exactamente lo mismo aunque de hecho
podría funcionar por compatibilidad, el compilador y el propio entorno de Visual Studio nos darán un aviso
diciendo que el método 'Add' está obsoleto

Y es mejor usar método AddWithValue, y esto es porque si usamos en ADO.NET 2.0 el valor que se asigna
el parámetro "@TipoCliente" es con el valor '1'. Sin embargo no es así, lo que ocurre en realidad es que el
compilador mira cuál de los métodos Add sobrecargados se ajusta mejor al compilar y resulta que el que
mejor se acomoda es:

Public SqlParameter Add(string parameterName, SqlDbType valueType)

El tipo de dato en SqlDBType, en el cual buscara al primero que se ajusta en este caso será enviado como un
tipo SqlDbType.Binary que se asigna como 1.

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Modelo de Uso de los Objetos:

SqlConnection

Open
SP_UPDATE Fill
SqlDataAdapter
SP_DELETE

SP_INSERT SqlCommand SelectCommand


DataSet

USER
SqlCommand InsertCommand
SP_SELECT

SqlCommand UpdateCommand
BD
Update
SqlCommand DeleteCommand

Close

Empezando el Laboratorio.

I.- Empezaremos creando dos clases una para las categorías y otra para los productos con los nombres
clsCategorias y clsProductos.

II.- Dentro de la clase clsCategorias, crearemos una función que devuelve un DataTable y un método que
realiza el llenado de un objeto.

Para devolver un DataTable:

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Para llenar un Objeto:

III.- Para la clase clsProductos colocamos el siguiente método:

IV.- Crear un formulario con el siguiente diseño:

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

V.- En el formulario, crear la siguiente variable en un ámbito general:

Dim DtCategorias As New DataTable

VI.- En el Load del formulario crear lo siguiente:

VII.- En el evento SelectedIndexChanged del ComboBox finalmente colocamos lo siguiente:

VIII.- Al ejecutar el formulario mostrara lo siguiente:

VIII.- En la base de datos pubs, tenemos las siguiente tablas:

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Debemos crear 2 formularios con los nombres frmTrabajos y frmEmpleados, donde en el primer formulario
debe mostrar solo la descripción del servicio de la empresa y al escoger uno de los servicios se debe mostrar
el otro formulario con el contenido de los empleados de este servicio.

Al mostrar este formulario se debe mostrar de que servicio son los empleados y cual es el numero de
empleados, así mismo se debe crear solo la opción de modificación de los registros de los empleados.

Usar SqlCommandBuilder para realizar la modificación y los formularios no deben tener ningún imports a
objetos de base de datos.

UNIVERSIDAD NACIONAL DE INGENIERIA


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS