Vous êtes sur la page 1sur 123

I.E.S.

CESCA
(ADO.NET)

Taller de Desarrollo III


ADO.NET

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 1/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic.NET (II)


Objetivo
Al trmino 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 mayora de las aplicaciones escritas en visual Basic giran en entorno a la lectura y


escritura actualizacin de informacin de base de datos para permitir la integracin de
datos en aplicaciones distribuidas y escalables, Visual Studio .NET es compatible con una
nueva generacin de tecnologa de acceso a datos: ADO.NET

ADO.NET.- Es un conjunto de libreras para el acceso de datos, ya sea estn en una base
de datos o en hoja de clculo 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 especfico que estn preparados para manejar datos.

ADO.NET.- Proporciona un acceso coherente a origen de datos como Microsoft SQL


Server, as como orgenes 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 orgenes 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 especficos hace posible no solo la simplificacin a nivel de la
codificacin sino tambin en el consumo de recursos. Trabajar en entornos conectados
como desconectados permite al desarrollador desarrollar las mejores prcticas en funcin
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 ms un redistribuible que se necesita alojar junto al
cliente o junto al instalador de un aplicacin. Esto simplifica que nosotros, como
desarrolladores, estaremos enfocados mas el acceso a datos y a la lgica para manipular
estos datos, y no tendremos porque preocuparnos en las libreras 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 orgenes de datos
como Microsoft SQL Server, as como orgenes de datos expuestos mediante OLE DB y
XML.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 2/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

A continuacin se detallan algunos conceptos bsicos:

ADO.NET es una tecnologa 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.

Adems 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 programacin incluida la


creacin 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 aplicacin 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
orgenes 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 aplicacin 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 orgenes de


de dato. Tiene componentes principales: el Dataset y el proveedor de Datos .NET.

Espacios de nombres para datos en el .NET Framwork


Entre los espacios de nombres de .NET Framework relativos a datos y XML de incluyen:
System.Data
Consiste 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

La arquitectura ADO.NET permite crear componentes que administran eficientemente


datos procedentes de mltiples orgenes. ADO.NET tambin proporciona las herramientas
necesarias para solicitar, Actualizar y reconciliar datos en aplicaciones distribuidoras.

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

System.Xml
Clases que proporcionan funcionalidad basad en estndares para procesar cdigo XML .

System.Data.OleDb
Clases que componen el proveedor de datos de .NET Framework para orgenes de datos
compatibles con OLE DB, ejecutar comandos en el origen y leer los resultados.

System.Data.SqlClient
Clases 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.SqlTypes
Proporciona clases para tipos de datos nativos de SQL Server. Estas Clases ofrecen una
alternativa ms segura y ms rpida a otros tipos de datos.

System.Data.Odbc
Clases que componen el proveedor de datos de .NET Framework para OLE DB. Estas
Clases permiten el acceso a orgenes 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 orgenes de datos Oracle en el espacio administrado.

El proveedor de datos .NET FrameWork


El 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 propsito
especfico, junto con datos de varios orgenes, o de utilizarlos de forma remota entre
niveles.

El diseo del proveedor de datos de .NET Framework hace que sea ligero, de manera que
cree un nivel mnimo entre el origen de datos y su cdigo, con lo que aumenta el
rendimiento sin sacrificar la funcionalidad.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 4/123


Email:yauyo148@hotmail.com
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 propsito
especfico, junto con datos de varios orgenes, o de utilizarlos de forma remota entre
niveles. El diseo del proveedor de datos de .NET Framework hace que sea ligero, de
manera que cree un nivel mnimo entre orgenes de datos y su cdigo, con lo que aumenta
el rendimiento sin sacrificar la funcionalidad.

Proveedor de datos d .NET Descripcin


Proveedor de datos de .NET para SQL Para Microsoft SQL Server Versin 7.0 o
Server posteriores
Proveedor de datos de .NET para OLEDB Para orgenes de datos que se exponen
mediante OLE DB
Proveedor de datos de .NET para ODBC Para orgenes de datos que se exponen
mediante ODBC
Proveedor de datos de .NET para Oracle Para orgenes de datos de oracle. El
proveedor de datos de .NET Framework
para Oracle es compatible con la versin
8.1.7 y posteriores del software del cliente
de Oracle.

Objetos provistos por distintos proveedores de datos .NET


Los 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 Descripcin Objeto SQL Server Objeto OleDB

Connection Establece una conexin a un SqlConnection OleDBConnection


origen de datos determinado
Command Ejecuta un comando en un SqlCommand OleDBCommand
origen de datos
DataReader Lee una secuencia de datos de SqlDataReader OleDBDataReader
solo avance y solo lectura desde
un origen de datos.
DataApapter Llena un DataSet y realiza las SqlDataAdpater OleDBDataApapter
actualizaciones necesarias en el
origen de datos.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 5/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

VB.NET ADO.NET
Estudiando los Namespace
OleDb y SqlClient
Objetivo:
Al trmino 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.Data
Imports System.Data.OleDB

Cuando importamos los espacios entre nombres System.Data.OleDb importamos todas las
libreras de clases que contiene el espacio entre nombre OleDb y por consecuente las
principales clases que me carga ala hora de importacin son los siguientes:

OleDbCommand
OleDbConnection
OleDbDataAdapter
OleDbDataReader

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

Imports System.data
Imports 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:

SqlConnection
SqlDataAdapter
SqlCommand
SqlDataReader

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 6/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Propiedades Principales tanto para SqlConnection y OleDbConnection

ConnectionString
Obtiene o establece la cadena de conexin Utilizada para abrir una base de datos
SQL-Server o Microsoft Access.

Database
Obtiene el nombre de la base datos actual o de la que se va a utilizar una vez que
se abre la conexin.

DataSource
Obtiene el nombre de la instacia de SQL Server con la que se va a establecer la
conexin.

ChangeDatabase
Cambia la base de datos actual de una conexin SqlConnection abierta.

Open
Abre una conexin de base de datos con los valores de propiedad que espesifica el
connectionString o mi cadena de conexin.

Close
Cierra la cadena de conexin con la base de datos.

CreateCommand
Crea y debuelve un objeto Sqlcommand asociado a la conexin.

Estudiando el objeto OleDbConnection:

En este ejemplo utilizaremos la base de datos del profesor


Este Objeto representa la conexin de mi BD de Microsoft Access

Ejemplo Con Microsoft Access:

Crear un nuevo Proyecto BDnegocio

1.-Disear el Siguiente Formulario:

frmconecion

BtnAbrir BtnCerrar

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 7/123


Email:yauyo148@hotmail.com
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 sera OleDbconeecion

Rem Declaro mi cadena de conexin


Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\Control de Ventas.mdb"

Rem Paso mi variable a mi objeto de conexin es decir a OleDbConnection


Dim cn As New OleDbConnection(strcon)

Propiedades de la cadena de conexin 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo Con SQL Server:

Estableciendo una conexin con SQL Server 2005

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

1.-Agregar un nuevo Formulario y disear la siguiente interfaz:

frmconecion

BtnAbrir

btncerrar

2.- Importar el namespace SqlClient

Se debe crear las variables que representan la cadena de conexin y el objeto conexin, 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 Conexin:

La cadena de conexin, 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Initial Catalog: =Demo


Nombre 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

VB.NET ADO.NET
Estudiando los Namespace
OleDb y SqlClient
Objetivo:
Al trmino de esta separata el alumno Conocer:

Ejemplo 01:

Disear la siguiente interfaz:

En el mbito de importaciones importar los siguientes namespace:

Imports System.Data.OleDb
Imports 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 botn Abrir evento Click:


cn.Open()
MessageBox.Show("Conexin Establecida", "Conexin", MessageBoxButtons.OK,
MessageBoxIcon.Information)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 11/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el botn Cerrar evento Click:


cn.Close()
MessageBox.Show("Conexin Cerrad", "Conexin", MessageBoxButtons.OK,
MessageBoxIcon.Information)

En el botn Mostrar evento Click:

REM si el estado de la conexin es Diferente a open Abrimos la cadena de conexin


If cn.State <> ConnectionState.Open Then
cn.Open()
End If
txtDataSource.Text = cn.DataSource 'Ruta de la Base de datos
txtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexion
txtVersion.Text = cn.ServerVersion 'la Version del Servidor
txtProvider.Text = cn.Provider 'Solo el Proveedor
txtDataBase.Text = Path.GetFileName(cn.DataSource) ' La BD
txtDatabaseSinExtension.Text = Path.GetFileNameWithoutExtension(cn.DataSource) ' Sin
extension
txtDirectorio.Text = Path.GetDirectoryName(cn.DataSource)
REM si el estado de la conexin es igual a open la cadena de conexion lo cerramos.
If cn.State = ConnectionState.Open Then
cn.Close()
End If

En el botn Limpiar evento Click:

Eso te lo dejo para ti


Una vez terminado a probar la aplicacin:

Para recordar.

El Imports System.IO permite traer la clase Path esta clase me permite visualizar todas las
caractersticas de la ubicacin del archivo.

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

StreamReader: permiten leer un archivo de texto


StreamWriter: permiten un Archivo de texto

Deseas un ejemplo en un botn ejecuta estas lneas de cdigo:


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 botn ubcate en el disco C y encontraras el archivo


creado con el nombre Ejemplo.txt

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 12/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo con Sql-Server 2008

1) Ingresar al Sql:
Botn Inicio/Ejecutar/ssms

2) Nos visualizar la siguiente ventana:

Server Type: Tipo de servidor


Server name: Nombre del servidor (Nombre de la PC)
Authentication: Tipo de autenticacin existen dos tipos

1. Autenticacin Windows
2. Autenticacin Sql-Server
Diferencias.

Cuando utilizamos la cuenta Autenticacin Windows no es necesario ingresar el


usuario ni el password pero si utilizamos la autenticacin Sql-Server nos va a pedir
obligatoriamente que ingresemos un usuario y password.

Tipo de Servidor = Motor de Base de datos


Server Name= . Si no te acuerdas el nombre de tu servidor solo pongas un punto
Authentication= Autenticacin Sql-Server
Usuario=sa
Password=123

Luego haces click en el botn conectar.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 13/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Se visualizar la siguiente ventana.


Click aqu (New Query = Nueva Consulta
)

Se visualizar la siguiente ventana.

Seccin de Trabajo.
)

En seccin de trabajo codificar lo siguiente:

Use master
Go
--Creamos la BD Ventas
Create Database Ventas
Go
--Usamos la BD ventas
Use Ventas
Go

Una vez terminado presionar F5


Hasta ac hemos creado una BD en Sql Server 2008 de nombre Ventas Ahora a
consumirlo.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 14/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Crear un proyecto de tipo Aplicacin Windows Forms


Disear 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 botn Abrir evento Click:


cn.Open()
MessageBox.Show("Conexin Establecida", "Conexin", MessageBoxButtons.OK,
MessageBoxIcon.Information)
En el botn Cerrar evento Click:
cn.Close()
MessageBox.Show("Conexin Cerrad", "Conexin", MessageBoxButtons.OK,
MessageBoxIcon.Information)
En el botn Mostrar evento Click:
cn.Open()
txtDataSource.Text = cn.DataSource 'Nombre Servidor
txtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexion
txtVersion.Text = cn.ServerVersion 'la Version del Servidor
txtWorkstationId.Text = cn.WorkstationId 'el cliente quien lo consume
txtDataBase.Text = cn.Database ' La BD
REM 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 conexin para cualquier BD.
http://www.connectionstrings.com/

Manual de ADO.NET 1
http://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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

ADO.NET
Estudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset

Objetivo:
Al trmino de esta separata el alumno ser capas de manejar los objetos:

OleDbdataAdapter
SqlDataAdapter
Dataset

Estudiando el objeto OleDbDataAdapter y SqlDataAdapter


Representa un conjunto de comandos de datos y una conexin 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 asignacin del
mtodo 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 mtodo Fill

El mtodo Fill de DataAdapter llena un DataSet slo con las columnas y filas de un
origen de datos.

DataAdapter contiene tambin las propiedades SelectCommand, InsertCommand,


DeleteCommand, UpdateCommand para facilitar la carga y la actualizacin de los datos.

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

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

DeleteCommand

Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL


para eliminar registros de un conjunto de datos.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 16/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

UpdateCommand

Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL


Para actualizar los registros del origen de datos.

Otros mtodos 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

Cadena de Conexin

SqlConnection

Open

SqlDataAdapter

Close Fill

Dataset

SqlDataAdapter

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 17/123


Email:yauyo148@hotmail.com
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 conexin. El DataSet es una representacin residente en
memoria de datos que proporciona un modelo de programacin relacional coherente
independiente del origen de datos. Se puede utilizar con mltiples y distintos orgenes de
datos. Con datos XML o para administrar datos locales de la aplicacin. El Dataset
representa un conjunto completo de datos entre los que se incluyen tablas relacionadas,
restricciones y relacionales en la tabla.

Entonces se podra decir que el DATASET es una pequea base de datos relacional
mantenida en memoria en el cliente. Dispone de las capacidades de crear mltiples tablas,
rellenarlas con datos que preceden de diferentes fuentes, imponer relaciones entre pares
de tablas, etc.

Modelo esquemtico del DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 18/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

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

Objetivo:
Al trmino 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 aplicacin para
Windows y disear 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el botn 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 botn Ver Producto codificar lo siguiente:

Dim da As New OleDbDataAdapter("Select * From Productos", cn)


da.Fill(ds, "Productos")
dgdProductos.DataSource = ds.Tables(1)
Propuesto:

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 20/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

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

Max (Campo): permite traer el mximo valor del conjunto de filas.


Min (Campo): permite traer el mnimo 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 botn 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 02:

Disear la siguiente interfaz:

Modificar las siguientes propiedades de los DataGridView:

Control Propiedad Valor


dgdProducto SelectionMode FullRowSelect
ReadOnly True
RowHeaderVisible False
AllowUserToDeleteRows False
AllowUserToAddRows 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/123


Email:yauyo148@hotmail.com
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 ordenar


Private Sub QuitarOrdenGrid(ByVal dgv As DataGridView)
Dim I As Integer
For I = 0 To dgv.Columns.Count - 1
dgv.Columns(I).SortMode = DataGridViewColumnSortMode.NotSortable
Next
End 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 botn 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Dataset
Objetivo:
Al trmino de esta separata el participante conocer:

Conocer el objeto Dataset


Conocer sus propiedades metodos del Dataset

DataSet
DataSet, 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 coleccin de objetos DataTable que se pueden relacionar entre ellos
mediante objetos DataRelation. Tambin se puede imponer la integridad de los datos de
DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Para obtener
informacin ms detallada sobre el trabajo con objetos DataSet.

Los objetos DataTable contienen los datos, mientras que DataRelationCollection permite
desplazarse por la jerarqua de la tabla. Las tablas estn incluidas en un
DataTableCollection al que se obtiene acceso a travs de la propiedad Tables. Al obtener
acceso a los objetos DataTable, hay que tener en cuenta que stos distinguen entre
maysculas y minsculas condicionalmente. Por ejemplo, si un objeto DataTable se
denomina "mydatatable" y otro "Mydatatable", la cadena que se utilice para buscar una de
las tablas se considerar que distingue entre maysculas y minsculas. Sin embargo, si
existe "mydatatable" pero no existe "Mydatatable", se considerar que la cadena de
bsqueda no distingue entre maysculas y minsculas.

Principales Propiedades del objeto Dataset

Tables: Obtiene la coleccin de tablas incluidas en DataSet.

Relations: Obtiene la coleccin de relaciones que vincula las tablas y permite el


desplazamiento desde las tablas primarias a las secundarias.

Principales Mtodos 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/123


Email:yauyo148@hotmail.com
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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Trabajando en Forma desconectada
Objetivo:
Al trmino de esta separata el participante conocer:

Trabajar en forma desconectada

Disear 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 = Hand


Modificar las propiedades del control dgvClientes
SelectionMode=FullRowSelect
ReadOnly=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 OleDbDataAdapter
Dim ds As New DataSet

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 26/123


Email:yauyo148@hotmail.com
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 botn Nuevo

txtCod.Text = ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1)(0) + 1


txtClie.Clear()
txtCargo.Clear()
txtConta.Clear()
txtClie.Focus()

7) En el evento click del botn Adicionar

Dim dr As DataRow = ds.Tables(0).NewRow


dr.BeginEdit()
dr(0) = txtCod.Text
dr(1) = txtConta.Text
dr(2) = txtClie.Text
dr(3) = txtCargo.Text
dr.EndEdit()
ds.Tables(0).Rows.Add(dr)

8) En el evento click del botn Actualizar


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

9) En el evento click del botn Eliminar


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

10) En el evento click del botn Guardar Cambios


If ds.HasChanges = True Then
cn.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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

11) En el evento click del botn Mostrar Cambios


Dim frm As New Form
Dim dgv As New DataGridView
dgv.DataSource = ds.Tables(0).GetChanges
frm.Text = "Lista de Cambios en la Tabla"
dgv.Dock = DockStyle.Fill
frm.Controls.Add(dgv)
frm.ShowDialog()

12) En el evento click del botn Salir


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

13) Ah probar la aplicacin


Propuesto hacer lo mismo pero con la tabla Proveedores con todos sus campos.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 28/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Estudiando el objeto DataView
Objetivo:

Conocer el objeto DataView

Un dataview me permite crear mltiples vistas de uno o ms 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 nmero 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.
Adems permite a los Dataviews vincularse y utilizarse para DataBinding. De manera
clasifica, la unin de datos se utilizaba dentro de las aplicaciones para aprovechar los
datos almacenados en las bases de datos.

La unin 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 mnimo de requerimientos).

Bsicamente un dataview posee como propiedades importantes:

ITEM: Obtiene una fila de una tabla determina (ROW)


TABLE: Obtiene o asigna el objeto DataTable
SORT: Obtiene o asigna la/s Columna/s y el ordenamiento
RowFilter: obtiene o asigna la expresin para filtrar la vista

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 29/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Realizando Bsquedas de datos
Objetivo:

Conocer el objeto DataView


Conocer sus propiedades
Uso de la clase BindingSource

Laboratorio Prctico
Ejemplo 01:

La guardar la BD ventas en el disco D

Disear el siguiente formulario:

RBcodigo RBNombreProducto RBPrecioUnidad

txtBuscar

Ahora lo que ms nos gusta codificar:

En al mbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 30/123


Email:yauyo148@hotmail.com
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 BindingSource
Dim 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 Then
dv.Sort = "CodigoProducto"
End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 31/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el evento CheckedChanged de RBNombreProducto


If RBcodigo.Checked Then
dv.Sort = " NombreProducto desc"
End If

En el evento CheckedChanged de RBPrecioUnidad


If RBPrecioUnidad.Checked Then
dv.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.PaleGreen
End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 32/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 02:

Disear el siguiente formulario:

Ahora lo que ms 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 BindingSource
Dim dv As DataView
Dim TipoDato as String

Crear los siguientes procedimientos:

Rem Procedimiento para quitar el ordenamiento


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

Rem Procedimiento para llenar el combobox


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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 33/123


Email:yauyo148@hotmail.com
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 DataSet


da.Fill(ds, "Pedido")
'Llenamos la vista
dv = ds.Tables(0).DefaultView
'Enlazamos el BindingSource con la vista
bs.DataSource = dv
'Llenamos la Grilla
dgvPedido.DataSource = bs
ListarCampos()
QuitarOrdenacion(dgvPedido)

En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:

dv.Sort = cboCriterio.Text
TipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name.ToString
txtBuscar.Clear()

En el evento TextChanged del control txtBuscar codificar lo siguiente:

Dim pos As Integer


If txtBuscar.Text <> "" Then
Dim 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 Then
pos = dv.Find(dr(0)(cboCriterio.Text))
End If
ElseIf TipoDato = "String" Then
dr = dv.Table.Select(cboCriterio.Text & " Like'" & txtBuscar.Text & "%'")
If dr.Length > 0 Then
pos = dv.Find(dr(0)(cboCriterio.Text))
End If
ElseIf TipoDato = "DateTime" Then
If txtBuscar.Text.Length = 10 Then
If IsDate(txtBuscar.Text) Then
pos = dv.Find(txtBuscar.Text)
Else
MessageBox.Show("Ingrese Una Fecha Valida")
End If
End If
ElseIf TipoDato = "Boolean" Then
If txtBuscar.Text = "1" Or txtBuscar.Text = "0" Then
dr = dv.Table.Select(cboCriterio.Text & "=" & txtBuscar.Text)
pos = dv.Find(dr(0)(cboCriterio.Text))
Else
MessageBox.Show("Ingrese uno o cero")
txtBuscar.Clear()
End If
End If
If pos > -1 Then bs.Position = pos
End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 34/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el evento DoubleClick del control dgvPedido codificar lo siguiente:

'Creamos un Formulario
Dim frmDetalle As New Form
'Modificamos sus propiedades del frmDetalles
frmDetalle.Text = "Detalles de Pedidos"
frmDetalle.Width = 600
frmDetalle.Height = 200
frmDetalle.StartPosition = FormStartPosition.CenterScreen
'Creamos una DataGridView
Dim dgv As New DataGridView
'Modificamos sus propiedades del dgv
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
dgv.ReadOnly = True
dgv.Dock = DockStyle.Fill
'Declaramos una variable para capturar el codigo
Dim 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 DataSet
da.Fill(ds, "Detalles")
'Enlazamos el dataset con el dgv
dgv.DataSource = ds.Tables(0)
'Agregamos el dgv al Formulario frmDetalle
frmDetalle.Controls.Add(dgv)
'Mostramos el Formulario
frmDetalle.ShowDialog()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 35/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Manejo de DataView con MS-Access
Objetivo
Al trmino de esta separata el alumno tendr el conocimiento de:

Manejo de filtros con DataView

Filtros con DataView


Ejemplo 01:

Disear el siguiente formulario:

Modificar las siguientes propiedades de dgvEmpleados:

SelectionMode=FullRowSelect
ReadOnly=True
Anchor = activar todos los bordes

Ahora lo que ms nos gusta codificar:

En al mbito de importaciones codificar lo siguiente:

Imports System.Data.OleDb

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 36/123


Email:yauyo148@hotmail.com
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 BindingSource
Dim 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 DataSet
da.Fill(ds, "Personal")
dv = ds.Tables(0).DefaultView
bs.DataSource = dv
dgvEmpleados.DataSource = dv
LblTot.Text = dv.Table.Rows.Count

En el evento TextChanged del control txtFiltro codificar lo siguiente:

If txtFiltro.Text.Trim <> "" Then


dv.RowFilter = "Apellidos Like'" & txtFiltro.Text & "%'"
Else
dv.RowFilter = ""
End If
LblTot.Text = dgvEmpleados.Rows.Count

Ah probar la aplicacin.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 37/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 01:

Disear el siguiente formulario:

Modificar las siguientes propiedades de dgvProducto:

SelectionMode=FullRowSelect
ReadOnly=True
Anchor = activar todos los bordes

Ahora lo que ms 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 BindingSource
Dim dv As DataView

Crear los siguientes procedimientos:

REM procedimiento para quitar la ordenacin

Private Sub QuitarOrdenacion(ByVal dgv As DataGridView)


For i As Integer = 0 To dgv.Columns.Count - 1
dgvProducto.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable
Next
End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 38/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

REM procedimiento para listar los campos dentro del combobox cbocriterio
Private Sub ListarCampos()
For i As Integer = 0 To dv.Table.Columns.Count - 1
cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)
Next
End 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 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
dgvProducto.DataSource = bs
QuitarOrdenacion(dgvProducto)
ListarCampos()

En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:

REM ordeno segun el criterio y obtengo el tipo de dato


dv.Sort = cboCriterio.Text
TipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name

En el evento TextChanged del control txtFiltro codificar lo siguiente:

If txtFiltro.Text.Trim <> "" Then


REM 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 Fecha


If txtFiltro.Text > 10 Then
If IsDate(txtFiltro.Text) Then
dv.RowFilter = cboCriterio.Text & "='" & txtFiltro.Text & "'"
Else
MessageBox.Show("Ingrese una Fecha Valida", "Ingrese")
End If
End If
End If
Else
dv.RowFilter = ""
End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 39/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Trabajar Forma Administrada
Objetivo:
Al trmino de esta separa el alumno conocera:

Como trabajar en forma administrada

Potenciando nuestro adaptador de datos


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

El 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
modificacin debe realizar; luego se le asigna al SqlDataAdapter con el comando
especific segn la accin del comando.

La configuracin del SqlCommand, varia al del interior en este tenemos que indicarle el
tipo de dato y adems el nombre del campo que se hace referencia.

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

Sqlcommand([Procedimiento para la inserccion],[Conexion])


sqlDataAdapter.SelectCommand=SqlCommand

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

Sqlcommand([Procedimiento para la inserccion],[Conexion])


sqlDataAdapter.InsertCommand=SqlCommand

SqlDataAdapter.Deletecommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para eliminar registros de un conjunto de datos.

Sqlcommand([Procedimiento para la inserccion],[Conexion])


sqlDataAdapter.Deletecommand=SqlCommand

SqlDataAdapter.UpdateCommand
Obtiene o establece un procedimiento almacenado o una instruccin 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Trabajando en Forma Administrada
Objetivo:
Al trmino 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 VentasPeru
go
use VentasPeru
go
Create 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Crear un nuevo proyecto y disear la siguiente interfas: DgdProductos

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 DataSet
Dim 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,@De
sPro,@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/123


Email:yauyo148@hotmail.com
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 botn 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo de Vistas Administrados


Ejemplo1:
Crear la BD y la tabla Productos:
use master
go
create database VentasPeru
go
use VentasPeru
go
Create 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
--Select * From Productos

Crear un proyecto windows y disear la siguiente interfaz:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 44/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Recuerda si ves en control TABControl tiene 5 pestaas bien cada pestaa 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 ms 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 conexin:

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:

Try
da.Fill(ds, "Productos")
DgdCliente.DataSource = ds.Tables(0)
REM Vista Simple
Dim dvVista As New DataView
With dvVista
.Table = ds.Tables(0)
.AllowDelete = False
.AllowEdit = True
.AllowNew = True
.RowFilter = ""
.Sort = "CodPro Desc"
End With
Dgdfiltrado.DataSource = dvVista

REM Vista Original que no han sido Modificado


Dim dvVistaOriginal = New DataView(ds.Tables(0), "", "CodPro Desc",
DataViewRowState.Unchanged)
dgdNoModi.DataSource = dvVistaOriginal
REM Modificados
Dim dvModofi = New DataView(ds.Tables(0), "", "CodPro Desc",
DataViewRowState.CurrentRows)
dgdModi.DataSource = dvModofi

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 45/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

REM Modificados Originales


Dim dvModoOri = New DataView(ds.Tables(0), "", "CodPro Desc",
DataViewRowState.ModifiedOriginal)
dgdOriModi.DataSource = dvModoOri
REM Eliminados
Dim dvEliminados = New DataView(ds.Tables(0), "", "CodPro Desc",
DataViewRowState.Deleted)
DgdEliminados.DataSource = dvEliminados
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 46/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Manejo de BindingContext y DataBindings
Objetivo
Al trmino de esta separata el alumno tendr el conocimiento de:

Conocer los conceptos de BindingContext y DataBindings


Conocer mtodos 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 informacin 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 cmo usarlo

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

Este objeto es el que mantiene la posicin 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/123


Email:yauyo148@hotmail.com
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 instruccin.

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

Luego para administrar por ejemplo la posicin actual o lo que es lo mismo el registro
activo se utiliza la siguiente instruccin.

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

Note en la instruccin anterior que se utiliza la propiedad BindingContext del formulario,


como lo dicho en las lneas de arriba, la propiedad position va a mantener sincronizados
los controles enlazados al Dataset

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 48/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Trabajo 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 almacn y crear el siguiente Store

Create proc Usp_Traer_Cliente


as
Select C.CodClie,C.ApeClie,C.NomClie,
C.DirClie,D.NomDis,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from Cliente C
inner join Distrito D on C.CodDis=D.CodDis

Crear un proyecto de tipo WindowsForm, con nombre DataBinding

Pasos

1.- Disear la siguiente Internas:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 49/123


Email:yauyo148@hotmail.com
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 activo


Private Sub Registro(ByVal posicion As Integer)
lblregistro.Text = "Registro " & posicion.ToString & " de " _
& Me.BindingContext.Item(ds.Tables(0)).Count.ToString
End 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 botn 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 botn 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 botn 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 botn 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/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Propiedades principales del control


ListBox y Combobox
Objetivo:
Al trmino 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 Combobox
Propiedades:

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

DataSource
Obtiene o establece el origen de datos.

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

SelectedValue
Obtiene o establece el valor del control segn la configuracion..

SelectedIndex
Obtiene o establece el indice que espesifica el elemento seleccionado.
Ejemplo 01

TxtValor1 TxtValor2

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 51/123


Email:yauyo148@hotmail.com
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 conexin 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 conexin de = Manera SJM

En el evento Load Codificar lo siguiente:

Try
REM Procedimiento para Listar Distrito
REM Consulta a la tabla Distrito
Dim da As New SqlDataAdapter("Select CodDis,NomDis From Distrito", cn)
REM espesifico el tipo de comando
da.SelectCommand.CommandType = CommandType.Text
REM LLenado de datos
da.Fill(ds, "Dis")
REM Enlazando los datos con el ListBox y configurando
ListBox1.DataSource = ds.Tables(0)
ListBox1.DisplayMember = "NomDis"
ListBox1.ValueMember = "CodDis"

Rem Listado del combobox


Dim da2 As New SqlDataAdapter("Select CodClie,(Rtrim(ApeClie) + ','+NomClie) as
NomCom From Cliente", cn)
da2.SelectCommand.CommandType = CommandType.Text
Dim dt As New DataTable
da2.Fill(dt)
ComboBox1.DataSource = dt
ComboBox1.DisplayMember = "NomCom"
ComboBox1.ValueMember = "CodClie"

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

En el evento SelectedIndexChanged del ListBox codificar lo siguiente:

Try
txtValor1.Text = ListBox1.SelectedValue
Catch ex As Exception
End Try

Has lo mismo para el control Combobox Ok

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 52/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Consultas en ambiente desconectado


Objetivo:
Al trmino de esta separata el alumno Conocer:

Implementar sentencias SQL


Uso del objeto Dataset

Ejemplo 01

Disear 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 conexin 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 conexin de = Manera SJM

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 53/123


Email:yauyo148@hotmail.com
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.Text
da.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.Text
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt

End Sub

En el evento Load del formulario codificar lo siguiente:

Try
ListarCliente()
Catch ex As Exception

End Try

En el evento Click del botn Buscar

ListarClientexCodigo()

Por ultimo ejecutar!!!

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 54/123


Email:yauyo148@hotmail.com
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 conexin 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 conexin 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.Text
Dim ds As New DataSet
da.Fill(ds, "Clientes")
DataGridView1.DataSource = ds.Tables(0)
End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 55/123


Email:yauyo148@hotmail.com
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.Text
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End 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/123


Email:yauyo148@hotmail.com
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 conexin 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 conexin 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 comando


da.SelectCommand.CommandType = CommandType.Text
REM LLenado de datos
da.Fill(ds, "Dis")
REM Enlazando los datos con el ListBox y configurando
ComboBox1.DataSource = ds.Tables(0)
ComboBox1.DisplayMember = "Nom"
ComboBox1.ValueMember = "CodDis"
End Sub

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 57/123


Email:yauyo148@hotmail.com
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.Text
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End 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 ex
End Try

Por ultimo ejecutar!!!

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 58/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Propuesto:

1) Cuando seleccione una opcin: por ejemplo si selecciono la opcin 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 segn mi opcin
seleccionado.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 59/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Consultas en ambiente desconectado


Objetivo:
Al trmino de esta separata el alumno Conocer:

Implementar sentencias SQL


Uso del objeto Dataset

Ejemplo 1:

Crear la la Siguiente BD en SQL:

Create Database Ventas


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

Luego en VS.NET
Crear la siguiente Interfaz:

txtUsuario

txtPassword

Modificar la propiedad: btnIngresar


PasswordChar = *

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 60/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el evento a nivel de clase crear la cadena de conexin:

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 conexin 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 DataTable


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

Else
MessageBox.Show("Error Usted no es usuario del sistema", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Resultado:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 61/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 62/123


Email:yauyo148@hotmail.com
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 opcin fallida me cerrara el formulario Login.
3) Validar el Login
4) Si el usuario es correcto me tendra que llamar a un formulario padre MDI

Resultado:

El usuario se mostrara en un StatusStrip

Que la fuerza .NET te acompae

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 63/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Laboratorio del objeto Dataview
Objetivo:
Al trmino de esta separata el participante conocer:

Manejar filtros a trabes DataView

DataView
Para este ejemplo utilizare la base de datos Almacen.

1.-) Crear los Siguientes Stored Procedure

--USP para traer los distritos


create proc usp_Traer_dis
as
select CodDis,Rtrim(NomDis) as Distrito from Distrito
go
--USP para traer los Clientes
Create proc Usp_Traer_Cliente
as
Select C.CodClie,C.ApeClie,C.NomClie,
C.DirClie,Rtrim(D.NomDis) as Distrito,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from
Cliente C
inner join Distrito D on C.CodDis=D.CodDis
go
2.-)
cboDistrito dgdClientes
Disear el siguiente Formulario

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 64/123


Email:yauyo148@hotmail.com
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.StoredProcedure
da.Fill(ds, "Distrito")
cbodistrito.DataSource = ds.Tables(0)
cbodistrito.DisplayMember = "Distrito"
cbodistrito.ValueMember = "CodDis"
REM metodo para traer los clientes
da = New SqlDataAdapter("Usp_Traer_Cliente", cn)
da.SelectCommand.CommandType = CommandType.StoredProcedure
da.Fill(ds, "Clientes")
dv = ds.Tables("Clientes").DefaultView
dgdclientes.DataSource = ds.Tables("Clientes")

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

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

Por ltimo probar la aplicacin F5

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 65/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Usando el objeto DataView
Usar la base de datos Almacn:

Crear el procedimiento almacenado:

create proc usp_Traer_Articulos


as
select 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 a
inner join [Unidad de Medida] u on u.CodUnidad=a.CodUnidad
inner join Clase c on c.CodClase=a.CodClase
inner join Modelo m on m.CodModelo=a.CodModelo
inner join Marca Ma on Ma.CodMarca=a.CodMarca
inner join Personal P on p.CodPer=a.CodPer

2.-) Disear la siguiente interfas:

Importar el namespace
Imports 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 66/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Dim da As SqlDataAdapter
Dim ds As New DataSet
Dim 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.Text
TextBox1.Clear()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 67/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Visual Basic .NET II


Estudiando el Objeto SqlDataReader
Objetivo:
Al trmino de esta separata el participante conocer:

El paradigma de la conexin.
Uso del objeto DataReader y sus diferencias.

El paradigma de la conexin

Cuando abordamos un proyecto de acceso a fuentes de datos, siempre nos encontramos


con una duda existencial.
Debemos crear una conexin con la base de datos al principio de nuestra aplicacin y
cerrarla cuando la aplicacin se cierre?, o debemos crear una conexin con la base de
datos slo cuando vayamos a trabajar con la fuente de datos?. Y si estamos trabajando
continuamente con una fuente de datos?, cmo penalizaran todas estas acciones?.

Es difcil de asumir que accin tomar en cada caso, y es que dependiendo de lo que
vayamos a realizar, a veces es ms efectiva una accin que otra, y en otras ocasiones, no
est del todo claro, ya que no existe en s una regla clara que especifique qu accin tomar
en un momento dado.
Lo que s est claro es que el modelo de datos de ADO.NET que hemos visto, quedara
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 68/123


Email:yauyo148@hotmail.com
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 continuacin.

Conociendo el objeto DataReader

El objeto DataReader nos permite como hemos indicado anteriormente, establecer una
conexin 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 conexin se establezca
en un modo de slo 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 direccin

El objeto DataReader slo permite que nos desplacemos por los datos en una sola
direccin, sin vuelta atrs.
Por el contrario, el objeto DataSet nos permite movernos por los registros para adelante y
para atrs.
Adems, slo 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 conexin con el comando establecido.

DataReader es rpido

Debido a su naturaleza y caractersticas, este objeto es bastante rpido a la hora de


trabajar con datos.
Como es lgico, consume adems menos memoria y recursos que un objeto DataSet por
ejemplo.
Sin embargo, dependiendo de las necesidades con las que nos encontremos, puede que
este mtodo de acceso y trabajo no sea el ms idneo.

Analizando el flujo de trabajo de DataReader

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 69/123


Email:yauyo148@hotmail.com
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 grfico de esto es lo que podemos ver en la Imagen.

Usando la Clase SqlDataReader


Objetivo:
Conocer el uso fundamental del objeto SqlDataReader

Ejemplo 01:
Para este ejemplo utilizaremos la BD almacen:

En el formulario agregar un DataGridView.

Lo que ms nos gusta codificar:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 70/123


Email:yauyo148@hotmail.com
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 conexin:

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 Columnas


DgdCliente.Columns.Add("Codigo", "Codigo")
DgdCliente.Columns.Add("Apellido", "Apellido")
DgdCliente.Columns.Add("Nombre", "Nombre")
DgdCliente.Columns.Add("Direccion", "Direccion")
REM Redimencionamos las Columnas
DgdCliente.Columns(0).Width = 80
DgdCliente.Columns(1).Width = 130
DgdCliente.Columns(2).Width = 140
DgdCliente.Columns(3).Width = 230
REM Creamos nuestra consulta
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
REM ejecutamos el comando ExecuteReader
Dim dr As SqlDataReader = cmd.ExecuteReader
Dim i As Integer = 0
REM 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 71/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Control:
Utilizar la BD Almacen.
ListView
Crear un nuevo proyecto en VS.NET y disear la siguiente interfaz:

Haber codificar lo que ms 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 conexin:

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 72/123


Email:yauyo148@hotmail.com
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 mtodos creados:

LstClientes.View = View.Details
LstClientes.GridLines = True
REM Creamos las Columnas en ListView
LstClientes.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.Text
cmd.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 73/123


Email:yauyo148@hotmail.com
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 opcin 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 74/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Creando Variables dentro de una Instruccin SQL


Objetivo:
Al trmino de esta separa el alumno conocer:

Crear variable dentro de una instruccin sql


Funciones de tipo Sub y Function
Manejar las sentencias Insert, Update, Delete y Select

Restaurar la BD Almacen
cboDistrito
Ejemplo 01:

Importar el NameSpace

Imports System.Data.SqlClient
dgdCliente
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 75/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el botn 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
dgdCliente
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 76/123


Email:yauyo148@hotmail.com
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)
Columna

Fila

En el botn Buscar evento click codificar lo siguiente:

Dim codigo As String


codigo = InputBox("Ingrese codigo", "INGRESE")
GetLlenarCajas(codigo)

En el Combobox evento SelectedIndexChanged:


Try
GetLlenarCajas(cboCliente.SelectedValue)
Catch ex As Exception

End Try

Terminar el cdigo necesario para los controles de desplazamiento:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 77/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 03:
rbtClase rbtMarca rbtPersonal

Importar el NameSpace
dgdArticulos
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 Clase


Private 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 78/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

End Sub
Rem 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 Then
GetClase()
Else
Cboopcion.DataSource = Nothing
End If

En el evento CheckedChanged del control rbtMarca:


If RbtMarca.Checked = True Then
GetMarca()
Else
Cboopcion.DataSource = Nothing
End If

En el evento CheckedChanged del control rbtPersonal:


If rbtPersonal.Checked = True Then
GetPersonal()
Else
Cboopcion.DataSource = Nothing
End If

En el evento SelectedIndexChanged del control Combobox:


Try
If rbtClase.Checked = True Then
Dim da As New SqlDataAdapter("Select * From Articulo Where CodClase=@CodClase", cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodClase",
Cboopcion.SelectedValue)
Dim dt As New DataTable
da.Fill(dt)
dgdArticulos.DataSource = dt
lblfilas.Text = dt.Rows.Count
ElseIf RbtMarca.Checked = True Then
Dim da As New SqlDataAdapter("Select * From Articulo Where CodMarca=@CodMArca",
cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodMarca",
Cboopcion.SelectedValue)
Dim dt As New DataTable
da.Fill(dt)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 79/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

dgdArticulos.DataSource = dt
lblfilas.Text = dt.Rows.Count
ElseIf rbtPersonal.Checked Then
Dim da As New SqlDataAdapter("Select * From Articulo Where CodPer=@CodPer",
cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodPer",
Cboopcion.SelectedValue)
Dim dt As New DataTable
da.Fill(dt)
dgdArticulos.DataSource = dt
lblfilas.Text = dt.Rows.Count
End If
Catch ex As Exception

End Try

Ejemplo 04:

Disear la siguiente interfaz:

Btnnuevo Btnmodificar BtnConsultar BtnCancelar BtnSalir

Importar el NameSpace
BtnGuardar BtnEliminar
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 combobox


Private Sub Limpiar()

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 80/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

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
Next
End Sub

Rem procedimiento para habilitar todo seguido hasta el cierre del parntesis:
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 controles


Private 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 distritos


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 81/123


Email:yauyo148@hotmail.com
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 botn nuevo evento click:

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

En el botn Modificar evento click:

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

En el botn guardar evento click:


If condi = "N" Then
Dim 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" Then
Dim 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 82/123


Email:yauyo148@hotmail.com
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 botn Consultar evento click:


Try
Dim codigo As String
codigo = 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.Text
da.SelectCommand.Parameters.AddWithValue("@CodClie", codigo)
Dim dt As New DataTable
da.Fill(dt)
txtCodClie.Text = dt.Rows(0)(0).ToString.Trim
txtNomClie.Text = dt.Rows(0)(1).ToString.Trim
txtApeClie.Text = dt.Rows(0)(2).ToString.Trim
txtDirClie.Text = dt.Rows(0)(3).ToString.Trim
cboDistrito.SelectedValue = dt.Rows(0)(4)
txtTelClie.Text = dt.Rows(0)(5).ToString.Trim
txtDni.Text = dt.Rows(0)("DniClie").ToString.Trim
txtRucClie.Text = dt.Rows(0)(7).ToString.Trim
txtemail.Text = dt.Rows(0)(8).ToString.Trim
habilitar(0, 0, 1, 0, 1, 1, 0)
HabilitarCajas(False)
txtCodClie.ReadOnly = True

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

En el botn Eliminar evento click:

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 83/123


Email:yauyo148@hotmail.com
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 Exception
End Try

En el botn Cancelar evento click:

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

En el botn 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 84/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Clase SqlCommand
Objetivo:
Al trmino de esta separa el alumno conocer:

Conocer sus mtodos


Crear Funciones de tipo Sub y function
Diferencias de ExecuteNonQuery y ExecuteScalar

Representa un procedimiento almacenado o una instruccin 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 ejecucin de comandos en una
base de datos de SQL-Server.

CommandText Obtiene o establece el procedimiento almacenado o la Instruccin


SQL que se ejecutara en el origen de datos de acuerdo a la conexin
establecida.
Connection Obtiene o establece la conexin 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 instruccin 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.
ExecuteNonQue Ejecuta comandos como instrucciones INSERT, DELETE, UPDATE y
ry 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 ejecucin de instrucciones
SQL en el lado del servidor, el cual necesita dos parmetros tanto la instruccin SQL
como la conexin a donde debe apuntar.

Sintaxis:

Dim cmd as new SqlCommand(Instruccin SQL Procedimiento


Almacenado,Conexion)

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 85/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Una vez configurado el Command indicndole la instruccin a realizar y la conexin


donde apuntar, la ejecucin de esta instruccin se realiza con el mtodo.

cmd.ExecuteNonQuery

El cual no me duevelve ningn tipo de resultado. Solo se dedica a realizar la


instruccin en la base de datos donde apunta la conexin; para la devolucin de
resultados podramos utilizar ExecuteReader, el cual devuelve devuelve la consulta
en forma de un DataReader.

Ejemplo de SqlDataReader con el mtodo 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 Using
End Sub

Cuando usar ExecuteNonQuery o ExecuteScalar

En este artculo veremos cmo y cundo usar el mtodo 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 versin de Visual Studio para .NET.

Esto es lo que nos dice la ayuda de Visual Studio sobre el mtodo ExecuteNonQuery:

Ejecuta una instruccin SQL en un objeto de conexin.


Se puede utilizar ExecuteNonQuery para realizar operaciones de catlogo (por
ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos
como tablas) o para cambiar la informacin de una base de datos ejecutando las
instrucciones UPDATE, INSERT o DELETE.

Aunque ExecuteNonQuery no devuelva ninguna fila, los parmetros de salida o los


valores devueltos asignados a los parmetros se rellenan con datos.

Para las instrucciones UPDATE, INSERT y DELETE, el valor devuelto corresponde al


nmero de filas afectadas por el comando. Para los dems tipos de instrucciones, el
valor devuelto es -1.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 86/123


Email:yauyo148@hotmail.com
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 dems columnas y filas.

Utilice el mtodo 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


mayora 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 nmero de
filas eliminadas.
Por otro lado, ExecuteScalar lo usaremos cuando tengamos que ejecutar un cdigo
de SQL del que queremos recuperar la primera columna de la primera fila.
Este mtodo devuelve un valor de tipo Object que tendremos que convertir segn el
valor devuelto. Por ejemplo, si queremos saber el nmero de registros (filas) de una
tabla que cumple cierto criterio, podemos usar un comando SQL como este:

Select Count(CodClie) From Cliente Where CodDis=@CodDis


En este caso, el valor devuelto ser del tipo Int32 y ser el nmero 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 cdigos que
pertenezcan a dicho parmetro indicado. Si no hay ninguna fila que cumpla ese
criterio, devolver cero.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 87/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 01

Disear la siguiente interfaz:

Restaurar la BD Almacen:

Importar el NameSpace:

Imports System.Data.SqlClient

Crear la cadena de conexin en el mbito a nivel de clase:

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

En el botn Nuevo Codigo evento Click codificar lo siguiente:

REM Declaro mis variables


Dim Codigo, Cod, NuevoCodigo As String
Dim Max As Integer
REM Creo mi instruccion Sql
Dim cmd As New SqlCommand("Select CodClie From Cliente Order By CodClie desc",
cn)
cmd.CommandType = CommandType.Text
cn.Open()
Codigo = cmd.ExecuteScalar
cn.Close()
If Codigo Is Nothing Then
REM si me devuelde un valor nulo
TextBox1.Text = "CL000001"
Else
REM capturo el dato correlativo
Cod = Val(Strings.Right(Codigo, 6)) + 1
REM cuanto la longitud de la variable Cod
Max = Len(Cod)
REM uno las variables para generar el codigo
NuevoCodigo = Strings.Mid(Codigo, 1, 8 - Max) & Cod
TextBox1.Text = NuevoCodigo
End If

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 88/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ejemplo 02
Restaurar la BD almacen y disear la siguiente interfaz: GroupBox1

Btnnuevo Btnmodificar BtnConsultar BtnCancelar BtnSalir

Importar el NameSpace
BtnGuardar BtnEliminar
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 combobox


Private 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
Next
End Sub

Rem procedimiento para habilitar todo seguido hasta el cierre del parntesis:
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 89/123


Email:yauyo148@hotmail.com
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 controles


Private 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)
Try
Dim cmd As New SqlCommand("Insert into
Empresa(CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa)Values(@CodE
mpresa,@DesEmpresa,@DirEmpresa,@TelEmpresa,@RucEmpresa)", cn)
cmd.CommandType = CommandType.Text
cmd.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 Exception
MessageBox.Show("Error Ocurrio un Error en " & ex.Message)
End Try
End Sub

Rem procedimiento para Actualizar

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 90/123


Email:yauyo148@hotmail.com
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)
Try
Dim cmd As New SqlCommand("Update Empresa Set
DesEmpresa=@DesEmpresa,DirEmpresa=@DirEmpresa,TelEmpresa=@TelEmpresa,Ruce
mpresa=@RucEmpresa Where CodEmpresa=@CodEmpresa", cn)
cmd.CommandType = CommandType.Text
cmd.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 Exception
MessageBox.Show("Error Ocurrio un Error en " & ex.Message)
End Try
End Sub

Rem procedimiento para Consultar Datos y devolverlos en un DataTable:

Private Function GetConsultar(ByVal codigo As String) As DataTable


Try
Dim da As New SqlDataAdapter("Select
CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa From Empresa Where
CodEmpresa=@CodEmpresa", cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodEmpresa", codigo)
Dim dt As New DataTable
da.Fill(dt)
Return dt
Catch ex As Exception
MessageBox.Show("Error Ocurrio un Error en " & ex.Message)
End Try
End 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 91/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

habilitar(1, 0, 0, 1, 0, 0, 1)
HabilitarCajas(False)
Catch ex As Exception

End Try

En el botn nuevo evento click:


condi = "N"
HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 0)
Dim Codigo, Cod, NuevoCodigo As String
Dim Max As Integer
Dim cmd As New SqlCommand("Select CodEmpresa From Empresa Order By CodEmpresa
desc", cn)
cmd.CommandType = CommandType.Text
cn.Open()
Codigo = cmd.ExecuteScalar
cn.Close()
If Codigo Is Nothing Then
txtCodEmp.Text = "E00001"
Else
Cod = Val(Strings.Right(Codigo, 5)) + 1
Max = Len(Cod)
NuevoCodigo = Strings.Mid(Codigo, 1, 6 - Max) & Cod
txtCodEmp.Text = NuevoCodigo
End If : txtCodEmp.ReadOnly = True : txtDesEmp.Focus()

En el botn Modificar evento click:

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

En el botn Guardar evento click:

If condi = "N" Then


SetInsert(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" Then
SetUpdate(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 92/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el botn Consultar evento click:


Try
Dim codigo As String
codigo = InputBox("Ingrese Codigo", "Codigo")
Dim dt As New DataTable
dt = 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 = True
Catch ex As Exception
MessageBox.Show("El codigo ingresado no existe")
End Try

En el botn Eliminar evento click:

Try
Dim cant As Integer
cant = 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 botn 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 93/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Uso del DataTable


Objetivo:
Al trmino de esta separa el alumno conocer:

Que es un DataTable
Configurar el Datatable
Trabajar con Clases

Ejemplo 01

Restaurar la BD Almacen luego disear la siguiente interfaz:

Una vez diseado la siguiente interfaz agregar una clase: Como?:


Vea la siguiente imagen:

Menu Proyecto/Agregar Clase:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 94/123


Email:yauyo148@hotmail.com
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:

Clase Clase
Operaciones Agregada

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 conexin:

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

Nuestra clase operaciones quedara de la siguiente forma:

Debajo de la conexin crear los siguientes mtodos:


Rem Listado de todos los Articulos.
Public Function getArticulos() As DataSet
Try
Dim da As New SqlDataAdapter("Select CodArti,Rtrim(DesArti) as DesArti From Articulo",
cn)
da.SelectCommand.CommandType = CommandType.Text
Dim ds As New DataSet()
da.Fill(ds, "Articulos")
Return ds
Catch ex As Exception
Throw ex
End Try
End Function

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 95/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Rem Listado de todos los articulos segun el codigo


Public 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 apellido


Public Function getCliente() As DataSet
Try
Dim da As New SqlDataAdapter("Select CodClie,(Rtrim(NomClie) + ','+ RTrim(ApeClie)) as
NomCom From Cliente", cn)
da.SelectCommand.CommandType = CommandType.Text
Dim ds As New DataSet()
da.Fill(ds, "Cliente")
Return ds
Catch ex As Exception
Throw ex
End Try
End Function

Rem consultatando la direccion, telefono y ruc del cliente segun el codigo:


Public Function getCliente(ByVal CodClie As String) As DataSet
Try
Dim da As New SqlDataAdapter("Select DirClie,TelClie,RucClie From Cliente Where
CodClie=@CodClie", cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodClie", CodClie)
Dim ds As New DataSet()
da.Fill(ds, "Cliente")
Return ds
Catch ex As Exception
Throw ex
End Try
End Function

Ahora una vez creado los mtodos nos dirigimos al formulario para trabajar:
En el mbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim objOper As New Operaciones
Dim dt As New DataTable()
Dim drw As DataRow
Dim total As Decimal
Dim fila As Integer

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 96/123


Email:yauyo148@hotmail.com
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 = 60
End Sub

En el evento Load del Formulario codificar lo siguiente:

Try
CboArticulo.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 Exception
MessageBox.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() <> "" Then


txtPtot.Text = Convert.ToString(Decimal.Parse(txtCant.Text) *
Decimal.Parse(txtPrecio.Text))

Else

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 97/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

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

En el botn 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 botn 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 If
Catch ex As Exception
MessageBox.Show("Seleccione una Fila")
End Try

En el botn 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 98/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Manejo de Clases en .NET


Objetivo:
Al trmino de esta separa el alumno conocer:

Manejar los objetos de tipo Clase.


Crear Procedimientos Almacenados con parmetros de salida.

Restaurar la BD Almacen y crear los siguientes procedimientos


almacenados:

Create Proc [usp_Listar_Personal]


AS
Select CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal];
GO

Create Proc [usp_Consultar_Personal]


@CodPer char(6)
AS
Select CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal]
Where CodPer = @CodPer;
Go
Create 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)
AS
declare @Cod Char(6),@max int,@Codigo Char(6)
Select @Cod=Max(right(CodPer,3))+1 From Personal
Set @Max=Len(@Cod)
Select @Codigo=substring(CodPer,1,6-@Max)+@Cod From Personal
Insert Into [Personal] (CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado)
Values(@Codigo, @ApePer, @NomPer, @DirPer, @TelPer, @Dni, @CodCargo, @Retirado);
set @CodPer=@Codigo
GO
Create 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)
AS
Update [Personal] Set CodPer = @CodPer, ApePer = @ApePer, NomPer = @NomPer,
DirPer = @DirPer, TelPer = @TelPer, Dni = @Dni, CodCargo = @CodCargo, Retirado =
@Retirado Where CodPer = @CodPer;
GO

Create Proc [usp_Eliminar_Personal]

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 99/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

@CodPer char(6)
AS
Delete [Personal] Where CodPer = @CodPer;
Go

Create Proc Usp_Listar_Cargo


As
select CodCargo,Rtrim(DesCargo) Cargo from Cargo

Abrir el Visual Studio 2008 y crear un proyecto de tipo aplicacin para Windows, y
disear la siguiente interna:

GroupBox1

BtnSalir

Btnnuevo Btnmodificar BtnConsultar


Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 100/123
Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

BtnCancelar BtnGuardar BtnEliminar

Una vez diseado 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:

Clase Clase
Operaciones Agregada

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 conexin:

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

Nuestra clase operaciones quedara de la siguiente forma:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 101/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Debajo de la conexin crear los siguientes mtodos:

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 102/123


Email:yauyo148@hotmail.com
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 Personal


Public 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 103/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

REM metodo para Consultar Personal


Public 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 mtodos nos dirigimos al formulario para trabajar:
En el mbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim obj As New Operaciones
dim 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 104/123


Email:yauyo148@hotmail.com
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 = salir
End Sub

Ahora en el evento Load del formulario codificar lo siguiente:

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

Ahora en el evento Clic del botn Nuevo

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

Ahora en el evento Clic del botn Modificar

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

Ahora en el evento Clic del botn 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 105/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Ahora en el evento Clic del botn 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 botn 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 = True
Catch ex As Exception
MessageBox.Show("Error el codigo ingresado no existe")
End Try

Ahora en el evento Clic del botn Cancelar

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

Ahora en el evento Clic del botn 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 106/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Usando del parmetro de salida OutPut


Objetivo:
Al trmino de esta separata el alumno tendr el conocimiento de:

Utilizar el parmetro OutPut


Uso del metodo AddWithValue de la propiedad Parameters

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

Use Almacen
Go
--Creamos la table Factura
Create 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_Factura
Create 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 107/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Aqu los SP
Sp 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)
As
Declare @NumFactura char(8), @max int, @Cod Char(8)
Select @Cod=Max(NumFact)+ 1 From Factura
Set @max=Len(@Cod)
Select @NumFactura=Substring(NumFact,1,8-@max)+@Cod From Factura
--Se condiciona en el caso de q la table este bacia
If @NumFactura is null
Begin
Set @NumFactura='00000001'
End
Insert into Factura(NumFact,CodClie,FechaEmi,CodPer,Total,Anula,Emitido)
Values(@NumFactura,@CodClie,@FechaEmi,@CodPer,@Total,@Anula,@Emitido)
Set @NumFact=@NumFactura
Go
--Provar el SP
Declare @NumFact Char(8)
exec Usp_Guardar_Factura_x @NumFact
output,'CL000001','23/06/2009','PER001',30.00,'N','S'
print @NumFact
Go
--Sp para Guardar Detalle Factura
Create Proc Usp_Guardar_Detalle_x
@NumFact char(8),
@CodArti Char(7),
@CantArti Int,
@PreUnit Decimal(10,2),
@Importe Decimal(10,2)
As
Insert Into Detalle_Factura(NumFact,CodArti,CantArti,PreUnit,Importe)
Values(@NumFact,@CodArti,@CantArti,@PreUnit,@Importe)
Go

--Sp para Consultas

Create Proc Usp_Clientes_Todos


As
Select CodClie,Rtrim(Rtrim(ApeClie) +','+ NomClie) as [Cliente] From Cliente
Go

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 108/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

---Sp para traer todos los productos


Create Proc Usp_Productos_todos
As
Select CodArti,RTrim(DesArti) as [DesArti],PrecVenta From Articulo
Go
--Sp para traer todos los Clientes
Create Proc Usp_Traer_Cliente_x_Cod
@CodClie Char(8)
As
Select DirClie,RucClie,TelClie From Cliente
Where CodClie=@CodClie
Go

Crear un proyecto de tipo WindowsForm, con el nombre Facturacion

Disear la siguiente interfase:

Agregar una clase al proyecto de nombre Operaciones y codificar

En el mbito de importaciones importar los namespace:

Imports System.Data
Imports System.Data.SqlClient

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 109/123


Email:yauyo148@hotmail.com
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 110/123


Email:yauyo148@hotmail.com
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 String
cn.Open()
Dim trans As SqlTransaction = cn.BeginTransaction()
Dim cmdCabe As New SqlCommand("Usp_Guardar_Factura_x", cn)
cmdCabe.CommandType = CommandType.StoredProcedure
cmdCabe.Transaction = trans
Dim cmdDeta As New SqlCommand("Usp_Guardar_Detalle_x", cn)
cmdDeta.CommandType = CommandType.StoredProcedure
cmdDeta.Transaction = trans
cmdCabe.Parameters.Add(New SqlParameter("@NumFact", SqlDbType.Char, 8)).Direction =
ParameterDirection.Output
cmdCabe.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 String
cmdCabe.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()

Next
Try
trans.Commit()
Return Codigo

Catch ex As Exception
trans.Rollback()
Throw ex
Finally
If cn.State <> ConnectionState.Closed Then
cn.Close()
End If
End Try
End Function

Codificar en el Formulario:

Dim Obj As New Operaciones()


Dim CodPro As String
Dim dtProd, dtDet As New DataTable()
Dim dr As DataRow
Dim SubTotal As Decimal

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 111/123


Email:yauyo148@hotmail.com
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 112/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

En el evento SelectedIndex_Ghanged del combo cboProducto:

Try
CodPro = dtProd.Rows(cboProducto.SelectedIndex)(0).ToString()
Me.txtPrecio.Text = cboProducto.SelectedValue.ToString()
Catch ex As Exception

End Try
En el evento Clic del boton Adicionar

dr = dtDet.NewRow()
dr(0) = CodPro
dr(1) = cboProducto.Text
dr(2) = txtPrecio.Text
dr(3) = txtCant.Text
dr(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 113/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Manejo de reportes:
Paso 1
Crear un nuevo proyecto:

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

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 114/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Paso 4
Nos mostrara la siguiente ventana / Aceptamos la licencia damos click en el boton Ok

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 115/123


Email:yauyo148@hotmail.com
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.

1) CLICK

2) yluego pulsa el
boton OK

Paso 6: Cabezera del Titulo de la Columna de


Describiendo el entorno: reporte columna enlace

Origen de Datos

Pie de pagina.

Vista Diseo Vista Prelimnar.

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 116/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Paso 7:
Click derecho sobre Campos de base de datos:
Darle Click
Aqui

8) Nos apertura la siguiente ventana:

Darle Click

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 117/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

9)Nos despliega el siguiente arbol:

Darle Click

Nos despliega la siguiente Ventana:

Darle Click

Seleccionamos Microsoft OLEDB Provider for SQL Server


Luego hacemos click en el botn siguiente:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 118/123


Email:yauyo148@hotmail.com
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 contrasea indicamos el password en este caso tambin creo q es 123 ;)

Base datos seleccionamos Almacen

11) Luego siguiente y finalizar ;)


Bueno por defecto ya tenemos una conexin establecida ms o menos como la
siguiente imagen:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 119/123


Email:yauyo148@hotmail.com
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 120/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Luego de seleccionar lo pasamos:

PASAR

Aceptamos

Luego nos ubicamos en Campos de base de datos:

Nos percatamos de q la tabla cliente se ah aadido junto con los campos:

Arrastrar los campos que deseas mostrar en la seccion 3 asi:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 121/123


Email:yauyo148@hotmail.com
I.E.S. CESCA
(ADO.NET)

Le damos una vista Preliminar para ver cmo va quedando:

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 122/123


Email:yauyo148@hotmail.com
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

Control
CrystalReportViewr

Lo llamaremos
Name=CRVCliente

Una vez agregado el control codificamos en el evento Load del formulario Ojo evento
LOAD:
Dim report As New RptCliente
report.SetDatabaseLogon("sa", "1234")
CRVCliente.ReportSource = report
Y por ultimo probamos la aplicacin con un F5

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 123/123


Email:yauyo148@hotmail.com

Vous aimerez peut-être aussi