Libroado.net

179
I.E.S. CESCA (ADO.NET) Taller de Desarrollo III ADO.NET Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 1/179 Email:[email protected]

Transcript of Libroado.net

Page 1: Libroado.net

I.E.S. CESCA(ADO.NET)

Taller de Desarrollo IIIADO.NET

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 1/122Email:[email protected]

Page 2: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic.NET (II)ObjetivoAl término de esta separata el alumno conocerá

Que es ADO.NET Conocer los Espacios entre nombre (Namespace) Conocer los Proveedores para los diferentes Gestores de Base de Datos

INTRODUCCION

La mayoría de las aplicaciones escritas en visual Basic giran en entorno a la lectura y escritura actualización de información de base de datos para permitir la integración de datos en aplicaciones distribuidas y escalables, Visual Studio .NET es compatible con una nueva generación de tecnología de acceso a datos: ADO.NET

ADO.NET.- Es un conjunto de librerías para el acceso de datos, ya sea estén en una base de datos o en hoja de cálculo o un archivo XML.

ADO.NET.- Forma parte del tercer nivel del conjunto de objetos que el .NET Framework ofrece para trabajar dentro de esta plataforma, junto con XML constituyen un subgrupo específico que estén preparados para manejar datos.

ADO.NET.- Proporciona un acceso coherente a origen de datos como Microsoft SQL Server, así como orígenes de datos expuestos mediante OLE DB (Microsoft Access, Microsoft Visual FoxPro etc.) y XML las aplicaciones para usuarios que comparten datos para utilizar pueden utilizar ADO.NET para conectarse a estos orígenes de datos y recuperar, manipular y actualizar los datos.

ADO.NET.- Ah mejorado notablemente con respecto a su predecesor. La posibilidad de contar con proveedores específicos hace posible no solo la simplificación a nivel de la codificación sino también en el consumo de recursos. Trabajar en entornos conectados como desconectados permite al desarrollador desarrollar las mejores prácticas en función a los requerimientos.

En la actualidad ADO.NET ya es parte del NET. Framework quiere decir que ADO.NET es parte del sistema operativo y no más un redistribuible que se necesita alojar junto al cliente o junto al instalador de un aplicación. Esto simplifica que nosotros, como desarrolladores, estaremos enfocados mas el acceso a datos y a la lógica para manipular estos datos, y no tendremos porque preocuparnos en las librerías del cliente.

Pero como mandamos las instrucciones SQL a la base de datos, la respuesta es mediante los OBJETOS ADO.NET, las cuales proporcionan acceso coherente a orígenes de datos como Microsoft SQL – Server, así como orígenes de datos expuestos mediante OLE DB y XML.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 2/122Email:[email protected]

Page 3: Libroado.net

I.E.S. CESCA(ADO.NET)

A continuación se detallan algunos conceptos básicos:

ADO.NET es una tecnología de acceso a datos que se basa en los objetos ADO (Objetos de datos ActiveX) Anteriores.

Es una manera nueva de acceder a los datos construida sobre ADO, ADO.NET puede existir con ADO.

Además podemos decir que ADO.NET es un conjunto de clases que exponen servicios de acceso a datos del programador.

ADO.NET proporciona un conjunto variado de componentes para crear aplicaciones distribuidas de uso compartido de datos. Forma parte integral de .NET Framework, y proporciona acceso de datos relacionales, datos XML y datos de aplicaciones.

ADO.NET es compatible con diversas necesidades de programación incluida la creación de clientes de bases de datos clientes y objetos empresariales de nivel medio utilizados por aplicaciones, herramientas, lenguajes o exploradores de Internet.

ADO.NET utiliza un modelo de acceso pensando para entornos desconectados. Esto quiere decir que la aplicación se conecta al origen de datos, hace lo que tiene que hacer, por ejemplo seleccionar registros, los carga en memoria y desconecta del origen de datos.

ADO.NET es un conjunto de clases que usted utiliza para acceder y manipular orígenes de datos como por ejemplo, una base de datos en SQL-Server o una planilla de Excel.

ADO.NET utiliza XML como el formato para transmitir datos desde y hacia su base datos y su aplicación WEB.

Hay 3 espacios de nombre que se importara en un formulario WEB o formulario Windows si está usando objetos de ADO.NET.

System.Data System.Data.SqlClient System.Data.OleDb

El modelo de objetos ADO.NET provee una estructura de acceso a distintos orígenes de de dato. Tiene componentes principales: el Dataset y el proveedor de Datos .NET.

Espacios de nombres para datos en el .NET FramworkEntre los espacios de nombres de .NET Framework relativos a datos y XML de incluyen:System.DataConsiste en las clases que constituyen la arquitectura ADO.NET, que es el metodo primario para tener acceso a los datos de las aplicaciones administradas.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 3/122Email:[email protected]

Page 4: Libroado.net

I.E.S. CESCA(ADO.NET)

La arquitectura ADO.NET permite crear componentes que administran eficientemente datos procedentes de múltiples orígenes. ADO.NET también proporciona las herramientas necesarias para solicitar, Actualizar y reconciliar datos en aplicaciones distribuidoras.

System.Data.CommonContiene las clases que comparten los proveedores de datos .NET Framework. Dichos proveedores describen una colección de clases que se utiliza para obtener acceso a un origen de datos, Como una base de datos, en el espacio administrado.

System.XmlClases que proporcionan funcionalidad basad en estándares para procesar código XML .

System.Data.OleDbClases que componen el proveedor de datos de .NET Framework para orígenes de datos compatibles con OLE DB, ejecutar comandos en el origen y leer los resultados.

System.Data.SqlClientClases que conforman el proveedor de datos de .NET framework para SQL Server, que permite conectarse a un origen de datos SQL-Server 7.0, ejecutar Comandos y leer los resultados. El espacio de nombre System.Data.SqlClient es similar al espacio de nombres System.Data.OleDb, pero optimizado para el acceso a SQL Server 7.0 y versiones Posteriores.

System.Data.SqlTypesProporciona clases para tipos de datos nativos de SQL Server. Estas Clases ofrecen una alternativa más segura y más rápida a otros tipos de datos.

System.Data.OdbcClases que componen el proveedor de datos de .NET Framework para OLE DB. Estas Clases permiten el acceso a orígenes de datos ODBC en el espacio administrado.

System.Data.OracleClient Clases que componen el proveedor de datos de .NET Framework para Oracle. Estas clases permiten el acceso a orígenes de datos Oracle en el espacio administrado.

El proveedor de datos .NET FrameWorkEl proveedor de datos .NET provee del enlace entre el origen de datos y el dataset.

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, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles.

El diseño del proveedor de datos de .NET Framework hace que sea ligero, de manera que cree un nivel mínimo entre el origen de datos y su código, con lo que aumenta el rendimiento sin sacrificar la funcionalidad.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 4/122Email:[email protected]

Page 5: Libroado.net

I.E.S. CESCA(ADO.NET)

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 de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El diseño del proveedor de datos de .NET Framework hace que sea ligero, de manera que cree un nivel mínimo entre orígenes de datos y su código, con lo que aumenta el rendimiento sin sacrificar la funcionalidad.

Proveedor de datos d .NET DescripciónProveedor de datos de .NET para SQL Server

Para Microsoft SQL Server Versión 7.0 o posteriores

Proveedor de datos de .NET para OLEDB Para orígenes de datos que se exponen mediante OLE DB

Proveedor de datos de .NET para ODBC Para orígenes de datos que se exponen mediante ODBC

Proveedor de datos de .NET para Oracle Para orígenes de datos de oracle. El proveedor de datos de .NET Framework para Oracle es compatible con la versión 8.1.7 y posteriores del software del cliente de Oracle.

Objetos provistos por distintos proveedores de datos .NETLos objetos Connection Command, DataReader y DataAdapter son elementos fundamentales del modelo del proveedor de datos .NET Framework. En la tabla siguiente se describen estos objetos.

Objeto Descripción Objeto SQL Server Objeto OleDB

Connection Establece una conexión a unorigen de datos determinado

SqlConnection OleDBConnection

Command Ejecuta un comando en un origen de datos

SqlCommand OleDBCommand

DataReader Lee una secuencia de datos de solo avance y solo lectura desde un origen de datos.

SqlDataReader OleDBDataReader

DataApapter Llena un DataSet y realiza las actualizaciones necesarias en el origen de datos.

SqlDataAdpater OleDBDataApapter

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 5/122Email:[email protected]

Page 6: Libroado.net

I.E.S. CESCA(ADO.NET)

VB.NET ADO.NETEstudiando los Namespace

OleDb y SqlClient

Objetivo:Al término de esta separata el alumno Conocerá:

Que es el objeto OleDb y SqlClient Propiedades del objeto OleDbconection y Sqlconnection

OleDb

Este namespace me permite conectarme a una base de datos de Microsoft ACCESS su espacio entre nombres es:

Imports System.DataImports System.Data.OleDB

Cuando importamos los espacios entre nombres System.Data.OleDb importamos todas las librerías de clases que contiene el espacio entre nombre OleDb y por consecuente las principales clases que me carga ala hora de importación son los siguientes:

OleDbCommandOleDbConnectionOleDbDataAdapterOleDbDataReader

SqlClient

El namespace SqlClient me permite conectarme a una base de dato de SQL Server su espacio entre nombre es:

Imports System.dataImports System.Data.SqlClient

Cuando importamos el espacio de entre nombres System.Data.SqlClient se carga toda las librerias de clases para trabajar con SQL Server sus principales clases son:

SqlConnectionSqlDataAdapterSqlCommandSqlDataReader

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 6/122Email:[email protected]

Page 7: Libroado.net

I.E.S. CESCA(ADO.NET)

Propiedades Principales tanto para SqlConnection y OleDbConnection

ConnectionStringObtiene o establece la cadena de conexión Utilizada para abrir una base de datos SQL-Server o Microsoft Access.

DatabaseObtiene el nombre de la base datos actual o de la que se va a utilizar una vez que se abre la conexión.

DataSourceObtiene el nombre de la instacia de SQL Server con la que se va a establecer la conexión.

ChangeDatabaseCambia la base de datos actual de una conexión SqlConnection abierta.

OpenAbre una conexión de base de datos con los valores de propiedad que espesifica el connectionString o mi cadena de conexión.

CloseCierra la cadena de conexión con la base de datos.

CreateCommandCrea y debuelve un objeto Sqlcommand asociado a la conexión.

Estudiando el objeto OleDbConnection:

En este ejemplo utilizaremos la base de datos del profesorEste Objeto representa la conexión de mi BD de Microsoft Access

Ejemplo Con Microsoft Access:

Crear un nuevo Proyecto BDnegocio

1.-Diseñar el Siguiente Formulario:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 7/122Email:[email protected]

BtnAbrir BtnCerrar

frmconecion

Page 8: Libroado.net

I.E.S. CESCA(ADO.NET)

2.- Luego Importar los Namespace:

3.- Debajo de frmconecion declarar una variable como la siguiente luego asigarle la variable al objeto de Connecion en este Caso sería OleDbconeecion

Rem Declaro mi cadena de conexiónDim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Control de Ventas.mdb"

Rem Paso mi variable a mi objeto de conexión es decir a OleDbConnectionDim cn As New OleDbConnection(strcon)

Propiedades de la cadena de conexión o Ruta

Provaider: Hace la referencia que estoy usando una base de datos Microsoft Access

Data Source: Indico la ruta de mi BD (D:\Control de Ventas.mdb)

4.- En el Evento Click del BtnAbrir Ingresar lo siguiente:

cn.Open()messageBox.Show("Conexion Abierta con la base de datos")

5.-En el Evento Click de BtnCerrar Ingresar lo Siguiente:

cn.Close()MessageBox.Show("Conexion cerrada")

6.- Probar la aplicaccion

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 8/122Email:[email protected]

Page 9: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo Con SQL Server:

Estableciendo una conexión con SQL Server 2005

Para esto el Profesor entregara una base de datos creado en SQL Server.

1.-Agregar un nuevo Formulario y diseñar la siguiente interfaz:

2.- Importar el namespace SqlClient

Se debe crear las variables que representan la cadena de conexión y el objeto conexión, en un ámbito general del formulario.

Dim strcon As String = "Initial Catalog=Demo;Data Source=.;Integrated Security=true"Dim cn As New SqlConnection(strcon)

Analizando la Cadena de Conexión:

La cadena de conexión, representa la cadena que sera leida por el proveedor el cual se comunicara con el servidor y la base de datos mencionadas en esta Cadena.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 9/122Email:[email protected]

btncerrar

frmconecion

BtnAbrir

Page 10: Libroado.net

I.E.S. CESCA(ADO.NET)

Initial Catalog: =DemoNombre de la base de datos

Data Source="."Indica el nombre de mi servidor o nombre de mi PC

Nota:El punto que se le asigo en Data Source hace referencia al nombre de mi Servidor

Integrated Security=true"Indica que se usa seguridad integrada

Para conectarce a bases de datos de servidor se recomienda utilizar la autenticacion de Windows es la autenticacion cuando nos logeamos al inicio del sistema operativo conocida comunmente como seguridad integrada para espesificar la autenticaccion de Windows, se puede utilizar cualquiera de los dos siguientes:

Integrated Security=true"Integrated Security=SSPI"

En el boton BtnAbrir en el evento Click

cn.Open()MessageBox.Show("Conexion Abierta")

En el boton btnCerrar en el evento Click

cn.Close()MessageBox.Show("Conexion Cerrada")

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 10/122Email:[email protected]

Page 11: Libroado.net

I.E.S. CESCA(ADO.NET)

VB.NET ADO.NETEstudiando los Namespace

OleDb y SqlClient

Objetivo:Al término de esta separata el alumno Conocerá:

Ejemplo 01:

Diseñar la siguiente interfaz:

En el ámbito de importaciones importar los siguientes namespace:

Imports System.Data.OleDbImports System.IO

En el ámbito a nivel de clase declarar las siguientes variables:

Dim strcon As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=D:\Ventas.mdb"Dim cn As New OleDbConnection()

En el evento “Load” del formulario:

cn.ConnectionString = strcon

En el botón “Abrir” evento Click: cn.Open()

MessageBox.Show("Conexión Establecida", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 11/122Email:[email protected]

Page 12: Libroado.net

I.E.S. CESCA(ADO.NET)

En el botón “Cerrar” evento Click: cn.Close()

MessageBox.Show("Conexión Cerrad", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)

En el botón “Mostrar” evento Click:

REM si el estado de la conexión es Diferente a open Abrimos la cadena de conexiónIf cn.State <> ConnectionState.Open Then

cn.Open()End IftxtDataSource.Text = cn.DataSource 'Ruta de la Base de datostxtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexiontxtVersion.Text = cn.ServerVersion 'la Version del ServidortxtProvider.Text = cn.Provider 'Solo el ProveedortxtDataBase.Text = Path.GetFileName(cn.DataSource) ' La BDtxtDatabaseSinExtension.Text = Path.GetFileNameWithoutExtension(cn.DataSource) ' Sin extensiontxtDirectorio.Text = Path.GetDirectoryName(cn.DataSource)REM si el estado de la conexión es igual a open la cadena de conexion lo cerramos.If cn.State = ConnectionState.Open Then

cn.Close()End If

En el botón “Limpiar” evento Click:

Eso te lo dejo para ti

Una vez terminado a probar la aplicación:

Para recordar.

El Imports System.IO permite traer la clase Path esta clase me permite visualizar todas las características de la ubicación del archivo.

No solo me permite traer a la clase Path también me permite traer las clases que permiten crear archivos y abrir archivos estas clases son:

StreamReader: permiten leer un archivo de textoStreamWriter: permiten un Archivo de texto

Deseas un ejemplo en un botón ejecuta estas líneas de código:

Dim cadena As String = "Ejemplo de StreamWhiter"Dim sw As New StreamWriter("C:\Ejemplo.txt", False, Encoding.Default)sw.Write(cadena)sw.Close()

Luego de hacer click en el botón ubícate en el disco C y encontraras el archivo creado con el nombre Ejemplo.txt

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 12/122Email:[email protected]

Page 13: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo con Sql-Server 2008

1) Ingresar al Sql:Botón Inicio/Ejecutar/ssms

2) Nos visualizar la siguiente ventana:

Server Type: Tipo de servidorServer name: Nombre del servidor (Nombre de la PC) Authentication: Tipo de autenticación existen dos tipos

1. Autenticación Windows2. Autenticación Sql-Server

Diferencias.

Cuando utilizamos la cuenta Autenticación Windows no es necesario ingresar el usuario ni el password pero si utilizamos la autenticación Sql-Server nos va a pedir obligatoriamente que ingresemos un usuario y password.

Tipo de Servidor = Motor de Base de datosServer Name= “.” Si no te acuerdas el nombre de tu servidor solo pongas un puntoAuthentication= Autenticación Sql-ServerUsuario=saPassword=123

Luego haces click en el botón conectar.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 13/122Email:[email protected]

Page 14: Libroado.net

I.E.S. CESCA(ADO.NET)

Se visualizar la siguiente ventana.

Se visualizar la siguiente ventana.

En sección de trabajo codificar lo siguiente:

Use masterGo--Creamos la BD VentasCreate Database VentasGo--Usamos la BD ventasUse VentasGo

Una vez terminado presionar F5Hasta acá hemos creado una BD en Sql Server 2008 de nombre Ventas Ahora a consumirlo.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 14/122Email:[email protected]

Click aquí (New Query = Nueva Consulta)

Sección de Trabajo. )

Page 15: Libroado.net

I.E.S. CESCA(ADO.NET)

Crear un proyecto de tipo Aplicación Windows FormsDiseñar la siguiente interfaz:

En el ámbito de importaciones importar el siguiente NameSpace:

Imports System.Data.SqlClient

En el ámbito a nivel de clase:

Dim cn As New SqlConnection("User id=sa;Server=.;DataBase=Ventas;Password=123")

En el botón “Abrir” evento Click: cn.Open()

MessageBox.Show("Conexión Establecida", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)

En el botón “Cerrar” evento Click: cn.Close()

MessageBox.Show("Conexión Cerrad", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)

En el botón “Mostrar” evento Click:cn.Open()txtDataSource.Text = cn.DataSource 'Nombre ServidortxtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexiontxtVersion.Text = cn.ServerVersion 'la Version del ServidortxtWorkstationId.Text = cn.WorkstationId 'el cliente quien lo consumetxtDataBase.Text = cn.Database ' La BDREM si el estado de conexiones es igual a open la cadena de conexion lo cerramos.If cn.State = ConnectionState.Open Then

cn.Close()End If

Bueno una vez terminado a ejecutarlo.Recursos...

Ver las cadenas de conexión para cualquier BD.http://www.connectionstrings.com/

Manual de ADO.NET 1http://www.4shared.com/dir/xqEfIPhy/ADONET.html

BaseDatos Ventas http://www.4shared.com/file/AFfP7HUz/Ventas.html

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 15/122Email:[email protected]

Page 16: Libroado.net

I.E.S. CESCA(ADO.NET)

ADO.NETEstudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset

Objetivo:Al término de esta separata el alumno será capas de manejar los objetos:

OleDbdataAdapter SqlDataAdapter Dataset

Estudiando el objeto OleDbDataAdapter y SqlDataAdapterRepresenta un conjunto de comandos de datos y una conexión de base de datos que se utilizan para rellenar un DATASET y actualizar una base de datos SQL Server o Microsoft Access esta clase no se puede heredar.

OleDbDataAdapter y SqlDataAdapter, se utiliza como un puente entre el DATASET y la BD para recuperar o guardar datos. Proporciona este puente mediante la asignación del método FILL, que cambia los datos en el DataSet para que coincidan con los datos del origen de datos; y Update, que cambia los datos en origen de datos para coincidan con los datos en DataSet utilizando las instrucciones de Transact –SQL en el origen de datos adecuado.

Estudiando el método Fill

El método Fill de DataAdapter llena un DataSet sólo con las columnas y filas de un origen de datos.

DataAdapter contiene también las propiedades SelectCommand, InsertCommand, DeleteCommand, UpdateCommand para facilitar la carga y la actualización de los datos.

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

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

DeleteCommand

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 16/122Email:[email protected]

Page 17: Libroado.net

I.E.S. CESCA(ADO.NET)

UpdateCommand

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

Otros métodos de DataAdapter

FillSchema (se hereda de DbDataAdapter)Agrega DATATABLE A DATASET y configura el esquema para hacerlo coincidir con el del origen datos.

Update (se hereda de DbDataAdapter)Compatible con .NET compact Framework, sobrecargado. Llama a las instrucciones INSERT, UPDATE o DELETE respectivamente para cada fila insertada, actualizada, o eliminada en DataSet.

Modelo de uso del Objeto DataAdapter

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 17/122Email:[email protected]

Cadena de Conexión

SqlConnection

SqlDataAdapter

Dataset

SqlDataAdapter

Open

Close Fill

Page 18: Libroado.net

I.E.S. CESCA(ADO.NET)

El objeto DATASET

El objeto DATASET es esencial para admitir escenarios de datos distribuidos de ADO.NET sin mantener una conexión. El DataSet es una representación residente en memoria de datos que proporciona un modelo de programación relacional coherente independiente del origen de datos. 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 representa un conjunto completo de datos entre los que se incluyen tablas relacionadas, restricciones y relacionales en la tabla.

Entonces se podría decir que el DATASET es una pequeña base de datos relacional mantenida en memoria en el cliente. Dispone de las capacidades de crear múltiples tablas, rellenarlas con datos que preceden de diferentes fuentes, imponer relaciones entre pares de tablas, etc.

Modelo esquemático del DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 18/122Email:[email protected]

Page 19: Libroado.net

I.E.S. CESCA(ADO.NET)

ADO.NET (Lab)Estudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset

Objetivo:Al término de esta separata el alumno será capas de manejar los objetos:

OleDbdataAdapter SqlDataAdapter Dataset

1) Guardar la BD “Control de Ventas” en el Disco “D” Brindada por docente.2) Luego abrir el visual studio crear un nuevo proyecto de tipo aplicación para

Windows y diseñar el siguiente interfaz:

Importar el NameSpace OleDB en el ámbito de importaciones

Imports System.Data.SqlClient

Declarar las siguientes Variables en el ámbito a nivel de clase:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Control de Ventas.mdb") Dim ds As New DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 19/122Email:[email protected]

Page 20: Libroado.net

I.E.S. CESCA(ADO.NET)

En el botón “Ver Cliente” codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select * From Clientes", cn)da.Fill(ds, "Cliente")dgdCliente.DataSource = ds.Tables(0)

En el botón “Ver Producto” codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select * From Productos", cn)da.Fill(ds, "Productos")dgdProductos.DataSource = ds.Tables(1)Propuesto:

Diseñar la siguiente interfaz y practicar lo aprendido!!!Nota: hacer uso de un solo DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 20/122Email:[email protected]

Page 21: Libroado.net

I.E.S. CESCA(ADO.NET)

Laboratorio Practico

Usando las funciones Max, Min, AVG, Count desde Access:

Max (Campo): permite traer el máximo valor del conjunto de filas.Min (Campo): permite traer el mínimo valor del conjunto de filas.Avg (Campo): permite traer el promedio del todo conjunto de filas.Count(Campo): permite traer la cantidad de filas.

Ejemplo 01:

Usar la BD Ventas

En el ámbito de importaciones importar el siguiente NameSpace:

Imports System.Data.OleDb

En el ámbito a nivel de clase declarar la siguiente variable:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Ventas.mdb")

Dim ds As New DataSet

En el botón consultar evento click codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select Count(CodigoProducto),Min(PrecioUnidad),Max(PrecioUnidad),AVG(PrecioUnidad) From Productos", cn)

da.Fill(ds, "Producto")txtTotal.Text = CDec(ds.Tables(0).Rows(0)(0))txtPrecioMinimo.Text = CDec(ds.Tables(0).Rows(0)(1)).ToString("n2")txtPrecioMaximo.Text = CDec(ds.Tables(0).Rows(0)(2)).ToString("n2")txtPrecioPromedio.Text = CDec(ds.Tables(0).Rows(0)(3)).ToString("n2")

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 21/122Email:[email protected]

Page 22: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 02:

Diseñar la siguiente interfaz:

Modificar las siguientes propiedades de los DataGridView:

Control Propiedad ValordgdProducto SelectionMode FullRowSelect

ReadOnly TrueRowHeaderVisible FalseAllowUserToDeleteRows FalseAllowUserToAddRows False

Aplicar las mismas propiedades para los DataGridView que falta:

En el ámbito de importaciones importar el siguiente NameSpace:

Imports System.Data.OleDb

En el ámbito a nivel de clase declarar la siguiente variable:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Ventas.mdb")

Dim ds As New DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 22/122Email:[email protected]

Page 23: Libroado.net

I.E.S. CESCA(ADO.NET)

Crear el siguiente procedimiento debajo de un End Sub ojo debajo de un End Sub:

Rem este procedimiento permite que las columnas no permitan ordenarPrivate Sub QuitarOrdenGrid(ByVal dgv As DataGridView) Dim I As Integer For I = 0 To dgv.Columns.Count - 1 dgv.Columns(I).SortMode = DataGridViewColumnSortMode.NotSortable NextEnd Sub

En el evento load del formulario codificar lo siguiente:

Dim da1 As New OleDbDataAdapter("Select CodigoProducto,NombreProducto From Productos Order by CodigoProducto desc", cn)

da1.Fill(ds, "Producto")Dim da2 As New OleDbDataAdapter("Select CodigoCliente,NombreCliente,NombreContacto

From Clientes", cn)

da2.Fill(ds, "Cliente")Dim da3 As New OleDbDataAdapter("Select IdCargo,Cargo From Cargos Order by IdCargo

desc", cn)da3.Fill(ds, "Cargo")

dgdProducto.DataSource = ds.Tables("Producto")QuitarOrdenGrid(dgdProducto)dgdCliente.DataSource = ds.Tables("Cliente")QuitarOrdenGrid(dgdCliente)dgdCargos.DataSource = ds.Tables("Cargo")QuitarOrdenGrid(dgdCargos)

En el evento Click del botón salir codificar lo siguiente:

If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes Then

Application.Exit()

End If

Definir las siguientes propiedades del control DataGridView

Selection Mode=FullRowSelect: …………………………………………………………...ReadOnly: …………………………………………………………………………………...RowHeaderVisible: ………………………………………………………………………….AllowUserToDeleteRows: …………………………………………………………………..AllowUserToAddRows: …………………………………………………………………….AllowUserToResizeColumns: ………………………………………………………………AllowUserToResizeRows: ……………………………………………………………………

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 23/122Email:[email protected]

Page 24: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIDataset

Objetivo:Al término de esta separata el participante conocerá:

Conocer el objeto Dataset Conocer sus propiedades metodos del Dataset

DataSetDataSet, que es una caché de memoria interna de datos recuperados de un origen de datos, representa un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Para obtener información más detallada sobre el trabajo con objetos DataSet.

Los objetos DataTable contienen los datos, mientras que DataRelationCollection permite desplazarse por la jerarquía de la tabla. Las tablas están incluidas en un DataTableCollection al que se obtiene acceso a través de la propiedad Tables. Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina "mydatatable" y otro "Mydatatable", la cadena que se utilice para buscar una de las tablas se considerará que distingue entre mayúsculas y minúsculas. Sin embargo, si existe "mydatatable" pero no existe "Mydatatable", se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas.

Principales Propiedades del objeto Dataset

Tables: Obtiene la colección de tablas incluidas en DataSet.

Relations: Obtiene la colección de relaciones que vincula las tablas y permite el desplazamiento desde las tablas primarias a las secundarias.

Principales Métodos del objeto Dataset

AcceptChanges:

Confirma todos los cambios realizados en este DataSet desde que se ha cargado o desde la última vez que se ha llamado a AcceptChanges.

Clear

Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 24/122Email:[email protected]

Page 25: Libroado.net

I.E.S. CESCA(ADO.NET)

HasChanges: Sobrecargado. Obtiene un valor que indica si DataSet presenta cambios, incluyendo filas nuevas, eliminadas o modificadas.

Load:

Sobrecargado. Rellena un objeto DataSet con valores de un origen de datos utilizando la interfaz IDataReader proporcionada.

ReadXML

Sobrecargado. Lee esquema y datos XML en el objeto DataSet.

ReadXmlSchema

Sobrecargado. Lee un esquema XML en el DataSet.

WriteXML

Sobrecargado. Escribe datos XML y, de forma opcional, el esquema del DataSet.

WhiteXmlSchema

Sobrecargado. Escribe la estructura del DataSet como un esquema XML.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 25/122Email:[email protected]

Page 26: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IITrabajando en Forma desconectada

Objetivo:Al término de esta separata el participante conocerá:

Trabajar en forma desconectada

Diseñar el siguiente Formulario

1) Guardar la base de datos Ventas en el disco D.

2) Modificar algunas propiedades de los controles.

Modificar los controles Button su propiedad Cursor = HandModificar las propiedades del control dgvClientes

SelectionMode=FullRowSelectReadOnly=True

3) En el ámbito a de importaciones importar el NameSpace:

Imports System.Data.OleDb

4) En el ámbito a nivel de clase codificar lo siguiente:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")Dim da As OleDbDataAdapterDim ds As New DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 26/122Email:[email protected]

Page 27: Libroado.net

I.E.S. CESCA(ADO.NET)

5) En el evento Load del formulario codificar lo siguiente:

Dim strsql As String = "Select CodigoCliente,NombreCliente,NombreContacto,CargoContacto From Clientes"

da = New OleDbDataAdapter(strsql, cn) da.Fill(ds, "Cliente") Dim cmdx As New OleDbCommandBuilder(da) dgvClientes.DataSource = ds.Tables(0)

6) En el evento click del botón Nuevo

txtCod.Text = ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1)(0) + 1txtClie.Clear()txtCargo.Clear()txtConta.Clear()txtClie.Focus()

7) En el evento click del botón Adicionar

Dim dr As DataRow = ds.Tables(0).NewRowdr.BeginEdit()dr(0) = txtCod.Textdr(1) = txtConta.Textdr(2) = txtClie.Textdr(3) = txtCargo.Textdr.EndEdit()ds.Tables(0).Rows.Add(dr)

8) En el evento click del botón Actualizar

Dim fila As DataRow = dst.Tables(0).Rows(dgvEmpleado.CurrentRow.Index)fila.BeginEdit()fila(1) = txtApellido.Textfila(2) = txtNombre.Textfila(3) = dtpFechaNac.Valuefila.EndEdit()

9) En el evento click del botón Eliminar

Dim pos As Integer = dgvClientes.CurrentRow.Indexds.Tables(0).Rows(pos).Delete()MessageBox.Show("Registro Eliminado con Exito", "Eliminado", MessageBoxButtons.OK)

10) En el evento click del botón “Guardar Cambios”

If ds.HasChanges = True Thencn.Open()da.Update(ds, "Cliente")ds.Tables(0).Clear()da.Fill(ds, "Cliente")cn.Close()MessageBox.Show("Registros Actualizados", "Actualizados", MessageBoxButtons.OK)

End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 27/122Email:[email protected]

Page 28: Libroado.net

I.E.S. CESCA(ADO.NET)

11) En el evento click del botón “Mostrar Cambios”

Dim frm As New FormDim dgv As New DataGridViewdgv.DataSource = ds.Tables(0).GetChangesfrm.Text = "Lista de Cambios en la Tabla"dgv.Dock = DockStyle.Fillfrm.Controls.Add(dgv)frm.ShowDialog()

12) En el evento click del botón “Salir”

Dim res As DialogResultres = MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Information)If res = Windows.Forms.DialogResult.Yes ThenApplication.Exit()End If

13) Ah probar la aplicación Propuesto hacer lo mismo pero con la tabla Proveedores con todos sus campos.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 28/122Email:[email protected]

Page 29: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIEstudiando el objeto DataView

Objetivo:

Conocer el objeto DataView

Un dataview me permite crear múltiples vistas de uno o más objetos datatable los objetos daview son los objetos de datos que se vinculan con los controles nos estamos vinculado directamente el dataset sino alguna de vistas que el dataset puede exponer.

La clase Dataview representa una vista personalizada que une datos de un DataTable para clasificar, filtrar, editar y navegar. Un DataView es similar a una vista de un DataTable, que permite a los programadores establecer un orden clasificado y filtrar en una vista de la tabla aparte.

ADO.NET proporciona un número de DataViews para habilitar distintas vistas de la misma tabla y utilizarlas.

Un DatasetView es similar a una vista en la parte superior del DataSet y permite a los programadores establecer un orden predeterminado y filtrar las tablas individuales. Además permite a los Dataviews vincularse y utilizarse para DataBinding. De manera clasifica, la unión de datos se utilizaba dentro de las aplicaciones para aprovechar los datos almacenados en las bases de datos.

La unión de datos de Windows Forms le permite acceder a los datos desde bases de datos, así como a los datos en otras estructuras, como arreglos y colecciones (suponiendo que se han cumplido un mínimo de requerimientos).

Básicamente un dataview posee como propiedades importantes:

ITEM: Obtiene una fila de una tabla determina (ROW)TABLE: Obtiene o asigna el objeto DataTableSORT: Obtiene o asigna la/s Columna/s y el ordenamiento

RowFilter: obtiene o asigna la expresión para filtrar la vista

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 29/122Email:[email protected]

Page 30: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIRealizando Búsquedas de datos

Objetivo:

Conocer el objeto DataView Conocer sus propiedades Uso de la clase BindingSource

Laboratorio PrácticoEjemplo 01:

La guardar la BD ventas en el disco “D”

Diseñar el siguiente formulario:

Ahora lo que más nos gusta codificar:

En al ámbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 30/122Email:[email protected]

RBcodigo RBNombreProducto RBPrecioUnidad

txtBuscar

Page 31: Libroado.net

I.E.S. CESCA(ADO.NET)

En el ámbito ah nivel de clase codificar lo siguiente:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")

Dim bs As New BindingSourceDim dv As DataView

En el evento Load del formulario codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select CodigoProducto,NumeroProveedor,NombreProducto,IdCategoriaProducto,PrecioUnidad,UnidadesExistencia,

UnidadesPedidas From Productos", cn) Dim ds As New DataSet da.Fill(ds, "Productos") 'Creando la vista de Productos dv = ds.Tables(0).DefaultView 'Crear y Enlazar el BindingSource bs.DataSource = dv 'Ordenar la vista por Nombre para hacer busquedas dv.Sort = "CodigoProducto" 'Enlazando el BindingSource al DataGridView dgvProductos.DataSource = bs

En el evento TextChanged del control TxtBuscar codificar lo siguiente:

Dim pos As Integer If txtBuscar.Text <> "" Then Dim dr() As DataRow If RBcodigo.Checked Then dr = dv.Table.Select("CodigoProducto=" & txtBuscar.Text) If dr.Length > 0 Then pos = dv.Find(txtBuscar.Text) End If ElseIf RBNombreProducto.Checked Then dr = dv.Table.Select("NombreProducto Like'" & txtBuscar.Text & "%'") If dr.Length > 0 Then pos = dv.Find(dr(0)("NombreProducto")) End If ElseIf RBPrecioUnidad.Checked Then dr = dv.Table.Select("PrecioUnidad=" & txtBuscar.Text) If dr.Length > 0 Then pos = dv.Find(dr(0)("PrecioUnidad")) End If End If If pos > -1 Then bs.Position = pos End If

En el evento CheckedChanged de RBcodigo

If RBcodigo.Checked Thendv.Sort = "CodigoProducto"

End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 31/122Email:[email protected]

Page 32: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento CheckedChanged de RBNombreProducto

If RBcodigo.Checked Thendv.Sort = " NombreProducto desc"

End If

En el evento CheckedChanged de RBPrecioUnidad

If RBPrecioUnidad.Checked Thendv.Sort = "PrecioUnidad asc"

End If

En el evento CellFormatting del control dgvProductos

If e.RowIndex Mod 2 = 0 Then dgvProductos.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.PaleGreenEnd If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 32/122Email:[email protected]

Page 33: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 02:

Diseñar el siguiente formulario:

Ahora lo que más nos gusta codificar:

En el ámbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

En el ámbito ah nivel de clase codificar lo siguiente:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")

Dim bs As New BindingSourceDim dv As DataViewDim TipoDato as String

Crear los siguientes procedimientos:

Rem Procedimiento para quitar el ordenamientoPrivate Sub QuitarOrdenacion(ByVal dgv As DataGridView)

For i As Integer = 0 To dgv.Columns.Count - 1dgvPedido.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortableNext

End Sub

Rem Procedimiento para llenar el comboboxPrivate Sub ListarCampos()

For i As Integer = 0 To dv.Table.Columns.Count - 1cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)Next

End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 33/122Email:[email protected]

Page 34: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento Load del formulario codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select NumeroPedido,CodigoCliente,NumeroEmpleado,FormaEnvio,FechaEnvio,FechaEntrega,ImportePedido,

GastoEnvio From Pedidos", cn)

Dim ds As New DataSetda.Fill(ds, "Pedido")'Llenamos la vistadv = ds.Tables(0).DefaultView'Enlazamos el BindingSource con la vistabs.DataSource = dv'Llenamos la GrilladgvPedido.DataSource = bsListarCampos()QuitarOrdenacion(dgvPedido)

En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:

dv.Sort = cboCriterio.TextTipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name.ToStringtxtBuscar.Clear()

En el evento TextChanged del control txtBuscar codificar lo siguiente:

Dim pos As IntegerIf txtBuscar.Text <> "" ThenDim dr() As DataRow

If TipoDato = "Int16" OrElse TipoDato = "Int32" OrElse TipoDato = "Int64" OrElse TipoDato = "Decimal" Then

dr = dv.Table.Select(cboCriterio.Text & "=" & txtBuscar.Text)If dr.Length > 0 Thenpos = dv.Find(dr(0)(cboCriterio.Text))End If

ElseIf TipoDato = "String" Thendr = dv.Table.Select(cboCriterio.Text & " Like'" & txtBuscar.Text & "%'")If dr.Length > 0 Thenpos = dv.Find(dr(0)(cboCriterio.Text))End If

ElseIf TipoDato = "DateTime" ThenIf txtBuscar.Text.Length = 10 ThenIf IsDate(txtBuscar.Text) Thenpos = dv.Find(txtBuscar.Text)ElseMessageBox.Show("Ingrese Una Fecha Valida")End IfEnd If

ElseIf TipoDato = "Boolean" ThenIf txtBuscar.Text = "1" Or txtBuscar.Text = "0" Thendr = dv.Table.Select(cboCriterio.Text & "=" & txtBuscar.Text)pos = dv.Find(dr(0)(cboCriterio.Text))ElseMessageBox.Show("Ingrese uno o cero")txtBuscar.Clear()End IfEnd IfIf pos > -1 Then bs.Position = pos

End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 34/122Email:[email protected]

Page 35: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento DoubleClick del control dgvPedido codificar lo siguiente:

'Creamos un FormularioDim frmDetalle As New Form'Modificamos sus propiedades del frmDetallesfrmDetalle.Text = "Detalles de Pedidos"frmDetalle.Width = 600frmDetalle.Height = 200frmDetalle.StartPosition = FormStartPosition.CenterScreen'Creamos una DataGridViewDim dgv As New DataGridView'Modificamos sus propiedades del dgvdgv.SelectionMode = DataGridViewSelectionMode.FullRowSelectdgv.ReadOnly = Truedgv.Dock = DockStyle.Fill'Declaramos una variable para capturar el codigoDim codigo As Integer = dgvPedido.CurrentRow.Cells(0).Value'Creamos una consulta

Dim da As New OleDbDataAdapter("Select * From [Detalles de Pedidos] Where NumeroPedido=" & codigo, cn)

Dim ds As New DataSet'LLenamos el DataSetda.Fill(ds, "Detalles")'Enlazamos el dataset con el dgvdgv.DataSource = ds.Tables(0)'Agregamos el dgv al Formulario frmDetallefrmDetalle.Controls.Add(dgv)'Mostramos el FormulariofrmDetalle.ShowDialog()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 35/122Email:[email protected]

Page 36: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIManejo de DataView con MS-Access

ObjetivoAl término de esta separata el alumno tendrá el conocimiento de:

Manejo de filtros con DataView

Filtros con DataView

Ejemplo 01:

Diseñar el siguiente formulario:

Modificar las siguientes propiedades de dgvEmpleados:

SelectionMode=FullRowSelectReadOnly=TrueAnchor = activar todos los bordes

Ahora lo que más nos gusta codificar:

En al ámbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 36/122Email:[email protected]

Page 37: Libroado.net

I.E.S. CESCA(ADO.NET)

En el ámbito ah nivel de clase codificar lo siguiente:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")

Dim bs As New BindingSourceDim dv As DataView

En el evento Load del formulario codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select NumeroEmpleado,Apellidos,Nombres,IdCargo,Edad,FechaContratacion From Empleados", cn)

Dim ds As New DataSetda.Fill(ds, "Personal")dv = ds.Tables(0).DefaultViewbs.DataSource = dvdgvEmpleados.DataSource = dvLblTot.Text = dv.Table.Rows.Count

En el evento TextChanged del control txtFiltro codificar lo siguiente:

If txtFiltro.Text.Trim <> "" Thendv.RowFilter = "Apellidos Like'" & txtFiltro.Text & "%'"

Elsedv.RowFilter = ""

End IfLblTot.Text = dgvEmpleados.Rows.Count

Ah probar la aplicación.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 37/122Email:[email protected]

Page 38: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 01:

Diseñar el siguiente formulario:

Modificar las siguientes propiedades de dgvProducto:

SelectionMode=FullRowSelectReadOnly=TrueAnchor = activar todos los bordes

Ahora lo que más nos gusta codificar:

En al ámbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

En el ámbito ah nivel de clase codificar lo siguiente:

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")

Dim bs As New BindingSourceDim dv As DataView

Crear los siguientes procedimientos:

REM procedimiento para quitar la ordenación

Private Sub QuitarOrdenacion(ByVal dgv As DataGridView) For i As Integer = 0 To dgv.Columns.Count - 1 dgvProducto.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable NextEnd Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 38/122Email:[email protected]

Page 39: Libroado.net

I.E.S. CESCA(ADO.NET)

REM procedimiento para listar los campos dentro del combobox cbocriterioPrivate Sub ListarCampos()

For i As Integer = 0 To dv.Table.Columns.Count - 1cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)

NextEnd Sub

En el evento Load del formulario codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select CodigoProducto,NumeroProveedor,NombreProducto,IdCategoriaProducto,PrecioUnidad,UnidadesExistencia,

UnidadesPedidas From Productos", cn)Dim ds As New DataSetda.Fill(ds, "Productos")'Creando la vista de Productosdv = ds.Tables(0).DefaultView'Crear y Enlazar el BindingSourcebs.DataSource = dv'Ordenar la vista por Nombre para hacer busquedasdv.Sort = "CodigoProducto"'Enlazando el BindingSource al DataGridViewdgvProducto.DataSource = bsQuitarOrdenacion(dgvProducto)ListarCampos()

En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:

REM ordeno segun el criterio y obtengo el tipo de datodv.Sort = cboCriterio.TextTipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name

En el evento TextChanged del control txtFiltro codificar lo siguiente:

If txtFiltro.Text.Trim <> "" ThenREM si el tipodato es numerico

If TipoDato = "Int32" Or TipoDato = "Int16" Or TipoDato = "Int64" Or TipoDato = "Decimal" Then

dv.RowFilter = cboCriterio.Text & "=" & txtFiltro.Text

ElseIf TipoDato = "String" Then 'si el tipo dato es Cadena

dv.RowFilter = cboCriterio.Text & " Like'" & txtFiltro.Text & "%'"

ElseIf TipoDato = "DateTime" Then 'si el tipo dato es FechaIf txtFiltro.Text > 10 Then

If IsDate(txtFiltro.Text) Thendv.RowFilter = cboCriterio.Text & "='" & txtFiltro.Text & "'"ElseMessageBox.Show("Ingrese una Fecha Valida", "Ingrese")End If

End IfEnd IfElse

dv.RowFilter = ""End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 39/122Email:[email protected]

Page 40: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IITrabajar Forma Administrada

Objetivo:Al término de esta separa el alumno conocera:

Como trabajar en forma administrada

Potenciando nuestro adaptador de datosLa 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 SqlDataApadter 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 especificó según la acción del comando.

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

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

Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.SelectCommand=SqlCommand

SqlDataAdapter.InsertCommandObtiene 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 inserccion],[Conexion])sqlDataAdapter.InsertCommand=SqlCommand

SqlDataAdapter.DeletecommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar registros de un conjunto de datos.

Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.Deletecommand=SqlCommand

SqlDataAdapter.UpdateCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para actualizar las registros de la base de datos.

Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.UpdateCommand=SqlCommand

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 40/122Email:[email protected]

Page 41: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IITrabajando en Forma Administrada

Objetivo:Al término de esta separata el participante conocerá:

Trabajar correctamente con el adaptador de datos en forma desconectado Uso del Dataset

Empecemos a desarrollar:

Abrir el SQL server y codificar lo siguiente:

use master go create database VentasPerugouse VentasPerugoCreate table Productos(CodPro char(8)Primary key,DesPro char(50),StockMin int,StockMax int,StockActual int,PrecVenta decimal(10,5))go

Insert into Productos Values('PR000001','Laptos',10,150,20,12.36)Insert into Productos Values('PR000002','Monitores',10,150,20,150.36)Insert into Productos Values('PR000003','Mouses',10,150,20,10.36)Insert into Productos Values('PR000004','Teclados',10,150,20,7.36)Go

/* Ejecutamos las lineas de codigo bloque por bloque?? */

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 41/122Email:[email protected]

Page 42: Libroado.net

I.E.S. CESCA(ADO.NET)

Crear un nuevo proyecto y diseñar la siguiente interfas:

Declarar las siguientes variables en el ámbito a nivel de clase.

Dim cn As New SqlConnection("User id=sa;Server=.;Database=VentasPeru;Integrated security=true")Dim ds As New DataSetDim da As New SqlDataAdapter

En el evento load del formulario colocaremos lo siguiente:

Try

cn.Open() Dim xComand As New SqlCommand("Select * From Productos", cn) With xComand .CommandType = CommandType.Text End With da.SelectCommand = xComand da.Fill(ds, "Productos") REM para la eliminacion xComand = New SqlCommand("Delete From Productos Where CodPro=@CodPro", cn) xComand.CommandType = CommandType.Text xComand.Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro") da.DeleteCommand = xComand

REM para la inserccion xComand = New SqlCommand("Insert into Productos(CodPro,DesPro,StockMin,StockMax,StockActual,PrecVenta)values(@CodPro,@DesPro,@StockMin,@StockMax,@StockActual,@PrecVenta)", cn)

With xComand .CommandType = CommandType.Text .Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro")

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 42/122Email:[email protected]

DgdProductos

Page 43: Libroado.net

I.E.S. CESCA(ADO.NET)

.Parameters.Add("@DesPro", SqlDbType.Char, 50, "DesPro") .Parameters.Add("@StockMin", SqlDbType.Int, 0, "StockMin") .Parameters.Add("@StockMax", SqlDbType.Int, 0, "StockMax") .Parameters.Add("@StockActual", SqlDbType.Int, 0, "StockActual") .Parameters.Add("@PrecVenta", SqlDbType.Decimal, 0.1, "PrecVenta") End With da.InsertCommand = xComand

REM para la Actualizacion xComand = New SqlCommand("Update Productos Set DesPro=@Despro,StockMin=@StockMin,StockMax=@StockMax,StockActual=@StockActual,PrecVenta=@PrecVenta Where CodPro=@CodPro", cn) With xComand .CommandType = CommandType.Text .Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro") .Parameters.Add("@DesPro", SqlDbType.Char, 50, "DesPro") .Parameters.Add("@StockMin", SqlDbType.Int, 0, "StockMin") .Parameters.Add("@StockMax", SqlDbType.Int, 0, "StockMax") .Parameters.Add("@StockActual", SqlDbType.Int, 0, "StockActual") .Parameters.Add("@PrecVenta", SqlDbType.Decimal, 0, "PrecVenta") End With da.UpdateCommand = xComand

dgdProductos.DataSource = ds.Tables(0)

Catch ex As Exception MessageBox.Show(ex.Message) End Try

En el botón modificar colocamos lo siguiente:

If ds.HasChanges Then da.Update(ds, "Productos") MessageBox.Show("Los canbios fueron realizados", _ "Mantenimiento Productos", MessageBoxButtons.OK, _ MessageBoxIcon.Information)End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 43/122Email:[email protected]

Page 44: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo de Vistas AdministradosEjemplo1:Crear la BD y la tabla Productos:use master go create database VentasPerugouse VentasPerugoCreate table Productos(CodPro char(8)Primary key,DesPro char(50),StockMin int,StockMax int,StockActual int,PrecVenta decimal(10,5))goInsert into Productos Values('PR000001','Laptos',10,150,20,12.36)Insert into Productos Values('PR000002','Monitores',10,150,20,150.36)Insert into Productos Values('PR000003','Mouses',10,150,20,10.36)Insert into Productos Values('PR000004','Teclados',10,150,20,7.36)go--Select * From Productos

Crear un proyecto windows y diseñar la siguiente interfaz:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 44/122Email:[email protected]

Page 45: Libroado.net

I.E.S. CESCA(ADO.NET)

Recuerda si ves en control TABControl tiene 5 pestañas bien cada pestaña tiene un DataGridView si quieres ver el ejemplo esta junto con este ejemplo y lo chekeas o si no pasas la voz al profesor.

Sigamos:

Codificar lo que más nos gusta:

En el ámbito de importaciones Importar el NameSpace:

Imports System.Data.SqlClient

En el ámbito a nivel de clase declarar la cadena de conexión:

Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=12345678")

Dim da As New SqlDataAdapter("Select CodPro,DesPro,StockMin,StockMax,StockActual,PrecVenta From Productos", cn) Dim ds As New DataSet

En el evento Load del formulario codificar lo siguiente:

Tryda.Fill(ds, "Productos")DgdCliente.DataSource = ds.Tables(0)REM Vista SimpleDim dvVista As New DataViewWith dvVista.Table = ds.Tables(0).AllowDelete = False.AllowEdit = True.AllowNew = True.RowFilter = "".Sort = "CodPro Desc"End WithDgdfiltrado.DataSource = dvVista

REM Vista Original que no han sido ModificadoDim dvVistaOriginal = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.Unchanged)dgdNoModi.DataSource = dvVistaOriginalREM ModificadosDim dvModofi = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.CurrentRows)dgdModi.DataSource = dvModofi

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 45/122Email:[email protected]

Page 46: Libroado.net

I.E.S. CESCA(ADO.NET)

REM Modificados OriginalesDim dvModoOri = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.ModifiedOriginal)dgdOriModi.DataSource = dvModoOriREM EliminadosDim dvEliminados = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.Deleted)DgdEliminados.DataSource = dvEliminados

Catch ex As ExceptionMessageBox.Show(ex.Message)

End Try

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 46/122Email:[email protected]

Page 47: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIManejo de BindingContext y DataBindings

ObjetivoAl término de esta separata el alumno tendrá el conocimiento de:

Conocer los conceptos de BindingContext y DataBindings Conocer métodos y propiedades

BindingContext

Propiedad de la clase form que representa el contexto de enlace a datos establecido en los controles del formulario, es decir, toda la información de enlaces establecida entre los controles y objetos proveedores de datos. Devuelve un objeto de tipo BindingManagerBase o administrador de base de enlace a datos.

Cada objeto que herede de la clase control puede tener un solo objeto BindingContext. Ese objeto BindingContext administra los objetos de BindingManagerBase para ese control y cualquier control que este incluido. Hay que utilizar BindingContext con el fin de crear o devolver BindingManagerBase para un objeto de datos utilizado por los controles con enlace a datos incluidos. Normalmente, se utiliza el objeto BindingContext de la clase form con el fin de devolver objetos BindingManagerBase para los controles con enlace a datos del formulario.

Si se utiliza un control contenedor, como Groupbox, panel, o tabcontrol, para incluir controles con enlace a datos, se puede crear un objeto BindingContext solo para ese control contenedor y sus controles. De este modo, cada parte de un formulario puede ser administrada por su propio objeto BindingMangerBase.

Ejemplo de cómo usarlo

me.BindingContext(<Dataset>,<nombre tabla>)

Este objeto es el que mantiene la posición actual en la lista de datos. Las dos propiedades mas importantes de los objetos de esta clase son:

Position: Devuelve o establece la fila actual (hay que tener en cuenta que la primera fila tiene indice 0)

Count: Devuelve el numero de filas existentes

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 47/122Email:[email protected]

Page 48: Libroado.net

I.E.S. CESCA(ADO.NET)

DataBinding

Los controles que con regularidad se utilizan en aplicaciones Windows asi como en aplicaciones Web tienen una propiedad DataBinding, es necesario configurar la propiedad de cada control que contenga el enlace a los datos, luego para administrar esta se debe utilizar la propiedad BindingContext de la clase contenedora. Al usar el BindingContext obtiene el BindingManagerBase que mantiene sincronizados todos los controles enlazados al mismo origen de datos, se puede utilizar la propiedad position del BindingManagerBase para especificar el elemento actualmente seleccionado de una lista.

Sintaxis:

Control.DataBindings.Add(<Propiedad a utilizar>,<Origen de Datos tabla o Dataset>,<Campo a enlsar>)

Por ejemplo

Para enlazar una caja de texto con el campo NomDis de la tabla Distrito (DTDistrito) contenida en dataset previamente utilizo la siguiente instrucción.

Me.TxtDistrito.DataBindings.Add("Text", ds.tables(0), "NomDis")

Luego para administrar por ejemplo la posición actual o lo que es lo mismo el registro activo se utiliza la siguiente instrucción.

Me.BindingContext(ds.tables(0)).Position +=0

Note en la instrucción anterior que se utiliza la propiedad BindingContext del formulario, como lo dicho en las líneas de arriba, la propiedad position va a mantener sincronizados los controles enlazados al Dataset

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 48/122Email:[email protected]

Page 49: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IITrabajo con bindingContext y DataBindings

Objetivo:

Implementar BindingContext y DataBinding en los controles del formulario Usar adecuadamente el desplazamiento de registros en un DataSet

Ejercicio:

Utilizar la base de datos almacén y crear el siguiente Store

Create proc Usp_Traer_ClienteasSelect C.CodClie,C.ApeClie,C.NomClie,C.DirClie,D.NomDis,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from Cliente Cinner join Distrito D on C.CodDis=D.CodDis

Crear un proyecto de tipo WindowsForm, con nombre DataBinding

Pasos

1.- Diseñar la siguiente Internas:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 49/122Email:[email protected]

Page 50: Libroado.net

I.E.S. CESCA(ADO.NET)

Codificar:

En el general del formulario.Imports System.Data.SqlClient

A nivel de clase:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=true")

Dim da As New SqlDataAdapter("Usp_Traer_Cliente", cn)Dim ds As New DataSet

REM procedimiento para mostrar registro activoPrivate Sub Registro(ByVal posicion As Integer) lblregistro.Text = "Registro " & posicion.ToString & " de " _ & Me.BindingContext.Item(ds.Tables(0)).Count.ToStringEnd Sub

En el load del formulario.

da.Fill(ds, "Cliente") txtCodClie.DataBindings.Add("Text", ds.Tables("Cliente"), "CodClie") txtApeClie.DataBindings.Add("Text", ds.Tables("Cliente"), "ApeClie") txtNomClie.DataBindings.Add("Text", ds.Tables(0), "NomClie") txtDireccion.DataBindings.Add("Text", ds.Tables("Cliente"), "DirClie") txtDistrito.DataBindings.Add("Text", ds.Tables("Cliente"), "NomDis") txtTelefono.DataBindings.Add("Text", ds.Tables("Cliente"), "TelClie") txtDNI.DataBindings.Add("Text", ds.Tables("Cliente"), "DniClie") txtEmail.DataBindings.Add("Text", ds.Tables("Cliente"), "EmaiClie") txtRUC.DataBindings.Add("Text", ds.Tables("Cliente"), "RucClie") dgdcliente.DataSource = ds.Tables(0) Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))

En el evento Clic del botón “Primer” Me.BindingContext(Me.ds.Tables(0)).Position = 0 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))

En el evento Clic del botón “Anterior” Me.BindingContext(Me.ds.Tables(0)).Position -= 1 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))

En el evento Clic del botón “Siguiente” Me.BindingContext(Me.ds.Tables(0)).Position += 1 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))

En el evento clic del botón “Ultimo” Me.BindingContext(ds.Tables(0)).Position = ds.Tables(0).Rows.Count Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 50/122Email:[email protected]

Page 51: Libroado.net

I.E.S. CESCA(ADO.NET)

Propiedades principales del controlListBox y Combobox

Objetivo:Al término de esta separata el alumno Conocerá:

Conocer propiedades de enlace a datos. Uso del control ListBox y Combobox con una fuente de datos.

Listbox y ComboboxPropiedades:

DisplaymenverObtiene o establece la propiedad que se va a mostrar desde el origen de Datos

DataSourceObtiene o establece el origen de datos.

ValueMemberObtiene o establece la propiedad que se utilizara como valor real para los elementos del control.

SelectedValue Obtiene o establece el valor del control según la configuracion..

SelectedIndexObtiene o establece el indice que espesifica el elemento seleccionado.Ejemplo 01

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 51/122Email:[email protected]

TxtValor1 TxtValor2

Page 52: Libroado.net

I.E.S. CESCA(ADO.NET)

Usar la BD Almacen osea Restaurarla Ok!!!!

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET

Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds As New DataSet

Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM

En el evento Load Codificar lo siguiente:

TryREM Procedimiento para Listar DistritoREM Consulta a la tabla DistritoDim da As New SqlDataAdapter("Select CodDis,NomDis From Distrito", cn)REM espesifico el tipo de comandoda.SelectCommand.CommandType = CommandType.TextREM LLenado de datosda.Fill(ds, "Dis")REM Enlazando los datos con el ListBox y configurandoListBox1.DataSource = ds.Tables(0)ListBox1.DisplayMember = "NomDis"ListBox1.ValueMember = "CodDis"

Rem Listado del comboboxDim da2 As New SqlDataAdapter("Select CodClie,(Rtrim(ApeClie) + ','+NomClie) as NomCom From Cliente", cn)da2.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda2.Fill(dt)ComboBox1.DataSource = dtComboBox1.DisplayMember = "NomCom"ComboBox1.ValueMember = "CodClie"

Catch ex As ExceptionMessageBox.Show(ex.Message)

End Try

En el evento SelectedIndexChanged del ListBox codificar lo siguiente:

TrytxtValor1.Text = ListBox1.SelectedValue

Catch ex As ExceptionEnd Try

Has lo mismo para el control Combobox Ok

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 52/122Email:[email protected]

Page 53: Libroado.net

I.E.S. CESCA(ADO.NET)

Consultas en ambiente desconectado

Objetivo:Al término de esta separata el alumno Conocerá:

Implementar sentencias SQL Uso del objeto Dataset

Ejemplo 01

Diseñar la siguiente interfaz:

Usar la BD Almacen osea Restaurarla Ok!!!!

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET

Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds As New DataSet

Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 53/122Email:[email protected]

Page 54: Libroado.net

I.E.S. CESCA(ADO.NET)

Crear los siguientes procedimientos:

Private Sub ListarCliente()Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis,TelClie,DniClie, EmaiClie,RucClie From Cliente", cn)

da.SelectCommand.CommandType = CommandType.Textda.Fill(ds, "Clientes")DataGridView1.DataSource = ds.Tables(0)End Sub

Private Sub ListarClientexCodigo()Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis,TelClie,DniClie, EmaiClie,RucClie From Cliente Where CodClie='" & Me.TextBox1.Text & "'", cn)

da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dt

End Sub

En el evento Load del formulario codificar lo siguiente:

TryListarCliente()

Catch ex As Exception

End Try

En el evento Click del botón Buscar

ListarClientexCodigo()

Por ultimo ejecutar!!!

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 54/122Email:[email protected]

Page 55: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 02

Usar la BD Almacen osea Restaurarla Ok!!!!

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET

Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")

Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM

Crear los siguientes procedimientos:

Rem Procedimiento para Listar Articulos

Private Sub ListarArticulo()Dim da As New SqlDataAdapter("SelectCodArti,DesArti,StockMin,StockMax,StockActual,PrecVenta,CodPer,Eliminado From Articulo", cn)da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSetda.Fill(ds, "Clientes")DataGridView1.DataSource = ds.Tables(0)End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 55/122Email:[email protected]

Page 56: Libroado.net

I.E.S. CESCA(ADO.NET)

Rem Procedimiento para Filtrar Los Articulos Utilizando el operador Like

Private Sub ListarArticuloxNombre()Dim da As New SqlDataAdapter("Select CodArti,DesArti,StockMin,StockMax,StockActual,PrecVenta,CodPer,Eliminado From Articulo Where DesArti Like '" & Me.TextBox1.Text & "%'", cn)da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dtEnd Sub

En el evento TextChanged:

If TextBox1.Text.Trim = "" Then ListarArticulo()Else ListarArticuloxNombre()End If

En el evento Click del boton “Buscar” :

ListarArticuloxNombre()

En el evento Load del Formulario:

Try ListarArticulo()Catch ex As Exception MessageBox.Show(ex.Message)End Try

Por ultimo ejecutar!!!

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 56/122Email:[email protected]

Page 57: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 03

Usar la BD Almacen osea Restaurarla Ok!!!!

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET

Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds as New DataSet

Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM

Crear los siguientes procedimientos:

Rem metodo para listar los distritos

Private Sub ListarDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as Nom From Distrito", cn)

REM espesifico el tipo de comandoda.SelectCommand.CommandType = CommandType.TextREM LLenado de datosda.Fill(ds, "Dis")REM Enlazando los datos con el ListBox y configurandoComboBox1.DataSource = ds.Tables(0)ComboBox1.DisplayMember = "Nom"ComboBox1.ValueMember = "CodDis"End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 57/122Email:[email protected]

Page 58: Libroado.net

I.E.S. CESCA(ADO.NET)

Private Sub GetClientexDistrito()Dim da As New SqlDataAdapter("Select CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie From Cliente Where CodDis='" & ComboBox1.SelectedValue & "'", cn)da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dtEnd Sub

En el evento Load del formulario:

Try ListarDistrito()Catch ex As Exception MessageBox.Show(ex.Message)End Try

En el evento SelectedIndexChanged del combobox:

Try GetClientexDistrito()Catch ex As Exception REM Throw exEnd Try

Por ultimo ejecutar!!!

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 58/122Email:[email protected]

Page 59: Libroado.net

I.E.S. CESCA(ADO.NET)

Propuesto:

1) Cuando seleccione una opción: por ejemplo si selecciono la opción clase me tendrá que llenar los datos de la tabla clase en el combobox y lo mismo para las otras opciones dependiendo de la tabla.

2) Me permitirá realizar la consulta de la tabla Articulo en la grilla según mi opción seleccionado.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 59/122Email:[email protected]

Page 60: Libroado.net

I.E.S. CESCA(ADO.NET)

Consultas en ambiente desconectado

Objetivo:Al término de esta separata el alumno Conocerá:

Implementar sentencias SQL Uso del objeto Dataset

Ejemplo 1:

Crear la la Siguiente BD en SQL:

Create Database VentasGoUse ventasgoCreate table Usuarios(NomUsuario Char(15),Clave Char(15),Nivel Char(30),FechaIngreso datetime,FechaSalida datetime,Activo char(2))Go--Ingresamos datos a la tabla UsuariosInsert into Usuarios(NomUsuario,Clave,Nivel,FechaIngreso,FechaSalida,Activo)values('xD148','1234','Admistrador',getdate(),getdate(),'Si')GoInsert into Usuarios(NomUsuario,Clave,Nivel,FechaIngreso,FechaSalida,Activo)values('Alejandro','killbill','Almacenero',getdate(),getdate(),'Si')Go

Luego en VS.NETCrear la siguiente Interfaz:

Modificar la propiedad: PasswordChar = *

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 60/122Email:[email protected]

txtUsuario

txtPassword

btnIngresar

Page 61: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento a nivel de clase crear la cadena de conexión:

Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Ventas;Password=1234")

En el evento Load

btningresar.Enabled = False

Nota: Cambiar la cadena de conexión chicos de ATE-Vitarte y San juan de Miraflores.

“No te olvides de importar el namespace”En el evento TextChanged del control txtusuario codificar lo siguiente:btningresar.Enabled = txtUsuario.Text <> "" And txtPassword.Text <> ""

En el evento TextChanged del control txtPassword codificar lo siguiente:btningresar.Enabled = txtUsuario.Text <> "" And txtPassword.Text <> ""

En el evento Click del boton ingresar codificar lo siguiente:

Dim da As New SqlDataAdapter("Select NomUsuario,Clave From Usuarios Where NomUsuario='" & txtUsuario.Text.Trim() & "'" & " and " & _"Clave='" & txtPassword.Text.Trim() & "'", cn)

Dim dt As New DataTableda.Fill(dt)Dim Cantusu As Integer = dt.Rows.Count - 1If Cantusu = 0 ThenMessageBox.Show("Bienvenido al sistema", "Ingreso", MessageBoxButtons.OK, MessageBoxIcon.Information)

ElseMessageBox.Show("Error Usted no es usuario del sistema", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)End IfResultado:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 61/122Email:[email protected]

Page 62: Libroado.net

I.E.S. CESCA(ADO.NET)

Propuesto:

Utilizar la BD Ventas o la BD Almacen:

En la BD almacen si haces una consulta a la tabla usuario te daras cuenta que los campos son casi los mismos y tienes algunos registros ahora de ti depende cual BD utilizar.

1) Se listaran en el combobox todos los usuarios.2) Se validara en la tercera opción fallida me cerrara el formulario Login.3) Validar el Login4) Si el usuario es correcto me tendra que llamar a un formulario padre MDI

Resultado:

“Que la fuerza .NET te acompañe”

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 62/122Email:[email protected]

El usuario se mostrara en un StatusStrip

Page 63: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IILaboratorio del objeto Dataview

Objetivo:Al término de esta separata el participante conocerá:

Manejar filtros a trabes DataView

DataViewPara este ejemplo utilizare la base de datos Almacen.

1.-) Crear los Siguientes Stored Procedure

--USP para traer los distritos

create proc usp_Traer_disasselect CodDis,Rtrim(NomDis) as Distrito from Distritogo--USP para traer los ClientesCreate proc Usp_Traer_ClienteasSelect C.CodClie,C.ApeClie,C.NomClie,C.DirClie,Rtrim(D.NomDis) as Distrito,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from Cliente Cinner join Distrito D on C.CodDis=D.CodDisgo2.-)

Diseñar el siguiente Formulario

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 63/122Email:[email protected]

cboDistrito dgdClientes

Page 64: Libroado.net

I.E.S. CESCA(ADO.NET)

3.-) importar el namespace SQLClient

Imports System.Data.SqlClient

4.-) En el ámbito a nivel de clase codificar lo siguiente:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=SSPI") Dim da As SqlDataAdapter Dim ds As New DataSet Dim dv As New DataView

5.-) Enel evento load codificar lo siguiente:

REM metodo para traer los Distritos

da = New SqlDataAdapter("usp_Traer_dis", cn)da.SelectCommand.CommandType = CommandType.StoredProcedureda.Fill(ds, "Distrito")cbodistrito.DataSource = ds.Tables(0)cbodistrito.DisplayMember = "Distrito"cbodistrito.ValueMember = "CodDis"REM metodo para traer los clientesda = New SqlDataAdapter("Usp_Traer_Cliente", cn)da.SelectCommand.CommandType = CommandType.StoredProcedureda.Fill(ds, "Clientes")dv = ds.Tables("Clientes").DefaultViewdgdclientes.DataSource = ds.Tables("Clientes")

6.-) en el Evento SelectedIndexChanged codificar lo siguiente:

dv.RowFilter = "Distrito like'" + Me.cboDistrito.Text + "%'"

Por último probar la aplicación F5

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 64/122Email:[email protected]

Page 65: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIUsando el objeto DataView

Usar la base de datos Almacén:

Crear el procedimiento almacenado:

create proc usp_Traer_Articulosasselect a.CodArti,rtrim(a.DesArti)as Articulo,a.StockMin,a.StockMax,a.StockActual,u.DesUnidad,c.DesClase,m.DesModelo,Ma.DesMarca,a.PrecVenta,rtrim(P.ApePer)+ ' ' +(NomPer) as Nombre from Articulo ainner join [Unidad de Medida] u on u.CodUnidad=a.CodUnidadinner join Clase c on c.CodClase=a.CodClaseinner join Modelo m on m.CodModelo=a.CodModeloinner join Marca Ma on Ma.CodMarca=a.CodMarcainner join Personal P on p.CodPer=a.CodPer

2.-) Diseñar la siguiente interfas:

çImportar el namespaceImports System.Data.SqlClient

En el ámbito a nivel da clase codificar lo siguiente:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=SSPI")

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 65/122Email:[email protected]

Page 66: Libroado.net

I.E.S. CESCA(ADO.NET)

Dim da As SqlDataAdapterDim ds As New DataSetDim dv As New DataView

Crear un procedimiento de tipo sub para llenar el combo

Sub llenarcombo() ComboBox1.Items.Add("Codigo") ComboBox1.Items.Add("Descripcion") ComboBox1.Items.Add("Marca") ComboBox1.Items.Add("Clase") ComboBox1.Items.Add("Modelo") End Sub

En el Evento load del formulario Codificar lo siguiente:

REM llenamos el combo da = New SqlDataAdapter("usp_Traer_Articulos", cn) da.Fill(ds, "Articulos") dv = ds.Tables(0).DefaultView DataGridView1.DataSource = ds.Tables(0) REM llamamos el procedimiento llenarcombo()

En el evento TextChanged de la caja de texto codificar lo siguiente: If ComboBox1.Text = "" Then MessageBox.Show("Seleccione una opcion") TextBox1.Clear() Else If ComboBox1.Text = "Codido" Then dv.RowFilter = "CodArti like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Descripcion" Then dv.RowFilter = "Articulo like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Marca" Then dv.RowFilter = "DesMarca like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Clase" Then dv.RowFilter = "DesClase like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Modelo" Then dv.RowFilter = "DesModelo like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Codigo" Then dv.RowFilter = "CodArti like'" & Me.TextBox1.Text & "%'" End If End If

En el evento SelectedIndexChanged del control conbobox codificar lo siguiente:

Label3.Text = "Ingrese" & " " & Me.ComboBox1.TextTextBox1.Clear()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 66/122Email:[email protected]

Page 67: Libroado.net

I.E.S. CESCA(ADO.NET)

Visual Basic .NET IIEstudiando el Objeto SqlDataReader

Objetivo:Al término de esta separata el participante conocerá:

El paradigma de la conexión. Uso del objeto DataReader y sus diferencias.

El paradigma de la conexión

Cuando abordamos un proyecto de acceso a fuentes de datos, siempre nos encontramos con una duda existencial.¿Debemos crear una conexión con la base de datos al principio de nuestra aplicación y cerrarla cuando la aplicación se cierre?, ¿o debemos crear una conexión con la base de datos sólo cuando vayamos a trabajar con la fuente de datos?. ¿Y si estamos trabajando continuamente con una fuente de datos?, ¿cómo penalizarían todas estas acciones?.

Es difícil de asumir que acción tomar en cada caso, y es que dependiendo de lo que vayamos a realizar, a veces es más efectiva una acción que otra, y en otras ocasiones, no está del todo claro, ya que no existe en sí una regla clara que especifique qué acción tomar en un momento dado.Lo que sí está claro es que el modelo de datos de ADO.NET que hemos visto, quedaría resumido en cuanto a la conectividad de la manera en la que se representa en la siguiente imagen:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 67/122Email:[email protected]

Page 68: Libroado.net

I.E.S. CESCA(ADO.NET)

El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas y bases de datos de una determinada fuente de datos.

De esta manera, podemos trabajar con las aplicaciones estando desconectados de la fuente de datos.Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a ella.

El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con fuentes de datos conectadas.Por otro lado, el objeto DataReader tiene algunas particularidades que conviene conocer y que veremos a continuación.

Conociendo el objeto DataReader

El objeto DataReader nos permite como hemos indicado anteriormente, establecer una conexión con una fuente de datos y trabajar con esta fuente de datos sin desconectarnos de ella, sin embargo, hay diferentes cualidades y particularidades que conviene conocer.  DataReader es de solo lectura

Lo que hemos dicho anteriormente, requiere sin embargo, que esta conexión se establezca en un modo de sólo lectura, al contrario de lo que se puede hacer con el objeto DataSet, con el que podemos interactuar con la fuente de datos en modo lectura y modo escritura.  DataReader se maneja en una sola dirección

El objeto DataReader sólo permite que nos desplacemos por los datos en una sola dirección, sin vuelta atrás.Por el contrario, el objeto DataSet nos permite movernos por los registros para adelante y para atrás.Además, sólo podemos utilizar el objeto DataReader con conexiones establecidas en una sentencia SQL por ejemplo, pero no podemos variar esta.Para hacerlo, debemos entonces modificar la conexión con el comando establecido.  DataReader es rápido

Debido a su naturaleza y características, este objeto es bastante rápido a la hora de trabajar con datos.Como es lógico, consume además menos memoria y recursos que un objeto DataSet por ejemplo.Sin embargo, dependiendo de las necesidades con las que nos encontremos, puede que este método de acceso y trabajo no sea el más idóneo. Analizando el flujo de trabajo de DataReader

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 68/122Email:[email protected]

Page 69: Libroado.net

I.E.S. CESCA(ADO.NET)

Cuando trabajamos con fuentes de datos conectadas, trabajaremos con el objeto DataReader.Para trabajar con este objeto, utilizaremos los objetos siguientes del proveedor de acceso a datos:    ●   Connection    ●   Command    ●   DataReader

Un resumen gráfico de esto es lo que podemos ver en la Imagen.

Usando la Clase SqlDataReaderObjetivo:Conocer el uso fundamental del objeto SqlDataReader

Ejemplo 01:Para este ejemplo utilizaremos la BD almacen:

En el formulario agregar un DataGridView.

Lo que más nos gusta codificar:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 69/122Email:[email protected]

Page 70: Libroado.net

I.E.S. CESCA(ADO.NET)

Dar doble click en el formulario:

En el ámbito de importaciones Importar el NameSpace:

Imports System.Data.SqlClient

En el anbito a nivel de clase declarar la cadena de conexión:

Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=1234")

En el evento Load del Formulario Codificar lo siguiente:

REM Creamos las ColumnasDgdCliente.Columns.Add("Codigo", "Codigo")DgdCliente.Columns.Add("Apellido", "Apellido")DgdCliente.Columns.Add("Nombre", "Nombre")DgdCliente.Columns.Add("Direccion", "Direccion")REM Redimencionamos las ColumnasDgdCliente.Columns(0).Width = 80DgdCliente.Columns(1).Width = 130DgdCliente.Columns(2).Width = 140DgdCliente.Columns(3).Width = 230REM Creamos nuestra consultaDim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie From Cliente", cn)

cmd.CommandType = CommandType.TextIf cn.State <> ConnectionState.Open Then cn.Open()End IfREM ejecutamos el comando ExecuteReaderDim dr As SqlDataReader = cmd.ExecuteReaderDim i As Integer = 0REM Si existen datos en el DataReader While dr.Read DgdCliente.Rows.Add() DgdCliente.Rows(i).Cells(0).Value = dr.GetValue(0) DgdCliente.Rows(i).Cells(1).Value = dr.GetValue(1) DgdCliente.Rows(i).Cells(2).Value = dr.GetValue(2) DgdCliente.Rows(i).Cells(3).Value = dr.GetValue(3) i += 1 End While REM cerramos el DR dr.Close() REM Cerramos la conexion cn.Close()Ejemplo 02

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 70/122Email:[email protected]

Page 71: Libroado.net

I.E.S. CESCA(ADO.NET)

Utilizar la BD Almacen.

Crear un nuevo proyecto en VS.NET y diseñar la siguiente interfaz:

Haber codificar lo que más nos gusta:

En el ámbito de importaciones Importar el NameSpace:

Imports System.Data.SqlClient

En el anbito a nivel de clase declarar la cadena de conexión:

Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=1234")

En el ámbito general crear los siguientes procedimientos:

Private Sub ListarDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as Distrito

From Distrito", cn)da.SelectCommand.CommandType = CommandType.Text

Dim dt As New DataTable da.Fill(dt) ComboBox1.DataSource = dt ComboBox1.DisplayMember = "Distrito" ComboBox1.ValueMember = "CodDis" End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 71/122Email:[email protected]

Control:ListView

Page 72: Libroado.net

I.E.S. CESCA(ADO.NET)

Private Sub ListarCliente() Dim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie

From Cliente", cn) cmd.CommandType = CommandType.Text If cn.State <> ConnectionState.Open Then cn.Open() End If Dim dr As SqlDataReader = cmd.ExecuteReader While dr.Read Dim List As New ListViewItem(dr(0).ToString()) List.SubItems.Add(dr(1).ToString()) List.SubItems.Add(dr(2).ToString()) List.SubItems.Add(dr(3).ToString()) LstClientes.Items.Add(List) End While dr.Close() cn.Close() End Sub

En el evento Load del Formulario invocar los métodos creados:

LstClientes.View = View.DetailsLstClientes.GridLines = TrueREM Creamos las Columnas en ListViewLstClientes.Columns.Add("Codigo", "Codigo", 80)LstClientes.Columns.Add("Nombre", "Nombre", 120)LstClientes.Columns.Add("Apellido", "Apellido", 140)LstClientes.Columns.Add("Direccion", "Direccion", 199)ListarDistrito()ListarCliente()

En el evento SelectedIndexChanged del combobox1 codificar lo siguiente:

Dim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie From Cliente where CodDis=@CodDis", cn)

cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodDis", ComboBox1.SelectedValue) If cn.State <> ConnectionState.Open Then cn.Open() End If Dim dr As SqlDataReader = cmd.ExecuteReader LstClientes.Items.Clear() While dr.Read Dim List As New ListViewItem(dr(0).ToString())

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 72/122Email:[email protected]

Page 73: Libroado.net

I.E.S. CESCA(ADO.NET)

List.SubItems.Add(dr(1).ToString()) List.SubItems.Add(dr(2).ToString()) List.SubItems.Add(dr(3).ToString()) LstClientes.Items.Add(List) End While dr.Close() cn.Close() Catch ex As Exception

End Try

Propuesto:

Cuando seleccione una opción ejemplo clase me mostrara el combo la lista de clases y al seleccionar un item del combo me permitirá filtrar en la grilla, Lo mismo para marca y modelo.

Nota: Implemente el procedimiento de un entorno conectado para filtrar sobre la grilla.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 73/122Email:[email protected]

Page 74: Libroado.net

I.E.S. CESCA(ADO.NET)

Creando Variables dentro de una Instrucción SQLObjetivo:Al término de esta separa el alumno conocerá:

Crear variable dentro de una instrucción sql Funciones de tipo Sub y Function Manejar las sentencias Insert, Update, Delete y Select

Restaurar la BD Almacen

Ejemplo 01:

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase codificar lo siguiente:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")

Crear el siguiente procedimiento:

Private Sub GetDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as NomDis From Distrito", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) CboDistrito.DataSource = dt CboDistrito.DisplayMember = "NomDis" CboDistrito.ValueMember = "CodDis"End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 74/122Email:[email protected]

cboDistrito

dgdCliente

Page 75: Libroado.net

I.E.S. CESCA(ADO.NET)

En el botón buscar codificar lo siguiente:Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis From Cliente Where CodDis=@CodDis", cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodDis", CboDistrito.SelectedValue) Dim dt As New DataTable da.Fill(dt) dgdCliente.DataSource = dt

Ejemplo 02:

Importar el NameSpace

Imports System.Data.SqlClient

En el anbito a nivel de clase codificar lo siguiente:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")

Crear los siguientes procedimientos:Private Sub GetLLenarCombo()Dim da As New SqlDataAdapter("Select CodClie,(rtrim(ApeClie)+ ','+Rtrim(NomClie)) as NomCom From Cliente", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) cboCliente.DataSource = dt cboCliente.DisplayMember = "NomCom" cboCliente.ValueMember = "CodClie"End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 75/122Email:[email protected]

dgdCliente

Page 76: Libroado.net

I.E.S. CESCA(ADO.NET)

Private Sub GetLlenarCajas(ByVal Codigo As String)Dim da As New SqlDataAdapter("SelectCodClie,Nomclie,ApeClie,DirClie,CodDis,TelClie,RucClie,EmaiClie From Cliente Where CodClie=@CodClie", cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodClie", Codigo) Dim dt As New DataTable da.Fill(dt) txtCodClie.Text = dt.Rows(0)(0) txtNomClie.Text = dt.Rows(0)(1) txtApeClie.Text = dt.Rows(0)(2) txtDirClie.Text = dt.Rows(0)(3) txtCodDis.Text = dt.Rows(0)(4) txtTelClie.Text = dt.Rows(0)(5) txtRucClie.Text = dt.Rows(0)(6) txtemail.Text = dt.Rows(0)(7)End Sub

Donde:

dt.Rows(0)(0) ó dt.Rows(0)(“CodClie”)

En el botón “Buscar” evento click codificar lo siguiente:

Dim codigo As String codigo = InputBox("Ingrese codigo", "INGRESE") GetLlenarCajas(codigo)

En el Combobox evento SelectedIndexChanged:

TryGetLlenarCajas(cboCliente.SelectedValue)Catch ex As Exception

End Try

Terminar el código necesario para los controles de desplazamiento:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 76/122Email:[email protected]

Columna

Fila

Columna

Page 77: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 03:

Importar el NameSpace

Imports System.Data.SqlClient

En el ámbito a nivel de clase codificar lo siguiente:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")

Crear los siguientes procedimientos:

Rem Listar ClasePrivate Sub GetClase()Dim da As New SqlDataAdapter("Select CodClase,Rtrim(DesClase)as DesClase From Clase", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "DesClase" Cboopcion.ValueMember = "CodClase" End Sub

Rem Listar Marca

Private Sub GetMarca()Dim da As New SqlDataAdapter("Select CodMarca,Rtrim(DesMarca)as DesMarca From Marca", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "DesMarca" Cboopcion.ValueMember = "CodMarca"

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 77/122Email:[email protected]

rbtClase rbtMarca rbtPersonal

dgdArticulos

Page 78: Libroado.net

I.E.S. CESCA(ADO.NET)

End SubRem Listar Personal

Private Sub GetPersonal()Dim da As New SqlDataAdapter("Select CodPer,Rtrim(NomPer)+','+ Rtrim(ApePer)as NomCom From Personal", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "NomCom" Cboopcion.ValueMember = "CodPer"End Sub

En el evento CheckedChanged del control rbtClase:

If rbtClase.Checked = True ThenGetClase()

ElseCboopcion.DataSource = Nothing

End If

En el evento CheckedChanged del control rbtMarca:

If RbtMarca.Checked = True ThenGetMarca()

ElseCboopcion.DataSource = Nothing

End If

En el evento CheckedChanged del control rbtPersonal:

If rbtPersonal.Checked = True ThenGetPersonal()

ElseCboopcion.DataSource = Nothing

End If

En el evento SelectedIndexChanged del control Combobox:

TryIf rbtClase.Checked = True ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodClase=@CodClase", cn)

da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClase", Cboopcion.SelectedValue)Dim dt As New DataTableda.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.Count

ElseIf RbtMarca.Checked = True ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodMarca=@CodMArca", cn)

da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodMarca", Cboopcion.SelectedValue)Dim dt As New DataTable

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 78/122Email:[email protected]

Page 79: Libroado.net

I.E.S. CESCA(ADO.NET)

da.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.Count

ElseIf rbtPersonal.Checked ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodPer=@CodPer", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodPer", Cboopcion.SelectedValue)Dim dt As New DataTableda.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.CountEnd If

Catch ex As Exception

End Try

Ejemplo 04:

Diseñar la siguiente interfaz:

Importar el NameSpace

Imports System.Data.SqlClient

En el ámbito a nivel de clase codificar lo siguiente:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")Dim condi As String

Crear Los siguientes procedimientos:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 79/122Email:[email protected]

BtnEliminar

BtnConsultar BtnCancelar BtnSalirBtnnuevo

BtnGuardar

Btnmodificar

Page 80: Libroado.net

I.E.S. CESCA(ADO.NET)

Rem procedimiento para Limpiar los controles textbox y comboboxPrivate Sub Limpiar() For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If NextEnd Sub

Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis:Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean) btnNuevo.Enabled = nuevo BtnGuardar.Enabled = Guardar btnModificar.Enabled = modificar btnConsultar.Enabled = Consultar btnCancelar.Enabled = Cancelar btnEliminar.Enabled = eliminar btnSalir.Enabled = salir End Sub

Rem procedimiento para habilitar o deshabilitar los controlesPrivate Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Sub

Rem procedimiento para Listar los distritosPrivate Sub GetDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as NomDis From Distrito", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) CboDistrito.DataSource = dt CboDistrito.DisplayMember = "NomDis" CboDistrito.ValueMember = "CodDis"End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 80/122Email:[email protected]

Page 81: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento Load del formulario:Try

GetDistrito()Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)

Catch ex As Exception

End Try

En el botón nuevo evento click:

condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)txtCodClie.ReadOnly = FalsetxtCodClie.Focus()

En el botón Modificar evento click:

condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodClie.ReadOnly = TruetxtNomClie.Focus()

En el botón guardar evento click:

If condi = "N" ThenDim cmd As New SqlCommand("Insert into Cliente(CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie,DniClie,RucClie,EmaiClie)Values(@Codclie,@NomClie,@ApeClie,@DirClie,@CodDis,@TelClie,@Dniclie,@Rucclie,@EmaiClie)", cn)cmd.CommandType = CommandType.Text

cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text.Trim)cmd.Parameters.AddWithValue("@NomClie", txtNomClie.Text.Trim)cmd.Parameters.AddWithValue("@ApeClie", txtApeClie.Text.Trim)cmd.Parameters.AddWithValue("@DirClie", txtDirClie.Text.Trim)cmd.Parameters.AddWithValue("@CodDis", cboDistrito.SelectedValue)cmd.Parameters.AddWithValue("@TelClie", txtTelClie.Text.Trim)cmd.Parameters.AddWithValue("@DniClie", txtDni.Text.Trim)cmd.Parameters.AddWithValue("@RucClie", txtRucClie.Text.Trim)cmd.Parameters.AddWithValue("@EmaiClie", txtemail.Text.Trim)cn.Open()cmd.ExecuteNonQuery()cn.Close()

MessageBox.Show("Registro Almacenado Correctamente", "Registro Guardado", MessageBoxButtons.OK, MessageBoxIcon.Information)

habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)

ElseIf condi = "M" ThenDim cmd As New SqlCommand("Update Cliente Set NomClie=@NomClie,ApeClie=@ApeClie,DirClie=@DirClie,CodDis=@CodDis,TelClie=@TelClie,DniClie=@DniClie,RucClie=@RucClie,EmaiClie=@Emaiclie Where CodClie=@CodClie", cn)cmd.CommandType = CommandType.Text

cmd.CommandType = CommandType.Text

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 81/122Email:[email protected]

Page 82: Libroado.net

I.E.S. CESCA(ADO.NET)

cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text.Trim)cmd.Parameters.AddWithValue("@NomClie", txtNomClie.Text.Trim)cmd.Parameters.AddWithValue("@ApeClie", txtApeClie.Text.Trim)cmd.Parameters.AddWithValue("@DirClie", txtDirClie.Text.Trim)cmd.Parameters.AddWithValue("@CodDis", cboDistrito.SelectedValue)cmd.Parameters.AddWithValue("@TelClie", txtTelClie.Text.Trim)cmd.Parameters.AddWithValue("@DniClie", txtDni.Text.Trim)cmd.Parameters.AddWithValue("@RucClie", txtRucClie.Text.Trim)cmd.Parameters.AddWithValue("@EmaiClie", txtemail.Text.Trim)cn.Open()cmd.ExecuteNonQuery()cn.Close()

MessageBox.Show("Registro Actualizado Correctamente", "Registro Actualizado", MessageBoxButtons.OK, MessageBoxIcon.Information)

habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)

End If

En el botón Consultar evento click:

TryDim codigo As Stringcodigo = InputBox("Ingrese Codigo Cliente", " Ingrese Codigo a BUSCAR")Dim da As New SqlDataAdapter("Select CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie,DniClie,RucClie,EmaiClie From Cliente Where CodClie=@CodClie", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClie", codigo)Dim dt As New DataTableda.Fill(dt)txtCodClie.Text = dt.Rows(0)(0).ToString.TrimtxtNomClie.Text = dt.Rows(0)(1).ToString.TrimtxtApeClie.Text = dt.Rows(0)(2).ToString.TrimtxtDirClie.Text = dt.Rows(0)(3).ToString.TrimcboDistrito.SelectedValue = dt.Rows(0)(4)txtTelClie.Text = dt.Rows(0)(5).ToString.TrimtxtDni.Text = dt.Rows(0)("DniClie").ToString.TrimtxtRucClie.Text = dt.Rows(0)(7).ToString.Trimtxtemail.Text = dt.Rows(0)(8).ToString.Trimhabilitar(0, 0, 1, 0, 1, 1, 0)HabilitarCajas(False)txtCodClie.ReadOnly = True

Catch ex As ExceptionMessageBox.Show("Error el codigo ingresado no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)End Try

En el botón Eliminar evento click:

TryDim cmd As New SqlCommand("Delete From Cliente Where CodClie=@CodClie", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text)cn.Open()cmd.ExecuteNonQuery()cn.Close()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 82/122Email:[email protected]

Page 83: Libroado.net

I.E.S. CESCA(ADO.NET)

MessageBox.Show("Registro Eliminado", "Eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)Catch ex As ExceptionEnd Try

En el botón Cancelar evento click:

Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)

En el botón Salir evento click:

If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then

Close()

End If

Hacer lo mismo pero con la tabla Personal.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 83/122Email:[email protected]

Page 84: Libroado.net

I.E.S. CESCA(ADO.NET)

Clase SqlCommandObjetivo:Al término de esta separa el alumno conocerá:

Conocer sus métodos Crear Funciones de tipo Sub y function Diferencias de ExecuteNonQuery y ExecuteScalar

Representa un procedimiento almacenado o una instrucción de Transact-SQL que se ejecuta en una base de datos de SQL Server. Esta clase no se puede heredar.

Sqlcommand proporciona los siguientes Metodos de ejecución de comandos en una base de datos de SQL-Server.

CommandText Obtiene o establece el procedimiento almacenado o la Instrucción

SQL que se ejecutara en el origen de datos de acuerdo a la

conexión establecida.

Connection Obtiene o establece la conexión SqlConnection asociada al

comando, que utiliza esta instancia de SqlCommand.

CommandType Obtiene o Establece el tipo de comando es decir un

procedimiento Almacenado o una instrucción SQL

ExecuteReader Ejecuta comandos que devuelven filas. Para obtener un mayor

rendimiento, ExecuteReader invoca a los comandos mediante el

procedimiento almacenado en el sistema sp_executesql de

Transact-SQL. Por consiguiente, ExecuteReader puede no tener

el efecto deseado si se utiliza para ejecutar comandos como las

instrucciones SET de Transact-SQL.

ExecuteNonQu

ery

Ejecuta comandos como instrucciones INSERT, DELETE, UPDATE y

SET de Transact-SQL.

ExecuteScalar Recupera un único valor (por ejemplo, un valor agregado) de una

base de datos.

Asimismo el objeto Command realiza una tarea simple de ejecución de instrucciones SQL en el lado del servidor, el cual necesita dos parámetros tanto la instrucción SQL como la conexión a donde debe apuntar.

Sintaxis:

Dim cmd as new SqlCommand(“Instrucción SQL Ó Procedimiento Almacenado”,Conexion)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 84/122Email:[email protected]

Page 85: Libroado.net

I.E.S. CESCA(ADO.NET)

Una vez configurado el Command indicándole la instrucción a realizar y la conexión donde apuntar, la ejecución de esta instrucción se realiza con el método.

cmd.ExecuteNonQuery

El cual no me duevelve ningún tipo de resultado. Solo se dedica a realizar la instrucción en la base de datos donde apunta la conexión; para la devolución de resultados podríamos utilizar ExecuteReader, el cual devuelve devuelve la consulta en forma de un DataReader.

Ejemplo de SqlDataReader con el método ExecuteReader.

Public Sub ReadOrderData(ByVal connectionString As String) Dim queryString As String = _ "SELECT CODCLIE,NOMCLIE FROM CLIENTE;" Using connection As New SqlConnection(connectionString) Dim command As New SqlCommand(queryString, connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() Try While reader.Read() Console.WriteLine(String.Format("{0}, {1}", _ reader(0), reader(1))) End While Finally ' Always call Close when done reading. reader.Close() End Try End UsingEnd Sub

Cuando usar ExecuteNonQuery o ExecuteScalar

En este artículo veremos cómo y cuándo usar el método ExecuteNonQuery o ExecuteScalar de un comando (o clase) derivado de la clase abstracta (no instanciable) DbCommand si trabajas con Visual Studio 2008 o de la interfaz IDbCommand si trabajas con cualquier versión de Visual Studio para .NET.

Esto es lo que nos dice la ayuda de Visual Studio sobre el método ExecuteNonQuery:

Ejecuta una instrucción SQL en un objeto de conexión.Se puede utilizar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o para cambiar la información de una base de datos ejecutando las instrucciones UPDATE, INSERT o DELETE.

Aunque ExecuteNonQuery no devuelva ninguna fila, los parámetros de salida o los valores devueltos asignados a los parámetros se rellenan con datos.

Para las instrucciones UPDATE, INSERT y DELETE, el valor devuelto corresponde alnúmero de filas afectadas por el comando. Para los demás tipos de instrucciones, el valor devuelto es -1.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 85/122Email:[email protected]

Page 86: Libroado.net

I.E.S. CESCA(ADO.NET)

Y esto otro sobre ExecuteScalar:Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados que devuelve la consulta. Se omiten todas las demás columnas y filas.

Utilice el método ExecuteScalar para recuperar un único valor (por ejemplo, un valor agregado) de una base de datos.

Por tanto, podemos deducir que ExecuteNonQuery lo usaremos para ejecutar la mayoría de las instrucciones de SQL que ejecutará algo en la base de datos, pero que no devolverá un valor.Bueno, en realidad, en algunos casos si que devolverá un valor, pero será para indicarnos, por ejemplo, si eliminamos varias filas de la tabla, devolverá el número de filas eliminadas.

Por otro lado, ExecuteScalar lo usaremos cuando tengamos que ejecutar un código de SQL del que queremos recuperar la primera columna de la primera fila.Este método devuelve un valor de tipo Object que tendremos que convertir según el valor devuelto. Por ejemplo, si queremos saber el número de registros (filas) de una tabla que cumple cierto criterio, podemos usar un comando SQL como este:

Select Count(CodClie) From Cliente Where CodDis=@CodDisEn este caso, el valor devuelto será del tipo Int32 y será el número de filas que hay en la tabla Almacen de la base de datos indicada en el objeto Connection que previamente habremos indicado que nos muestre la cantidad de códigos que pertenezcan a dicho parámetro indicado. Si no hay ninguna fila que cumpla ese criterio, devolverá cero.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 86/122Email:[email protected]

Page 87: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 01

Diseñar la siguiente interfaz:

Restaurar la BD Almacen:

Importar el NameSpace:

Imports System.Data.SqlClient

Crear la cadena de conexión en el ámbito a nivel de clase:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")

En el botón “Nuevo Codigo” evento Click codificar lo siguiente:

REM Declaro mis variablesDim Codigo, Cod, NuevoCodigo As StringDim Max As IntegerREM Creo mi instruccion SqlDim cmd As New SqlCommand("Select CodClie From Cliente Order By CodClie desc",

cn)cmd.CommandType = CommandType.Textcn.Open()Codigo = cmd.ExecuteScalarcn.Close()

If Codigo Is Nothing ThenREM si me devuelde un valor nuloTextBox1.Text = "CL000001"

ElseREM capturo el dato correlativoCod = Val(Strings.Right(Codigo, 6)) + 1REM cuanto la longitud de la variable CodMax = Len(Cod)REM uno las variables para generar el codigoNuevoCodigo = Strings.Mid(Codigo, 1, 8 - Max) & CodTextBox1.Text = NuevoCodigo

End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 87/122Email:[email protected]

Page 88: Libroado.net

I.E.S. CESCA(ADO.NET)

Ejemplo 02Restaurar la BD almacen y diseñar la siguiente interfaz:

Importar el NameSpace

Imports System.Data.SqlClient

En el ámbito a nivel de clase codificar lo siguiente:

Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")Dim condi As String

Crear Los siguientes procedimientos:

Rem procedimiento para Limpiar los controles textbox y comboboxPrivate Sub Limpiar() For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If NextEnd Sub

Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis:Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 88/122Email:[email protected]

BtnEliminar

BtnConsultar BtnCancelar BtnSalirBtnnuevo

BtnGuardar

Btnmodificar

GroupBox1

Page 89: Libroado.net

I.E.S. CESCA(ADO.NET)

btnNuevo.Enabled = nuevo BtnGuardar.Enabled = Guardar btnModificar.Enabled = modificar btnConsultar.Enabled = Consultar btnCancelar.Enabled = Cancelar btnEliminar.Enabled = eliminar btnSalir.Enabled = salir End Sub

Rem procedimiento para habilitar o deshabilitar los controlesPrivate Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Su

Rem procedimiento para Insertar

Private Sub SetInsert(ByVal CodEmpresa As String, ByVal DesEmpresa As String, ByVal DirEmpresa As String, ByVal TelEmpresa As String, ByVal Rucempresa As String)

TryDim cmd As New SqlCommand("Insert into Empresa(CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa)Values(@CodEmpresa,@DesEmpresa,@DirEmpresa,@TelEmpresa,@RucEmpresa)", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodEmpresa", CodEmpresa)cmd.Parameters.AddWithValue("@DesEmpresa", DesEmpresa)cmd.Parameters.AddWithValue("@DirEmpresa", DirEmpresa)cmd.Parameters.AddWithValue("@TelEmpresa", TelEmpresa)cmd.Parameters.AddWithValue("@RucEmpresa", Rucempresa)cn.Open()cmd.ExecuteNonQuery()cn.Close()

Catch ex As ExceptionMessageBox.Show("Error Ocurrio un Error en " & ex.Message)

End TryEnd Sub

Rem procedimiento para Actualizar

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 89/122Email:[email protected]

Page 90: Libroado.net

I.E.S. CESCA(ADO.NET)

Private Sub SetUpdate(ByVal CodEmpresa As String, ByVal DesEmpresa As String, ByVal DirEmpresa As String, ByVal TelEmpresa As String, ByVal Rucempresa As String)TryDim cmd As New SqlCommand("Update Empresa Set DesEmpresa=@DesEmpresa,DirEmpresa=@DirEmpresa,TelEmpresa=@TelEmpresa,Rucempresa=@RucEmpresa Where CodEmpresa=@CodEmpresa", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodEmpresa", CodEmpresa)cmd.Parameters.AddWithValue("@DesEmpresa", DesEmpresa)cmd.Parameters.AddWithValue("@DirEmpresa", DirEmpresa)cmd.Parameters.AddWithValue("@TelEmpresa", TelEmpresa)cmd.Parameters.AddWithValue("@RucEmpresa", Rucempresa)cn.Open()cmd.ExecuteNonQuery()cn.Close()Catch ex As ExceptionMessageBox.Show("Error Ocurrio un Error en " & ex.Message)End TryEnd Sub

Rem procedimiento para Consultar Datos y devolverlos en un DataTable:

Private Function GetConsultar(ByVal codigo As String) As DataTableTryDim da As New SqlDataAdapter("Select CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa From Empresa Where CodEmpresa=@CodEmpresa", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodEmpresa", codigo)Dim dt As New DataTableda.Fill(dt)Return dtCatch ex As Exception

MessageBox.Show("Error Ocurrio un Error en " & ex.Message)End TryEnd Function

Rem procedimiento para Eliminar

Private Function setEliminar(ByVal codigo As String) As Integer Try Dim cmd As New SqlCommand("Delete From Empresa Where CodEmpresa=@CodEmpresa", cn) cmd.CommandType = CommandType.Text cmd.Parameters.AddWithValue("@CodEmpresa", codigo) cn.Open() Dim i As Integer i = cmd.ExecuteNonQuery cn.Close() Return i Catch ex As Exception MessageBox.Show("Error Ocurrio un Error en " & ex.Message) End Try End Function

En el evento Load del formulario:Try

Limpiar()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 90/122Email:[email protected]

Page 91: Libroado.net

I.E.S. CESCA(ADO.NET)

habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)

Catch ex As Exception

End Try

En el botón nuevo evento click:

condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)Dim Codigo, Cod, NuevoCodigo As StringDim Max As Integer

Dim cmd As New SqlCommand("Select CodEmpresa From Empresa Order By CodEmpresa desc", cn)

cmd.CommandType = CommandType.Textcn.Open()Codigo = cmd.ExecuteScalarcn.Close()If Codigo Is Nothing ThentxtCodEmp.Text = "E00001"ElseCod = Val(Strings.Right(Codigo, 5)) + 1Max = Len(Cod)NuevoCodigo = Strings.Mid(Codigo, 1, 6 - Max) & CodtxtCodEmp.Text = NuevoCodigoEnd If : txtCodEmp.ReadOnly = True : txtDesEmp.Focus()

En el botón Modificar evento click:

condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodEmp.ReadOnly = TruetxtDesEmp.Focus()

En el botón Guardar evento click:

If condi = "N" ThenSetInsert(txtCodEmp.Text.Trim, txtDesEmp.Text.Trim, txtDirEmp.Text.Trim, txtTelEmp.Text.Trim, txtRuc.Text.Trim)MessageBox.Show("Registro Almacenado", "Guardado")habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)ElseIf condi = "M" ThenSetUpdate(txtCodEmp.Text.Trim, txtDesEmp.Text.Trim, txtDirEmp.Text.Trim, txtTelEmp.Text.Trim, txtRuc.Text.Trim)MessageBox.Show("Registro Actualizado Correctamente", "Registro Actualizado", MessageBoxButtons.OK, MessageBoxIcon.Information)habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 91/122Email:[email protected]

Page 92: Libroado.net

I.E.S. CESCA(ADO.NET)

En el botón Consultar evento click:TryDim codigo As Stringcodigo = InputBox("Ingrese Codigo", "Codigo")Dim dt As New DataTabledt = GetConsultar(codigo)txtCodEmp.Text = dt.Rows(0)(0)txtDesEmp.Text = dt.Rows(0)(1)txtDirEmp.Text = dt.Rows(0)(2)txtTelEmp.Text = dt.Rows(0)(3)txtRuc.Text = dt.Rows(0)(4)habilitar(0, 0, 1, 0, 1, 1, 0)HabilitarCajas(False)txtCodEmp.ReadOnly = TrueCatch ex As ExceptionMessageBox.Show("El codigo ingresado no existe")End Try

En el botón Eliminar evento click:

TryDim cant As Integercant = setEliminar(txtCodEmp.Text.Trim)MessageBox.Show("Registro Eliminado", "Eliminado " & CStr(cant), MessageBoxButtons.OK, MessageBoxIcon.Information)Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)Catch ex As Exception

End Try

En el botón Salir evento click:

If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then

Close()

End If

Propuesto:

Hacer lo mismo pero con la tabla MARCA.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 92/122Email:[email protected]

Page 93: Libroado.net

I.E.S. CESCA(ADO.NET)

Uso del DataTableObjetivo:Al término de esta separa el alumno conocerá:

Que es un DataTable Configurar el Datatable Trabajar con Clases

Ejemplo 01

Restaurar la BD Almacen luego diseñar la siguiente interfaz:

Una vez diseñado la siguiente interfaz agregar una clase: Como?:Vea la siguiente imagen:

Menu Proyecto/Agregar Clase:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 93/122Email:[email protected]

Page 94: Libroado.net

I.E.S. CESCA(ADO.NET)

La cual nos pedirá un nombre la llamaremos Operaciones:

Una vez ingresado el nombre lo agregamos:Lo cual nuestro proyecto quedara de la siguiente forma:

Empecemos a trabajar:

1.- vamos a trabajar en la clase agregada:

Primero en el ámbito de importaciones importar el namespace:

Imports System.Data.SqlClient

2.- En el ámbito a nivel de clase crear la cadena de conexión:

Private cn As New SqlConnection("Server=.;DataBase=Almacen;Integrated security=true")

Nuestra clase operaciones quedaría de la siguiente forma:

Debajo de la conexión crear los siguientes métodos:

Rem Listado de todos los Articulos.Public Function getArticulos() As DataSetTry

Dim da As New SqlDataAdapter("Select CodArti,Rtrim(DesArti) as DesArti From Articulo", cn)

da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSet()da.Fill(ds, "Articulos")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 94/122Email:[email protected]

Clase Agregada

Clase Operaciones

Page 95: Libroado.net

I.E.S. CESCA(ADO.NET)

Rem Listado de todos los articulos segun el codigoPublic Function getArticulos(ByVal CodArti As String) As DataSet Try Dim sql As String = "Select CodArti,DesArti,StockActual,PrecVenta From Articulo Where CodArti=@CodArti" Dim da As New SqlDataAdapter(sql, cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodArti", CodArti) Dim ds As New DataSet() da.Fill(ds, "DatosArticulo") Return ds Catch ex As Exception Throw ex End Try End Function

Rem Listado de todos los clientes concatenado el nombre mas el apellidoPublic Function getCliente() As DataSetTryDim da As New SqlDataAdapter("Select CodClie,(Rtrim(NomClie) + ','+ RTrim(ApeClie)) as NomCom From Cliente", cn)da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSet()da.Fill(ds, "Cliente")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function

Rem consultatando la direccion, telefono y ruc del cliente segun el codigo:Public Function getCliente(ByVal CodClie As String) As DataSetTryDim da As New SqlDataAdapter("Select DirClie,TelClie,RucClie From Cliente Where CodClie=@CodClie", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClie", CodClie)Dim ds As New DataSet()da.Fill(ds, "Cliente")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function

Ahora una vez creado los métodos nos dirigimos al formulario para trabajar:En el ámbito a nivel de clase declarar la variable obj de tipo operaciones:

Dim objOper As New OperacionesDim dt As New DataTable()Dim drw As DataRowDim total As DecimalDim fila As Integer

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 95/122Email:[email protected]

Page 96: Libroado.net

I.E.S. CESCA(ADO.NET)

Crear el siguiente Metodo:

Private Sub ConfigurarTabla() dt.Columns.Add("Codigo", GetType(String)) dt.Columns.Add("Descripcion", GetType(String)) dt.Columns.Add("Precio", GetType(Decimal)) dt.Columns.Add("Cantidad", GetType(Int32)) dt.Columns.Add("Importe", GetType(Decimal)) dgdDetalle.DataSource = dt dgdDetalle.Columns(0).Width = 60 dgdDetalle.Columns(1).Width = 100 dgdDetalle.Columns(2).Width = 60 dgdDetalle.Columns(3).Width = 60End Sub

En el evento Load del Formulario codificar lo siguiente:

TryCboArticulo.DataSource = objOper.getArticulos().Tables(0)CboArticulo.DisplayMember = "DesArti"CboArticulo.ValueMember = "CodArti"CboCliente.DataSource = objOper.getCliente().Tables(0)CboCliente.DisplayMember = "NomCom"CboCliente.ValueMember = "CodClie"ConfigurarTabla()

Catch ex As ExceptionMessageBox.Show(ex.Message)

End Try

En el evento SelectedIndexChanged del combobox cboCliente codificar lo siguiente:

Try Dim dtArti As New DataTable() dtArti = objOper.getCliente(CboCliente.SelectedValue.ToString()).Tables(0) txtDirClie.Text = dtArti.Rows(0)(0).ToString() txtTel.Text = dtArti.Rows(0)(1).ToString() txtRuc.Text = dtArti.Rows(0)(2).ToString()Catch ex As Exception

End Try

En el evento SelectedIndexChanged del combobox cboArticulo codificar lo siguiente:Try Dim dtArti As New DataTable() dtArti = objOper.getArticulos(CboArticulo.SelectedValue.ToString()).Tables(0) txtPrecio.Text = dtArti.Rows(0)(3).ToString() txtCod.Text = dtArti.Rows(0)(0).ToString() txtCant.Select()Catch ex As Exception

End Try

En el control TxtCant evento TextChanged codficar lo siguiente:

If txtCant.Text.Trim() <> "" ThentxtPtot.Text = Convert.ToString(Decimal.Parse(txtCant.Text) * Decimal.Parse(txtPrecio.Text))

Else

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 96/122Email:[email protected]

Page 97: Libroado.net

I.E.S. CESCA(ADO.NET)

txtPtot.Text = (0).ToString() txtCant.Clear()End If

En el botón agregar evento click codificar lo siguiente:

If CboArticulo.SelectedIndex > -1 And txtCant.Text <> "" Then drw = dt.NewRow() drw(0) = CboArticulo.SelectedValue.ToString() drw(1) = CboArticulo.Text drw(2) = Decimal.Parse(txtPrecio.Text) drw(3) = Decimal.Parse(txtCant.Text) drw(4) = Decimal.Parse(txtPtot.Text) 'Agregamos la fila a la coleccion Rows de la Tabla dt.Rows.Add(drw) total += Decimal.Parse(txtPtot.Text) txtTot.Text = total.ToString() txtPrecio.Clear() txtCant.Clear() txtCod.Clear() txtPrecio.Clear() Else MessageBox.Show("Falta Ingresar Datos en Detalle", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1)

End If

En el botón eliminar evento click codificar lo siguiente:Try fila = dgdDetalle.CurrentRow.Index If fila > -1 And dt.Rows.Count > 0 Then total -= Decimal.Parse(dt.Rows(fila)(4).ToString()) txtTot.Text = total.ToString() dt.Rows.RemoveAt(fila) End IfCatch ex As Exception MessageBox.Show("Seleccione una Fila")End Try

En el botón Modificar evento click codificar lo siguiente:Try fila = dgdDetalle.CurrentRow.Index If fila > -1 And dt.Rows.Count > 0 Then txtCod.Text = dt.Rows(fila)(0).ToString() CboArticulo.Text = dt.Rows(fila)(1).ToString() txtPrecio.Text = dt.Rows(fila)(2).ToString() txtCant.Text = dt.Rows(fila)(3).ToString() total -= Decimal.Parse(dt.Rows(fila)(4).ToString()) txtTot.Text = total.ToString() dt.Rows.RemoveAt(fila) End If Catch ex As Exception MessageBox.Show("Seleccione una Fila") End Try

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 97/122Email:[email protected]

Page 98: Libroado.net

I.E.S. CESCA(ADO.NET)

Manejo de Clases en .NETObjetivo:Al término de esta separa el alumno conocerá:

Manejar los objetos de tipo Clase. Crear Procedimientos Almacenados con parámetros de salida.

Restaurar la BD Almacen y crear los siguientes procedimientos almacenados:

Create Proc [usp_Listar_Personal]ASSelect CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal];GO

Create Proc [usp_Consultar_Personal]@CodPer char(6)ASSelect CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal] Where CodPer = @CodPer;GoCreate Proc [usp_Guardar_Personal]@CodPer Char(6)Output, @ApePer Char(35), @NomPer Char(35), @DirPer Char(40), @TelPer Char(8), @Dni Char(8), @CodCargo Char(3), @Retirado Char(2)ASdeclare @Cod Char(6),@max int,@Codigo Char(6)Select @Cod=Max(right(CodPer,3))+1 From PersonalSet @Max=Len(@Cod)Select @Codigo=substring(CodPer,1,6-@Max)+@Cod From PersonalInsert Into [Personal] (CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado) Values(@Codigo, @ApePer, @NomPer, @DirPer, @TelPer, @Dni, @CodCargo, @Retirado);set @CodPer=@CodigoGOCreate Proc [usp_Actualizar_Personal]@CodPer Char(6), @ApePer Char(35), @NomPer Char(35), @DirPer Char(40), @TelPer Char(8), @Dni Char(8), @CodCargo Char(3), @Retirado Char(2)ASUpdate [Personal] Set CodPer = @CodPer, ApePer = @ApePer, NomPer = @NomPer, DirPer = @DirPer, TelPer = @TelPer, Dni = @Dni, CodCargo = @CodCargo, Retirado = @Retirado Where CodPer = @CodPer;GO

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 98/122Email:[email protected]

Page 99: Libroado.net

I.E.S. CESCA(ADO.NET)

Create Proc [usp_Eliminar_Personal]@CodPer char(6)ASDelete [Personal] Where CodPer = @CodPer;Go

Create Proc Usp_Listar_CargoAsselect CodCargo,Rtrim(DesCargo) Cargo from Cargo

Abrir el Visual Studio 2008 y crear un proyecto de tipo aplicación para Windows, y diseñar la siguiente interna:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 99/122Email:[email protected]

BtnSalir

GroupBox1

Page 100: Libroado.net

I.E.S. CESCA(ADO.NET)

Una vez diseñado la siguiente interfaz agregar una clase: Como ¿?:Vea la siguiente imagen: Menu Proyecto/Agregar Clase:

La cual nos pedirá un nombre la llamaremos Operaciones:

Una ves ingresado el nombre lo agregamos:Lo cual nuestro proyecto quedara de la siguiente forma:

Empecemos a trabajar:

1.- vamos a trabajar en la clase agregada:

Primero en el ámbito de importaciones importar el namespace:

Imports System.Data.SqlClient

2.- En el ámbito a nivel de clase crear la cadena de conexión:

Private cn As New SqlConnection("Server=.;DataBase=Almacen;Integrated security=true")

Nuestra clase operaciones quedaría de la siguiente forma:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 100/122Email:[email protected]

Clase Agregada

Clase Operaciones

BtnEliminar

BtnConsultar

BtnCancelar

Btnnuevo

BtnGuardar

Btnmodificar

Page 101: Libroado.net

I.E.S. CESCA(ADO.NET)

Debajo de la conexión crear los siguientes métodos:

REM metodo para Listar los Cargos Public Function GetCargo() As DataTable Try Dim da As New SqlDataAdapter("Usp_Listar_Cargo", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure Dim ds As New DataSet da.Fill(ds, "Cargo") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 101/122Email:[email protected]

Page 102: Libroado.net

I.E.S. CESCA(ADO.NET)

REM metodo para Guardar Personal Public Function SetGurdar(ByVal CodPer As String, ByVal NomPer As String, ByVal ApEper As String, _ ByVal TelPer As String, ByVal DirPer As String, _ ByVal Dni As String, ByVal CodCargo As String, _ ByVal Retirado As String) As String Dim cmd As New SqlCommand("[usp_Guardar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New SqlParameter("@CodPer", SqlDbType.Char, 6)).Direction = ParameterDirection.Output cmd.Parameters.AddWithValue("@NomPer", NomPer) cmd.Parameters.AddWithValue("@ApePer", ApEper) cmd.Parameters.AddWithValue("@DirPer", DirPer) cmd.Parameters.AddWithValue("@TelPer", TelPer) cmd.Parameters.AddWithValue("@Dni", Dni) cmd.Parameters.AddWithValue("@CodCargo", CodCargo) cmd.Parameters.AddWithValue("@Retirado", Retirado) Try Dim codigo As String cn.Open() cmd.ExecuteNonQuery() cn.Close() codigo = cmd.Parameters("@CodPer").Value Return codigo Catch ex As Exception Throw ex End Try End Function

REM metodo para Actualizar PersonalPublic Sub SetActualizar(ByVal CodPer As String, ByVal NomPer As String, ByVal ApEper As String, _ ByVal TelPer As String, ByVal DirPer As String, _ ByVal Dni As String, ByVal CodCargo As String, _ ByVal Retirado As String) Dim cmd As New SqlCommand("[usp_Actualizar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New SqlParameter("@CodPer", SqlDbType.Char, 6)).Value = CodPer cmd.Parameters.AddWithValue("@NomPer", NomPer) cmd.Parameters.AddWithValue("@ApePer", ApEper) cmd.Parameters.AddWithValue("@DirPer", DirPer) cmd.Parameters.AddWithValue("@TelPer", TelPer) cmd.Parameters.AddWithValue("@Dni", Dni) cmd.Parameters.AddWithValue("@CodCargo", CodCargo) cmd.Parameters.AddWithValue("@Retirado", Retirado) Try cn.Open() cmd.ExecuteNonQuery() cn.Close() Catch ex As Exception Throw ex End Try End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 102/122Email:[email protected]

Page 103: Libroado.net

I.E.S. CESCA(ADO.NET)

REM metodo para Consultar PersonalPublic Function GetPersona(ByVal codigo As String) As DataTable Try Dim da As New SqlDataAdapter("[usp_Consultar_Personal]", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure da.SelectCommand.Parameters.AddWithValue("@CodPer", codigo) Dim ds As New DataSet da.Fill(ds, "Persona") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function

REM metodo para Elimanar Personal Public Sub SetEliminar(ByVal Codigo As String) Dim cmd As New SqlCommand("[usp_Eliminar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.AddWithValue("@CodPer", Codigo) Try cn.Open() cmd.ExecuteNonQuery() cn.Close() Catch ex As Exception Throw ex End Try End Sub

Ahora una ves creado los métodos nos dirigimos al formulario para trabajar:En el ámbito a nivel de clase declarar la variable obj de tipo operaciones:

Dim obj As New Operacionesdim condi as String=""

Crear los siguientes procedimientos a nivel general:Private Sub LimpiarCajas() For Each Item As Object In Me.GroupBox1.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If Next End Sub Private Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.GroupBox1.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 103/122Email:[email protected]

Page 104: Libroado.net

I.E.S. CESCA(ADO.NET)

Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean) btnnuevo.Enabled = nuevo btnguardar.Enabled = Guardar btnModificar.Enabled = modificar btnconsultar.Enabled = Consultar btncancelar.Enabled = Cancelar btneliminar.Enabled = eliminar btnsalir.Enabled = salirEnd Sub

Ahora en el evento Load del formulario codificar lo siguiente:

cbocargo.DataSource = obj.GetCargocbocargo.DisplayMember = "Cargo"cbocargo.ValueMember = "CodCargo"LimpiarCajas()Habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)

Ahora en el evento Clic del botón “Nuevo”

condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)txtApePer.Focus()txtCodPer.ReadOnly = True

Ahora en el evento Clic del botón “Modificar”

condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodPer.ReadOnly = TruetxtApePer.Focus()

Ahora en el evento Clic del botón “Guardar”

If condi = "N" Then txtCodPer.Text = obj.SetGurdar(txtCodPer.Text, Me.txtNomPer.Text, Me.txtApePer.Text, Me.txtTelPer.Text, Me.txtDirPer.Text, Me.txtDNI.Text, Me.cbocargo.SelectedValue, Me.txtRetirado.Text) MessageBox.Show("Registro Guardado") habilitar(1, 0, 0, 1, 0, 0, 1) LimpiarCajas() HabilitarCajas(False)ElseIf condi = "M" Then obj.SetActualizar(txtCodPer.Text, Me.txtNomPer.Text, Me.txtApePer.Text, Me.txtTelPer.Text, Me.txtDirPer.Text, Me.txtDNI.Text, Me.cbocargo.SelectedValue, Me.txtRetirado.Text) MessageBox.Show("Registro Actualizado") habilitar(1, 0, 0, 1, 0, 0, 1) LimpiarCajas() HabilitarCajas(False)End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 104/122Email:[email protected]

Page 105: Libroado.net

I.E.S. CESCA(ADO.NET)

Ahora en el evento Clic del botón “Eliminar”

obj.SetEliminar(Me.txtCodPer.Text)MessageBox.Show("Registro Eliminado")LimpiarCajas()habilitar(1, 0, 0, 1, 0, 0, 1)

Ahora en el evento Clic del botón “Consultar”

Try Dim codigo As String codigo = InputBox("Ingrese Codigo", "Ingrese") Dim dt As New DataTable dt = obj.GetPersona(codigo) Me.txtCodPer.Text = dt.Rows(0)(0).ToString.Trim Me.txtApePer.Text = dt.Rows(0)(1).ToString.Trim Me.txtNomPer.Text = dt.Rows(0)(2).ToString.Trim Me.txtDirPer.Text = dt.Rows(0)(3).ToString.Trim Me.txtTelPer.Text = dt.Rows(0)(4).ToString.Trim Me.txtDNI.Text = dt.Rows(0)(5).ToString.Trim Me.cbocargo.SelectedValue = dt.Rows(0)(6) Me.txtRetirado.Text = dt.Rows(0)(7).ToString.Trim habilitar(0, 0, 1, 0, 1, 1, 0) HabilitarCajas(False) txtCodPer.ReadOnly = TrueCatch ex As Exception MessageBox.Show("Error el codigo ingresado no existe")End Try

Ahora en el evento Clic del botón “Cancelar”

LimpiarCajas()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)

Ahora en el evento Clic del botón “Salir”

If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then Close() End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 105/122Email:[email protected]

Page 106: Libroado.net

I.E.S. CESCA(ADO.NET)

Usando del parámetro de salida OutPutObjetivo:Al término de esta separata el alumno tendrá el conocimiento de:

Utilizar el parámetro OutPut Uso del metodo AddWithValue de la propiedad Parameters

Ejercicio:Antes de desarrollar este ejercicio deberemos de crear los stores proceduresDesde el analizador de consultas (SQL Server) codificar:

Use AlmacenGo--Creamos la table FacturaCreate Table Factura(NumFact Char(8)Not null,CodClie Char(8)not null,FechaEmi DateTime,CodPer Char(6),Total Decimal(10,2),Anula Char(1),Emitido Char(1)Primary key(NumFact)Foreign key(CodPer) References [Personal])Go--Creamos la Tabla Detalle_FacturaCreate Table Detalle_Factura(NumFact Char(8)not null,CodArti Char(7)not null,CantArti Int,PreUnit Decimal(10,2),Importe Decimal(10,2)Primary key(NumFact,CodArti)Foreign key(NumFact)References Factura,Foreign key(CodArti)References Articulo)Go

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 106/122Email:[email protected]

Page 107: Libroado.net

I.E.S. CESCA(ADO.NET)

Aquí los SPSp para Guardar Factura

Create Proc Usp_Guardar_Factura_x@NumFact Char(8)OutPut,@CodClie Char(8),@FechaEmi DateTime,@CodPer Char(6),@Total Decimal(10,2),@Anula Char(1),@Emitido Char(1)AsDeclare @NumFactura char(8), @max int, @Cod Char(8)Select @Cod=Max(NumFact)+ 1 From FacturaSet @max=Len(@Cod)Select @NumFactura=Substring(NumFact,1,8-@max)+@Cod From Factura--Se condiciona en el caso de q la table este baciaIf @NumFactura is nullBegin Set @NumFactura='00000001'EndInsert into Factura(NumFact,CodClie,FechaEmi,CodPer,Total,Anula,Emitido)Values(@NumFactura,@CodClie,@FechaEmi,@CodPer,@Total,@Anula,@Emitido)Set @NumFact=@NumFacturaGo--Provar el SPDeclare @NumFact Char(8)exec Usp_Guardar_Factura_x @NumFact output,'CL000001','23/06/2009','PER001',30.00,'N','S'print @NumFactGo--Sp para Guardar Detalle FacturaCreate Proc Usp_Guardar_Detalle_x@NumFact char(8),@CodArti Char(7),@CantArti Int,@PreUnit Decimal(10,2),@Importe Decimal(10,2)AsInsert Into Detalle_Factura(NumFact,CodArti,CantArti,PreUnit,Importe)Values(@NumFact,@CodArti,@CantArti,@PreUnit,@Importe)Go

--Sp para Consultas

Create Proc Usp_Clientes_TodosAsSelect CodClie,Rtrim(Rtrim(ApeClie) +','+ NomClie) as [Cliente] From ClienteGo

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 107/122Email:[email protected]

Page 108: Libroado.net

I.E.S. CESCA(ADO.NET)

---Sp para traer todos los productosCreate Proc Usp_Productos_todosAsSelect CodArti,RTrim(DesArti) as [DesArti],PrecVenta From ArticuloGo--Sp para traer todos los ClientesCreate Proc Usp_Traer_Cliente_x_Cod@CodClie Char(8)AsSelect DirClie,RucClie,TelClie From ClienteWhere CodClie=@CodClieGo

Crear un proyecto de tipo WindowsForm, con el nombre “Facturacion”

Diseñar la siguiente interfase:

Agregar una clase al proyecto de nombre “Operaciones” y codificar

En el ámbito de importaciones importar los namespace:

Imports System.DataImports System.Data.SqlClient

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 108/122Email:[email protected]

Page 109: Libroado.net

I.E.S. CESCA(ADO.NET)

A nivel de clase:

Dim cn As New SqlConnection("User id=sa;Server=.;DataBase=Almacen;Integrated security=true")

'Metodo para traer datos(todos los cliente y Articulos) Public Function GetDatosFac() As DataSet Try Dim da As New SqlDataAdapter("Usp_Clientes_Todos", cn) da.SelectCommand.CommandType = CommandType.Text Dim ds As New DataSet() da.Fill(ds, "Cliente") da.SelectCommand.CommandText = "Usp_Productos_todos" da.Fill(ds, "Producto") Return ds Catch ex As Exception Throw ex End Try End Function

'Metodo para traer datos del cliente Public Function getCliente(ByVal CodClie As String) As DataTable Try Dim da As New SqlDataAdapter("Usp_Traer_Cliente_x_Cod", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure Dim ds As New DataSet() da.SelectCommand.Parameters.Add(New SqlParameter("@CodClie", SqlDbType.Char, 8)).Value = CodClie da.Fill(ds, "Clientes") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 109/122Email:[email protected]

Page 110: Libroado.net

I.E.S. CESCA(ADO.NET)

'Metodo para Guardar los Datos de la Factura(Cabecera y Detalle)Public Function SetFactura(ByVal CodClie As String, ByVal FechaEmi As DateTime, ByVal CodPer As String, ByVal total As Decimal, ByVal anula As String, ByVal Emitido As String, ByVal detalle As DataTable) As Stringcn.Open()Dim trans As SqlTransaction = cn.BeginTransaction()Dim cmdCabe As New SqlCommand("Usp_Guardar_Factura_x", cn)cmdCabe.CommandType = CommandType.StoredProcedurecmdCabe.Transaction = transDim cmdDeta As New SqlCommand("Usp_Guardar_Detalle_x", cn)cmdDeta.CommandType = CommandType.StoredProcedurecmdDeta.Transaction = transcmdCabe.Parameters.Add(New SqlParameter("@NumFact", SqlDbType.Char, 8)).Direction = ParameterDirection.OutputcmdCabe.Parameters.AddWithValue("@CodClie", CodClie)cmdCabe.Parameters.AddWithValue("@FechaEmi", FechaEmi)cmdCabe.Parameters.AddWithValue("@CodPer", CodPer)cmdCabe.Parameters.AddWithValue("@Total", total)cmdCabe.Parameters.AddWithValue("@Anula", anula)cmdCabe.Parameters.AddWithValue("@Emitido", Emitido)Dim Codigo As StringcmdCabe.ExecuteNonQuery()Codigo = cmdCabe.Parameters("@NumFact").Value.ToString()

For Each Fila As DataRow In detalle.Rows

cmdDeta.Parameters.Add(New SqlParameter("@NumFact", SqlDbType.Char, 8)).Value = Codigo

cmdDeta.Parameters.AddWithValue("@CodArti", Fila("Codigo"))cmdDeta.Parameters.AddWithValue("@CantArti", Fila("Cant"))cmdDeta.Parameters.AddWithValue("@PreUnit", Fila("Precio"))cmdDeta.Parameters.AddWithValue("@Importe", Fila("Importe"))cmdDeta.ExecuteNonQuery()cmdDeta.Parameters.Clear()

NextTrytrans.Commit()Return Codigo

Catch ex As Exceptiontrans.Rollback()Throw exFinallyIf cn.State <> ConnectionState.Closed Thencn.Close()End IfEnd Try

End Function

Codificar en el Formulario:

Dim Obj As New Operaciones()Dim CodPro As StringDim dtProd, dtDet As New DataTable()Dim dr As DataRowDim SubTotal As Decimal

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 110/122Email:[email protected]

Page 111: Libroado.net

I.E.S. CESCA(ADO.NET)

//Creamos 1 Metodo para crear la tabla q se enlaza con la grilla

Private Sub CrearTabla() dtDet.Columns.Add("Codigo", GetType(String)) dtDet.Columns.Add("Descripcion", GetType(String)) dtDet.Columns.Add("Precio", GetType(Decimal)) dtDet.Columns.Add("Cant", GetType(Integer)) dtDet.Columns.Add("Importe", GetType(Decimal)) dgdDetalle.DataSource = dtDet dgdDetalle.Columns(0).Width = 60 dgdDetalle.Columns(1).Width = 150 dgdDetalle.Columns(2).Width = 60 dgdDetalle.Columns(3).Width = 60 dgdDetalle.Columns(4).Width = 60

End Sub

En el Load del Formulario:

Try CboCliente.DataSource = Obj.GetDatosFac().Tables(0) CboCliente.DisplayMember = "Cliente" CboCliente.ValueMember = "CodClie" CboCliente.Text = "" dtProd = Obj.GetDatosFac().Tables(1) cboProducto.DataSource = dtProd cboProducto.DisplayMember = "DesArti" cboProducto.ValueMember = "PrecVenta" cboProducto.Text = "" Me.txtPrecio.Text = "" lblFecha.Text = DateTime.Now.ToLongDateString() CrearTabla()

Catch ex As Exception

End Try

En el evento SelectedIndex_Ghanged del combo “cboCliente”Try

Dim dt As New DataTable()dt = Obj.getCliente(CboCliente.SelectedValue.ToString())txtDirClie.Text = dt.Rows(0)(0).ToString()txtRuc.Text = dt.Rows(0)(1).ToString()txtTelClie.Text = dt.Rows(0)(2).ToString()

Catch ex As Exception

End Try

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 111/122Email:[email protected]

Page 112: Libroado.net

I.E.S. CESCA(ADO.NET)

En el evento SelectedIndex_Ghanged del combo “cboProducto”:

TryCodPro = dtProd.Rows(cboProducto.SelectedIndex)(0).ToString()Me.txtPrecio.Text = cboProducto.SelectedValue.ToString()

Catch ex As Exception

End TryEn el evento Clic del boton “Adicionar”

dr = dtDet.NewRow()dr(0) = CodProdr(1) = cboProducto.Textdr(2) = txtPrecio.Textdr(3) = txtCant.Textdr(4) = Decimal.Parse(txtCant.Text) * Decimal.Parse(txtPrecio.Text)dtDet.Rows.Add(dr)SubTotal += Decimal.Parse(txtPrecio.Text) * Decimal.Parse(txtCant.Text)txtSubTotal.Text = SubTotal.ToString()txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")txtTotal.Text = (SubTotal + Decimal.Parse(txtIGV.Text)).ToString()txtCant.Clear()

En el evento Clic del boton “Eliminar”

SubTotal -= Decimal.Parse(dtDet.Rows(dgdDetalle.CurrentCell.RowIndex)(4).ToString())txtSubTotal.Text = SubTotal.ToString()txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")txtTotal.Text = (SubTotal * Decimal.Parse(txtIGV.Text)).ToString("N2")dtDet.Rows.RemoveAt(dgdDetalle.CurrentCell.RowIndex)

En el evento Clic del boton “Grabar”

txtFactura.Text = Obj.SetFactura(CboCliente.SelectedValue, Now.Date, "PER001", Convert.ToDecimal(txtTotal.Text), "N", "S", dtDet).ToString

MessageBox.Show("Registro Almacenado con exito")

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 112/122Email:[email protected]

Page 113: Libroado.net

I.E.S. CESCA(ADO.NET)

Manejo de reportes:Paso 1 Crear un nuevo proyecto:

Paso 2En el explorador de soluciones clic derecho / agregar / agregar nuevo elemento

Paso 3Ubicar el icono CrystalReport y cambiar de nombre Rptcliente clien en Agregar:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 113/122Email:[email protected]

Page 114: Libroado.net

I.E.S. CESCA(ADO.NET)

Paso 4Nos mostrara la siguiente ventana / Aceptamos la licencia damos click en el boton Ok

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 114/122Email:[email protected]

Page 115: Libroado.net

I.E.S. CESCA(ADO.NET)

Paso 5:Nos muestra la siguiente imagen como deseamos crear el informe asi q seleccionamos el del medio el informe en blanco y luego click en el boton OK.

Paso 6:Describiendo el entorno:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 115/122Email:[email protected]

1) CLICK 2) yluego pulsa el

boton OK

Origen de Datos

Cabezera del reporte

Titulo de la columna

Columna de enlace

Pie de pagina.

Vista Prelimnar.

Vista Diseño

Page 116: Libroado.net

I.E.S. CESCA(ADO.NET)

Paso 7:Click derecho sobre Campos de base de datos:

8) Nos apertura la siguiente ventana:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 116/122Email:[email protected]

Darle Click Aqui

Darle Click

Page 117: Libroado.net

I.E.S. CESCA(ADO.NET)

9)Nos despliega el siguiente arbol:

Nos despliega la siguiente Ventana:

Seleccionamos Microsoft OLEDB Provider for SQL ServerLuego hacemos click en el botón siguiente:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 117/122Email:[email protected]

Darle Click

Darle Click

Page 118: Libroado.net

I.E.S. CESCA(ADO.NET)

10) Nos despliega un venta para conectarnos al origen de datos:

En Servidor indicamos el nombre de tu servidor: ojo de tu servidor ;)

En Id del usuario indicamos el usuario en este caso q es SA cierto ;)

En contraseña indicamos el password en este caso también creo q es 123 ;)

Base datos seleccionamos Almacen

11) Luego siguiente y finalizar ;)Bueno por defecto ya tenemos una conexión establecida más o menos como la siguiente imagen:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 118/122Email:[email protected]

Page 119: Libroado.net

I.E.S. CESCA(ADO.NET)

Seleccionamos la Ficha almacen y nos despliega dbo, information, sys.En dbo encontramos nuestras tablas procedimientos almacenados, vistas de la BD.

Seleccionamos la ficha tablas y seleccionamos la tabla Cliente:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 119/122Email:[email protected]

Page 120: Libroado.net

I.E.S. CESCA(ADO.NET)

Luego de seleccionar lo pasamos:

Aceptamos

Luego nos ubicamos en Campos de base de datos:

Nos percatamos de q la tabla cliente se ah añadido junto con los campos:

Arrastrar los campos que deseas mostrar en la seccion 3 asi:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 120/122Email:[email protected]

PASAR

Page 121: Libroado.net

I.E.S. CESCA(ADO.NET)

Le damos una vista Preliminar para ver cómo va quedando:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 121/122Email:[email protected]

Page 122: Libroado.net

I.E.S. CESCA(ADO.NET)

Listo una vez creado el reporte empezamos a consumir desde un formulario:EL primer ejemplo seria con el formulario 1:Dentro del formulario vamos a agregar un control llamado CrystalReportViewer

Una vez agregado el control codificamos en el evento Load del formulario Ojo evento LOAD:

Dim report As New RptClientereport.SetDatabaseLogon("sa", "1234")CRVCliente.ReportSource = report

Y por ultimo probamos la aplicación con un F5

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 122/122Email:[email protected]

ControlCrystalReportViewr

Lo llamaremos Name=CRVCliente