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 término de esta separata el alumno conocerá

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

INTRODUCCION

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

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

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

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

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

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

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 2/123
Email:yauyo148@hotmail.com

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

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

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

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

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

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

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

 ADO.NET utiliza un modelo de acceso pensando para entornos desconectados.
Esto quiere decir que la aplicación se conecta al origen de datos, hace lo que tiene
que hacer, por ejemplo seleccionar registros, los carga en memoria y desconecta
del origen de datos.
 ADO.NET es un conjunto de clases que usted utiliza para acceder y manipular
orígenes de datos como por ejemplo, una base de datos en SQL-Server o una
planilla de Excel.

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

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

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

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

Espacios de nombres para datos en el .NET 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

System.Data.com .NET Pagina 4/123 Email:yauyo148@hotmail. que permite conectarse a un origen de datos SQL-Server 7.Common Contiene las clases que comparten los proveedores de datos . ejecutar Comandos y leer los resultados.NET FrameWork El proveedor de datos .NET con el fin de exponerlos al usuario para un propósito específico.NET Framework para OLE DB.SqlClient es similar al espacio de nombres System.NET también proporciona las herramientas necesarias para solicitar. Un proveedor de datos de .OracleClient Clases que componen el proveedor de datos de .OleDb.NET framework para SQL Server. o de utilizarlos de forma remota entre niveles. ejecutar comandos y recuperar resultados.NET permite crear componentes que administran eficientemente datos procedentes de múltiples orígenes.SqlTypes Proporciona clases para tipos de datos nativos de SQL Server. Como una base de datos. Estas clases permiten el acceso a orígenes de datos Oracle en el espacio administrado.NET Framework hace que sea ligero.NET Framework. con lo que aumenta el rendimiento sin sacrificar la funcionalidad. El diseño del proveedor de datos de .Data. System.S. System. El proveedor de datos .Data.Odbc Clases que componen el proveedor de datos de .Data.0. en el espacio administrado. System.Data.E.NET Framework para orígenes de datos compatibles con OLE DB. Alejandro Yauyo Barrientos / Specialist Developer .Xml Clases que proporcionan funcionalidad basad en estándares para procesar código XML . Esos resultados se procesan directamente o se colocan en un Dataset de ADO. pero optimizado para el acceso a SQL Server 7.NET Framework sirve para conectarse a una base de datos. System. ejecutar comandos en el origen y leer los resultados.NET provee del enlace entre el origen de datos y el dataset.Data. Prof. Estas Clases ofrecen una alternativa más segura y más rápida a otros tipos de datos. System. junto con datos de varios orígenes.Data. System.NET) La arquitectura ADO. I.OleDb Clases que componen el proveedor de datos de .Data.NET Framework para Oracle. El espacio de nombre System. CESCA (ADO. Dichos proveedores describen una colección de clases que se utiliza para obtener acceso a un origen de datos. de manera que cree un nivel mínimo entre el origen de datos y su código.0 y versiones Posteriores. ADO.SqlClient Clases que conforman el proveedor de datos de . Actualizar y reconciliar datos en aplicaciones distribuidoras. Estas Clases permiten el acceso a orígenes de datos ODBC en el espacio administrado.

NET para SQL Para Microsoft SQL Server Versión 7.NET Framework. de manera que cree un nivel mínimo entre orígenes de datos y su código.0 o Server posteriores Proveedor de datos de . CESCA (ADO.NET Pagina 5/123 Email:yauyo148@hotmail.E.NET Framework para Oracle es compatible con la versión 8.NET para ODBC Para orígenes de datos que se exponen mediante ODBC Proveedor de datos de . El diseño del proveedor de datos de .1. ejecutar comandos y recuperar resultados. con lo que aumenta el rendimiento sin sacrificar la funcionalidad. DataReader y DataAdapter son elementos fundamentales del modelo del proveedor de datos .NET con el de exponerlos al usuario para un propósito específico.NET Descripción Proveedor de datos de . Objetos provistos por distintos proveedores de datos . En la tabla siguiente se describen estos objetos. I.7 y posteriores del software del cliente de Oracle. junto con datos de varios orígenes. DataApapter Llena un DataSet y realiza las SqlDataAdpater OleDBDataApapter actualizaciones necesarias en el origen de datos.NET Framework hace que sea ligero.NET para OLEDB Para orígenes de datos que se exponen mediante OLE DB Proveedor de datos de . o de utilizarlos de forma remota entre niveles. El proveedor de datos de . Proveedor de datos d .NET) Un proveedor de datos de . Prof.NET Framework sirve para conectarse a una base de datos.NET Los objetos Connection Command.com . Alejandro Yauyo Barrientos / Specialist Developer .S. Esos resultados se procesan directamente o se colocan en un DataSet de ADO. Objeto Descripción Objeto SQL Server Objeto OleDB Connection Establece una conexión 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.NET para Oracle Para orígenes de datos de oracle.

NET Pagina 6/123 Email:yauyo148@hotmail.S.Data Imports System.NET Estudiando los Namespace OleDb y SqlClient Objetivo: Al término de esta separata el alumno Conocerá:  Que es el objeto OleDb y SqlClient  Propiedades del objeto OleDbconection y Sqlconnection OleDb Este namespace me permite conectarme a una base de datos de Microsoft ACCESS su espacio entre nombres es: Imports System. I. Alejandro Yauyo Barrientos / Specialist Developer .com .Data.SqlClient se carga toda las librerias de clases para trabajar con SQL Server sus principales clases son: SqlConnection SqlDataAdapter SqlCommand SqlDataReader Prof. CESCA (ADO.NET ADO.E.OleDb importamos todas las librerías de clases que contiene el espacio entre nombre OleDb y por consecuente las principales clases que me carga ala hora de importación son los siguientes: 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.SqlClient Cuando importamos el espacio de entre nombres System.OleDB Cuando importamos los espacios entre nombres System.Data.Data.NET) VB.Data.

S.  DataSource Obtiene el nombre de la instacia de SQL Server con la que se va a establecer la conexión.  Close Cierra la cadena de conexión con la base de datos. Estudiando el objeto OleDbConnection: En este ejemplo utilizaremos la base de datos del profesor Este Objeto representa la conexión de mi BD de Microsoft Access Ejemplo Con Microsoft Access: Crear un nuevo Proyecto BDnegocio 1. Alejandro Yauyo Barrientos / Specialist Developer . CESCA (ADO.  Database Obtiene el nombre de la base datos actual o de la que se va a utilizar una vez que se abre la conexión.  CreateCommand Crea y debuelve un objeto Sqlcommand asociado a la conexión.  ChangeDatabase Cambia la base de datos actual de una conexión SqlConnection abierta.-Diseñar el Siguiente Formulario: frmconecion BtnAbrir BtnCerrar Prof.  Open Abre una conexión de base de datos con los valores de propiedad que espesifica el connectionString o mi cadena de conexión.NET) Propiedades Principales tanto para SqlConnection y OleDbConnection  ConnectionString Obtiene o establece la cadena de conexión Utilizada para abrir una base de datos SQL-Server o Microsoft Access.com .E.NET Pagina 7/123 Email:yauyo148@hotmail. I.

-En el Evento Click de BtnCerrar Ingresar lo Siguiente: cn.4.NET Pagina 8/123 Email:yauyo148@hotmail.E.OLEDB.0.mdb) 4.Luego Importar los Namespace: 3.Open() messageBox.Probar la aplicaccion Prof.NET) 2..Data Source=D:\Control de Ventas...S.Show("Conexion cerrada") 6..Debajo de frmconecion declarar una variable como la siguiente luego asigarle la variable al objeto de Connecion en este Caso sería OleDbconeecion Rem Declaro mi cadena de conexión Dim strcon As String = "Provider=Microsoft. CESCA (ADO.mdb" Rem Paso mi variable a mi objeto de conexión es decir a OleDbConnection Dim cn As New OleDbConnection(strcon) Propiedades de la cadena de conexión o Ruta Provaider: Hace la referencia que estoy usando una base de datos Microsoft Access Data Source: Indico la ruta de mi BD (D:\Control de Ventas.Show("Conexion Abierta con la base de datos") 5.Close() MessageBox.En el Evento Click del BtnAbrir Ingresar lo siguiente: cn. I.com .Jet. Alejandro Yauyo Barrientos / Specialist Developer .

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. I..NET) Ejemplo Con SQL Server: Estableciendo una conexión con SQL Server 2005 Para esto el Profesor entregara una base de datos creado en SQL Server.com . Prof. Dim strcon As String = "Initial Catalog=Demo. CESCA (ADO.. 1. Alejandro Yauyo Barrientos / Specialist Developer .Integrated Security=true" Dim cn As New SqlConnection(strcon) Analizando la Cadena de Conexión: La cadena de conexión.Importar el namespace SqlClient Se debe crear las variables que representan la cadena de conexión y el objeto conexión. en un ámbito general del formulario.E.-Agregar un nuevo Formulario y diseñar la siguiente interfaz: frmconecion BtnAbrir btncerrar 2.S.NET Pagina 9/123 Email:yauyo148@hotmail.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.S.E.Show("Conexion Cerrada") Prof.com . CESCA (ADO.Close() MessageBox.Show("Conexion Abierta") En el boton btnCerrar en el evento Click cn. I.Open() MessageBox. Alejandro Yauyo Barrientos / Specialist Developer . se puede utilizar cualquiera de los dos siguientes: Integrated Security=true" Integrated Security=SSPI" En el boton BtnAbrir en el evento Click cn.NET Pagina 10/123 Email:yauyo148@hotmail.NET) Initial Catalog: =Demo Nombre de la base de datos Data Source=".

Oledb.Open() MessageBox.Data Source=D:\Ventas. MessageBoxIcon.Show("Conexión Establecida".com .4. Alejandro Yauyo Barrientos / Specialist Developer . "Conexión".NET ADO.mdb" Dim cn As New OleDbConnection() En el evento “Load” del formulario: cn.E.0. MessageBoxButtons.OK. I. CESCA (ADO.OleDb Imports System.Data.NET Pagina 11/123 Email:yauyo148@hotmail.Information) Prof.ConnectionString = strcon En el botón “Abrir” evento Click: cn.S.Jet.NET) VB.NET Estudiando los Namespace OleDb y SqlClient Objetivo: Al término de esta separata el alumno Conocerá: Ejemplo 01: Diseñar la siguiente interfaz: En el ámbito de importaciones importar los siguientes namespace: Imports System.IO En el ámbito a nivel de clase declarar las siguientes variables: Dim strcon As String = "Provider=Microsoft.

Close() End If En el botón “Limpiar” evento Click: Eso te lo dejo para ti Una vez terminado a probar la aplicación: Para recordar.ServerVersion 'la Version del Servidor txtProvider. MessageBoxIcon.GetFileName(cn.DataSource 'Ruta de la Base de datos txtConnectionString. False.Open Then cn.S.Information) En el botón “Mostrar” evento Click: REM si el estado de la conexión es Diferente a open Abrimos la cadena de conexión If cn.State = ConnectionState.GetDirectoryName(cn.Open() End If txtDataSource.DataSource) ' La BD txtDatabaseSinExtension.DataSource) ' Sin extension txtDirectorio.Text = Path.Text = cn.Text = Path.IO permite traer la clase Path esta clase me permite visualizar todas las características de la ubicación del archivo.com .Text = cn.NET Pagina 12/123 Email:yauyo148@hotmail. "Conexión". CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .NET) En el botón “Cerrar” evento Click: cn. MessageBoxButtons.OK. No solo me permite traer a la clase Path también me permite traer las clases que permiten crear archivos y abrir archivos estas clases son: StreamReader: permiten leer un archivo de texto StreamWriter: permiten un Archivo de texto Deseas un ejemplo en un botón ejecuta estas líneas de código: Dim cadena As String = "Ejemplo de StreamWhiter" Dim sw As New StreamWriter("C:\Ejemplo.txt Prof.Close() Luego de hacer click en el botón ubícate en el disco C y encontraras el archivo creado con el nombre Ejemplo.Close() MessageBox.Provider 'Solo el Proveedor txtDataBase.Show("Conexión Cerrad". El Imports System.ConnectionString 'Toda la cadena de conexion txtVersion.Default) sw.Text = cn.State <> ConnectionState.Write(cadena) sw. If cn.Open Then cn.E. I.txt".Text = Path. Encoding.GetFileNameWithoutExtension(cn.DataSource) REM si el estado de la conexión es igual a open la cadena de conexion lo cerramos.Text = cn.

Tipo de Servidor = Motor de Base de datos Server Name= “. Alejandro Yauyo Barrientos / Specialist Developer . Autenticación Sql-Server Diferencias.S.E. I.NET Pagina 13/123 Email:yauyo148@hotmail.” Si no te acuerdas el nombre de tu servidor solo pongas un punto Authentication= Autenticación Sql-Server Usuario=sa Password=123 Luego haces click en el botón conectar. CESCA (ADO. Prof. Autenticación Windows 2.NET) Ejemplo con Sql-Server 2008 1) Ingresar al Sql: Botón Inicio/Ejecutar/ssms 2) Nos visualizar la siguiente ventana: Server Type: Tipo de servidor Server name: Nombre del servidor (Nombre de la PC) Authentication: Tipo de autenticación existen dos tipos 1.com . Cuando utilizamos la cuenta Autenticación Windows no es necesario ingresar el usuario ni el password pero si utilizamos la autenticación Sql-Server nos va a pedir obligatoriamente que ingresemos un usuario y password.

com .E. Prof. Sección de Trabajo.NET) Se visualizar la siguiente ventana.S. I. ) En sección 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.NET Pagina 14/123 Email:yauyo148@hotmail. CESCA (ADO. Click aquí (New Query = Nueva Consulta ) Se visualizar la siguiente ventana. Alejandro Yauyo Barrientos / Specialist Developer .

Show("Conexión Establecida".com/dir/xqEfIPhy/ADONET.Text = cn.Text = cn.html Prof.com .Show("Conexión Cerrad".Database ' La BD REM si el estado de conexiones es igual a open la cadena de conexion lo cerramos. Recursos. MessageBoxIcon. "Conexión"..Information) En el botón “Cerrar” evento Click: cn.Close() MessageBox.com/ Manual de ADO.Server=. "Conexión".Text = cn. http://www.NET) Crear un proyecto de tipo Aplicación Windows Forms Diseñar la siguiente interfaz: En el ámbito de importaciones importar el siguiente NameSpace: Imports System.OK.SqlClient En el ámbito a nivel de clase: Dim cn As New SqlConnection("User id=sa.connectionstrings.4shared.Data.OK.Information) En el botón “Mostrar” evento Click: cn.NET 1 http://www.Open() MessageBox.DataSource 'Nombre Servidor txtConnectionString.E.com/file/AFfP7HUz/Ventas.S. MessageBoxButtons.Close() End If Bueno una vez terminado a ejecutarlo.Text = cn. MessageBoxButtons. CESCA (ADO.NET Pagina 15/123 Email:yauyo148@hotmail.ConnectionString 'Toda la cadena de conexion txtVersion.Open() txtDataSource.4shared.ServerVersion 'la Version del Servidor txtWorkstationId.Open Then cn.DataBase=Ventas.State = ConnectionState. I.html BaseDatos Ventas http://www..Text = cn. Alejandro Yauyo Barrientos / Specialist Developer . MessageBoxIcon..Password=123") En el botón “Abrir” evento Click: cn.WorkstationId 'el cliente quien lo consume txtDataBase. Ver las cadenas de conexión para cualquier BD. If cn.

UpdateCommand para facilitar la carga y la actualización de los datos.NET) ADO. SelectCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para seleccionar registros en el origen de datos. DeleteCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar registros de un conjunto de datos.NET Estudiando los objetos OleDbDataAdapter. CESCA (ADO.com . Alejandro Yauyo Barrientos / Specialist Developer . Estudiando el método Fill El método Fill de DataAdapter llena un DataSet sólo con las columnas y filas de un origen de datos. y Update. que cambia los datos en el DataSet para que coincidan con los datos del origen de datos. se utiliza como un puente entre el DATASET y la BD para recuperar o guardar datos.S. 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. Prof. InsertCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para insertar nuevos registros en el origen de datos.NET Pagina 16/123 Email:yauyo148@hotmail. I. DeleteCommand. Proporciona este puente mediante la asignación del método FILL. InsertCommand. OleDbDataAdapter y SqlDataAdapter. DataAdapter contiene también las propiedades SelectCommand.E. SqlDataAdapter y Dataset Objetivo: Al término de esta separata el alumno será capas de manejar los objetos:  OleDbdataAdapter  SqlDataAdapter  Dataset Estudiando el objeto OleDbDataAdapter y SqlDataAdapter Representa un conjunto de comandos de datos y una conexión de base de datos que se utilizan para rellenar un DATASET y actualizar una base de datos SQL Server o Microsoft Access esta clase no se puede heredar.

S. Llama a las instrucciones INSERT. CESCA (ADO. o eliminada en DataSet.com . actualizada. Modelo de uso del Objeto DataAdapter Cadena de Conexión SqlConnection Open SqlDataAdapter Close Fill Dataset SqlDataAdapter Prof. Update (se hereda de DbDataAdapter) Compatible con . sobrecargado.NET) UpdateCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL Para actualizar los registros del origen de datos.NET compact Framework. I. Otros métodos de DataAdapter FillSchema (se hereda de DbDataAdapter) Agrega DATATABLE A DATASET y configura el esquema para hacerlo coincidir con el del origen datos.E. UPDATE o DELETE respectivamente para cada fila insertada.NET Pagina 17/123 Email:yauyo148@hotmail. Alejandro Yauyo Barrientos / Specialist Developer .

etc. I.E. rellenarlas con datos que preceden de diferentes fuentes. CESCA (ADO.NET sin mantener una conexión. restricciones y relacionales en la tabla. Dispone de las capacidades de crear múltiples tablas. El Dataset representa un conjunto completo de datos entre los que se incluyen tablas relacionadas. Alejandro Yauyo Barrientos / Specialist Developer . Con datos XML o para administrar datos locales de la aplicación. Se puede utilizar con múltiples y distintos orígenes de datos. Entonces se podría decir que el DATASET es una pequeña base de datos relacional mantenida en memoria en el cliente.NET) El objeto DATASET El objeto DATASET es esencial para admitir escenarios de datos distribuidos de ADO.S.NET Pagina 18/123 Email:yauyo148@hotmail. Modelo esquemático del DataSet Prof. El DataSet es una representación residente en memoria de datos que proporciona un modelo de programación relacional coherente independiente del origen de datos.com . imponer relaciones entre pares de tablas.

Data. SqlDataAdapter y Dataset Objetivo: Al término de esta separata el alumno será capas de manejar los objetos:  OleDbdataAdapter  SqlDataAdapter  Dataset 1) Guardar la BD “Control de Ventas” en el Disco “D” Brindada por docente. I.OLEDB.NET Pagina 19/123 Email:yauyo148@hotmail. CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .SqlClient Declarar las siguientes Variables en el ámbito a nivel de clase: Dim cn As New OleDbConnection("Provider=Microsoft.NET) ADO.Jet.mdb") Dim ds As New DataSet Prof. 2) Luego abrir el visual studio crear un nuevo proyecto de tipo aplicación para Windows y diseñar el siguiente interfaz: Importar el NameSpace OleDB en el ámbito de importaciones Imports System.4.com .0.NET (Lab) Estudiando los objetos OleDbDataAdapter.E.S.Data Source=D:\Control de Ventas.

S.Fill(ds. "Productos") dgdProductos. cn) da. CESCA (ADO. cn) da.E.NET) En el botón “Ver Cliente” codificar lo siguiente: Dim da As New OleDbDataAdapter("Select * From Clientes". Alejandro Yauyo Barrientos / Specialist Developer .Tables(1) Propuesto: !!! Diseñar la siguiente interfaz y practicar lo aprendido Nota: hacer uso de un solo DataSet Prof. "Cliente") dgdCliente.com .Tables(0) En el botón “Ver Producto” codificar lo siguiente: Dim da As New OleDbDataAdapter("Select * From Productos".DataSource = ds. I.NET Pagina 20/123 Email:yauyo148@hotmail.DataSource = ds.Fill(ds.

Max(PrecioUnidad). Ejemplo 01: Usar la BD Ventas En el ámbito de importaciones importar el siguiente NameSpace: Imports System.ToString("n2") txtPrecioMaximo.ToString("n2") Prof.AVG(PrecioUnidad) From Productos".ToString("n2") txtPrecioPromedio. CESCA (ADO.Jet.Rows(0)(3)).com .Tables(0). Min (Campo): permite traer el mínimo valor del conjunto de filas. Min.OLEDB.Text = CDec(ds.Tables(0).Rows(0)(1)).Fill(ds.S. Alejandro Yauyo Barrientos / Specialist Developer .Rows(0)(0)) txtPrecioMinimo.Rows(0)(2)). "Producto") txtTotal.NET) Laboratorio Practico Usando las funciones Max.OleDb En el ámbito a nivel de clase declarar la siguiente variable: Dim cn As New OleDbConnection("Provider=Microsoft.E. Count desde Access: Max (Campo): permite traer el máximo valor del conjunto de filas.mdb") Dim ds As New DataSet En el botón consultar evento click codificar lo siguiente: Dim da As New OleDbDataAdapter("Select Count(CodigoProducto).Data Source=D:\Ventas.Tables(0). I.Text = CDec(ds.NET Pagina 21/123 Email:yauyo148@hotmail.Text = CDec(ds.Min(PrecioUnidad). AVG.Text = CDec(ds. Avg (Campo): permite traer el promedio del todo conjunto de filas.Tables(0). Count(Campo): permite traer la cantidad de filas.4.Data. cn) da.0.

0.mdb") Dim ds As New DataSet Prof.Data Source=D:\Ventas.E.NET Pagina 22/123 Email:yauyo148@hotmail. Alejandro Yauyo Barrientos / Specialist Developer .S.com . I.OleDb En el ámbito a nivel de clase declarar la siguiente variable: Dim cn As New OleDbConnection("Provider=Microsoft.Data.Jet.NET) Ejemplo 02: Diseñar 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.4.OLEDB. CESCA (ADO.

Tables("Cargo") QuitarOrdenGrid(dgdCargos) En el evento Click del botón salir codificar lo siguiente: If MessageBox..Yes Then Application.S.NombreProducto From Productos Order by CodigoProducto desc".Fill(ds. MessageBoxIcon.Information) = DialogResult. I. Alejandro Yauyo Barrientos / Specialist Developer . cn) da3. RowHeaderVisible: ………………………………………………………………………….Tables("Producto") QuitarOrdenGrid(dgdProducto) dgdCliente.Exit() End If Definir las siguientes propiedades del control DataGridView Selection Mode=FullRowSelect: …………………………………………………………. "Salir".DataSource = ds...Fill(ds.com .NombreContacto From Clientes".NotSortable Next End Sub En el evento load del formulario codificar lo siguiente: Dim da1 As New OleDbDataAdapter("Select CodigoProducto.YesNo.1 dgv.NombreCliente. AllowUserToAddRows: …………………………………………………………………….NET Pagina 23/123 Email:yauyo148@hotmail.DataSource = ds. "Cargo") dgdProducto. AllowUserToResizeColumns: ……………………………………………………………… AllowUserToResizeRows: …………………………………………………………………… Prof.Columns(I).Columns.Tables("Cliente") QuitarOrdenGrid(dgdCliente) dgdCargos.Cargo From Cargos Order by IdCargo desc".SortMode = DataGridViewColumnSortMode.E. ReadOnly: …………………………………………………………………………………. CESCA (ADO.Show("Desea Salir"..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. cn) da1. cn) da2.DataSource = ds.Count . AllowUserToDeleteRows: …………………………………………………………………. "Cliente") Dim da3 As New OleDbDataAdapter("Select IdCargo. "Producto") Dim da2 As New OleDbDataAdapter("Select CodigoCliente.. MessageBoxButtons.Fill(ds.

NET) Visual Basic . Para obtener información más detallada sobre el trabajo con objetos DataSet. mientras que DataRelationCollection permite desplazarse por la jerarquía de la tabla. Los objetos DataTable contienen los datos.E. DataSet está compuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. representa un componente fundamental de la arquitectura de ADO.NET Pagina 24/123 Email:yauyo148@hotmail. si un objeto DataTable se denomina "mydatatable" y otro "Mydatatable". hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente.S. Principales Propiedades del objeto Dataset Tables: Obtiene la colección de tablas incluidas en DataSet. Por ejemplo. Prof. Sin embargo. I. Principales Métodos del objeto Dataset AcceptChanges: Confirma todos los cambios realizados en este DataSet desde que se ha cargado o desde la última vez que se ha llamado a AcceptChanges.com . que es una caché de memoria interna de datos recuperados de un origen de datos. CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer . Relations: Obtiene la colección de relaciones que vincula las tablas y permite el desplazamiento desde las tablas primarias a las secundarias. Al obtener acceso a los objetos DataTable. si existe "mydatatable" pero no existe "Mydatatable". Las tablas están incluidas en un DataTableCollection al que se obtiene acceso a través de la propiedad Tables. Clear Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas.NET. se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas.NET II Dataset Objetivo: Al término de esta separata el participante conocerá:  Conocer el objeto Dataset  Conocer sus propiedades metodos del Dataset DataSet DataSet. la cadena que se utilice para buscar una de las tablas se considerará que distingue entre mayúsculas y minúsculas.

NET Pagina 25/123 Email:yauyo148@hotmail.E. Rellena un objeto DataSet con valores de un origen de datos utilizando la interfaz IDataReader proporcionada. Lee esquema y datos XML en el objeto DataSet. incluyendo filas nuevas.S. Load: Sobrecargado.NET) HasChanges: Sobrecargado. CESCA (ADO. ReadXML Sobrecargado. el esquema del DataSet. de forma opcional. Prof. Lee un esquema XML en el DataSet. Alejandro Yauyo Barrientos / Specialist Developer . ReadXmlSchema Sobrecargado. WhiteXmlSchema Sobrecargado. Escribe datos XML y. I. Escribe la estructura del DataSet como un esquema XML.com . eliminadas o modificadas. WriteXML Sobrecargado. Obtiene un valor que indica si DataSet presenta cambios.

NET Pagina 26/123 Email:yauyo148@hotmail.Data Source=D:\Ventas.NET) Visual Basic .OleDb 4) En el ámbito a nivel de clase codificar lo siguiente: Dim cn As New OleDbConnection("Provider=Microsoft. Alejandro Yauyo Barrientos / Specialist Developer . I.4. 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.OleDb. 2) Modificar algunas propiedades de los controles.Jet.mdb") Dim da As OleDbDataAdapter Dim ds As New DataSet Prof.S. CESCA (ADO.NET II Trabajando en Forma desconectada Objetivo: Al término de esta separata el participante conocerá:  Trabajar en forma desconectada Diseñar el siguiente Formulario 1) Guardar la base de datos Ventas en el disco D.Data.0.com .E.

cn) da.E.Index ds.Rows(dgvEmpleado.Open() da.Tables(0).Index) fila.Count .Clear() txtConta.Tables(0).Close() MessageBox. MessageBoxButtons. MessageBoxButtons.Clear() txtCargo.Delete() MessageBox.Tables(0).NewRow dr.Rows.Text dr.Add(dr) 8) En el evento click del botón Actualizar Dim fila As DataRow = dst.NET Pagina 27/123 Email:yauyo148@hotmail.Focus() 7) En el evento click del botón Adicionar Dim dr As DataRow = ds.Text fila(3) = dtpFechaNac.EndEdit() ds.DataSource = ds.com .NombreContacto. Alejandro Yauyo Barrientos / Specialist Developer . "Eliminado".Rows.Rows(pos). CargoContacto From Clientes" da = New OleDbDataAdapter(strsql.1)(0) + 1 txtClie.Text dr(1) = txtConta. CESCA (ADO.Text dr(3) = txtCargo.NET) 5) En el evento Load del formulario codificar lo siguiente: Dim strsql As String = "Select CodigoCliente.Text dr(2) = txtClie.Tables(0).Update(ds.Clear() da.Tables(0). "Cliente") ds.BeginEdit() dr(0) = txtCod.OK) 10) En el evento click del botón “Guardar Cambios” If ds.BeginEdit() fila(1) = txtApellido.Show("Registros Actualizados".Value fila.Fill(ds.OK) End If Prof.Clear() txtClie.Fill(ds.HasChanges = True Then cn.Rows(ds. "Cliente") Dim cmdx As New OleDbCommandBuilder(da) dgvClientes.Text fila(2) = txtNombre. I.NombreCliente.Tables(0) 6) En el evento click del botón Nuevo txtCod.Tables(0).EndEdit() 9) En el evento click del botón Eliminar Dim pos As Integer = dgvClientes. "Cliente") cn.Text = ds.Show("Registro Eliminado con Exito".CurrentRow.Tables(0). "Actualizados".CurrentRow.S.

Forms. Alejandro Yauyo Barrientos / Specialist Developer .Show("Desea Salir".Controls.Add(dgv) frm.ShowDialog() 12) En el evento click del botón “Salir” Dim res As DialogResult res = MessageBox.YesNo.DataSource = ds. MessageBoxIcon.DialogResult.com .GetChanges frm. MessageBoxButtons. Prof. CESCA (ADO.Exit() End If 13) Ah probar la aplicación  Propuesto hacer lo mismo pero con la tabla Proveedores con todos sus campos.Information) If res = Windows.Tables(0).Fill frm.Text = "Lista de Cambios en la Tabla" dgv.Dock = DockStyle.S.NET Pagina 28/123 Email:yauyo148@hotmail. "Salir".E.Yes Then Application.NET) 11) En el evento click del botón “Mostrar Cambios” Dim frm As New Form Dim dgv As New DataGridView dgv. I.

La clase Dataview representa una vista personalizada que une datos de un DataTable para clasificar. I. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 29/123 Email:yauyo148@hotmail. De manera clasifica. ADO.E.S. así como a los datos en otras estructuras. Un DataView es similar a una vista de un DataTable. CESCA (ADO. editar y navegar. Además permite a los Dataviews vincularse y utilizarse para DataBinding. Básicamente 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 expresión para filtrar la vista Prof.NET proporciona un número de DataViews para habilitar distintas vistas de la misma tabla y utilizarlas. Un DatasetView es similar a una vista en la parte superior del DataSet y permite a los programadores establecer un orden predeterminado y filtrar las tablas individuales.com . como arreglos y colecciones (suponiendo que se han cumplido un mínimo de requerimientos). La unión de datos de Windows Forms le permite acceder a los datos desde bases de datos. que permite a los programadores establecer un orden clasificado y filtrar en una vista de la tabla aparte. la unión de datos se utilizaba dentro de las aplicaciones para aprovechar los datos almacenados en las bases de datos. filtrar.NET) Visual Basic .NET II Estudiando el objeto DataView Objetivo:  Conocer el objeto DataView Un dataview me permite crear múltiples vistas de uno o más objetos datatable los objetos daview son los objetos de datos que se vinculan con los controles nos estamos vinculado directamente el dataset sino alguna de vistas que el dataset puede exponer.

com . CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 30/123 Email:yauyo148@hotmail.Data.E.NET II Realizando Búsquedas de datos Objetivo:  Conocer el objeto DataView  Conocer sus propiedades  Uso de la clase BindingSource Laboratorio Práctico Ejemplo 01: La guardar la BD ventas en el disco “D” Diseñar el siguiente formulario: RBcodigo RBNombreProducto RBPrecioUnidad txtBuscar Ahora lo que más nos gusta codificar: En al ámbito de importaciones codificar lo siguiente: Imports System.S.NET) Visual Basic . I.OleDb Prof.

Length > 0 Then pos = dv.IdCategoriaProducto.S.Position = pos End If En el evento CheckedChanged de RBcodigo If RBcodigo. cn) Dim ds As New DataSet da.DataSource = bs En el evento TextChanged del control TxtBuscar codificar lo siguiente: Dim pos As Integer If txtBuscar.Text & "%'") If dr.Find(dr(0)("NombreProducto")) End If ElseIf RBPrecioUnidad. Data Source=D:\Ventas.com .Table.PrecioUnidad.Text) If dr.Tables(0).Select("NombreProducto Like'" & txtBuscar.Select("PrecioUnidad=" & txtBuscar.Length > 0 Then pos = dv. NombreProducto. "Productos") 'Creando la vista de Productos dv = ds.Checked Then dr = dv.Checked Then dv. CESCA (ADO.Table.Select("CodigoProducto=" & txtBuscar.DataSource = dv 'Ordenar la vista por Nombre para hacer busquedas dv.Sort = "CodigoProducto" End If Prof.Jet.Length > 0 Then pos = dv.4.UnidadesExistencia.Fill(ds.OleDb.NET Pagina 31/123 Email:yauyo148@hotmail.Find(dr(0)("PrecioUnidad")) End If End If If pos > -1 Then bs.NET) En el ámbito ah nivel de clase codificar lo siguiente: Dim cn As New OleDbConnection("Provider=Microsoft.Find(txtBuscar.0. I.Sort = "CodigoProducto" 'Enlazando el BindingSource al DataGridView dgvProductos.E.NumeroProveedor.Checked Then dr = dv.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.Text <> "" Then Dim dr() As DataRow If RBcodigo.Text) End If ElseIf RBNombreProducto.DefaultView 'Crear y Enlazar el BindingSource bs. Alejandro Yauyo Barrientos / Specialist Developer .Checked Then dr = dv.Table. UnidadesPedidas From Productos".Text) If dr.

Alejandro Yauyo Barrientos / Specialist Developer . I.RowIndex Mod 2 = 0 Then dgvProductos.NET) En el evento CheckedChanged de RBNombreProducto If RBcodigo.Sort = " NombreProducto desc" End If En el evento CheckedChanged de RBPrecioUnidad If RBPrecioUnidad.E.S.RowIndex).Checked Then dv.DefaultCellStyle.BackColor = Color.Sort = "PrecioUnidad asc" End If En el evento CellFormatting del control dgvProductos If e.Checked Then dv. CESCA (ADO.com .NET Pagina 32/123 Email:yauyo148@hotmail.PaleGreen End If Prof.Rows(e.

Columns.Add(dv. Alejandro Yauyo Barrientos / Specialist Developer .Data.E.Columns(i).4.S. Data Source=D:\Ventas.Table.NotSortable Next End Sub Rem Procedimiento para llenar el combobox Private Sub ListarCampos() For i As Integer = 0 To dv.1 cboCriterio.SortMode = DataGridViewColumnSortMode.Count .Items.0.OleDb En el ámbito ah nivel de clase codificar lo siguiente: Dim cn As New OleDbConnection("Provider=Microsoft.Columns. CESCA (ADO.NET Pagina 33/123 Email:yauyo148@hotmail.Jet.OleDb.ColumnName) Next End Sub Prof.Count .Table.com .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(i). I.1 dgvPedido.NET) Ejemplo 02: Diseñar el siguiente formulario: Ahora lo que más nos gusta codificar: En el ámbito de importaciones codificar lo siguiente: Imports System.

ToString txtBuscar.Length > 0 Then pos = dv. NumeroEmpleado.FechaEnvio.Select(cboCriterio.Position = pos End If Prof.Length = 10 Then If IsDate(txtBuscar. GastoEnvio From Pedidos".NET Pagina 34/123 Email:yauyo148@hotmail.Text & "=" & txtBuscar.Columns(cboCriterio.Text.Text & "%'") If dr.CodigoCliente.Table.Fill(ds.DataType. cn) Dim ds As New DataSet da.Text) Then pos = dv.Sort = cboCriterio.Clear() End If End If If pos > -1 Then bs.FechaEntrega.S.Text)) End If ElseIf TipoDato = "DateTime" Then If txtBuscar.Text & " Like'" & txtBuscar.Select(cboCriterio.FormaEnvio.Find(txtBuscar.Find(dr(0)(cboCriterio.Text TipoDato = dv.Table. I. CESCA (ADO.Clear() En el evento TextChanged del control txtBuscar codificar lo siguiente: Dim pos As Integer If txtBuscar.Table.com .Table.Text <> "" Then Dim dr() As DataRow If TipoDato = "Int16" OrElse TipoDato = "Int32" OrElse TipoDato = "Int64" OrElse TipoDato = "Decimal" Then dr = dv.NET) En el evento Load del formulario codificar lo siguiente: Dim da As New OleDbDataAdapter("Select NumeroPedido.DefaultView 'Enlazamos el BindingSource con la vista bs.Text).DataSource = dv 'Llenamos la Grilla dgvPedido.Text) If dr. Alejandro Yauyo Barrientos / Specialist Developer .Text) pos = dv.Find(dr(0)(cboCriterio.Show("Ingrese uno o cero") txtBuscar.Name.DataSource = bs ListarCampos() QuitarOrdenacion(dgvPedido) En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente: dv.Text & "=" & txtBuscar.Text)) Else MessageBox.ImportePedido.Select(cboCriterio.Length > 0 Then pos = dv.Find(dr(0)(cboCriterio. "Pedido") 'Llenamos la vista dv = ds.Text = "0" Then dr = dv.Tables(0).Text)) End If ElseIf TipoDato = "String" Then dr = dv.E.Text = "1" Or txtBuscar.Text) Else MessageBox.Show("Ingrese Una Fecha Valida") End If End If ElseIf TipoDato = "Boolean" Then If txtBuscar.

ReadOnly = True dgv.CurrentRow.DataSource = ds.Text = "Detalles de Pedidos" frmDetalle.S.E.Dock = DockStyle.SelectionMode = DataGridViewSelectionMode.Cells(0).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.Width = 600 frmDetalle. cn) Dim ds As New DataSet 'LLenamos el DataSet da.Controls.Value 'Creamos una consulta Dim da As New OleDbDataAdapter("Select * From [Detalles de Pedidos] Where NumeroPedido=" & codigo.com .Height = 200 frmDetalle. I. "Detalles") 'Enlazamos el dataset con el dgv dgv.Fill 'Declaramos una variable para capturar el codigo Dim codigo As Integer = dgvPedido.ShowDialog() Prof.StartPosition = FormStartPosition.Add(dgv) 'Mostramos el Formulario frmDetalle.CenterScreen 'Creamos una DataGridView Dim dgv As New DataGridView 'Modificamos sus propiedades del dgv dgv.FullRowSelect dgv. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 35/123 Email:yauyo148@hotmail. CESCA (ADO.Tables(0) 'Agregamos el dgv al Formulario frmDetalle frmDetalle.Fill(ds.

NET) Visual Basic . I.OleDb Prof.NET II Manejo de DataView con MS-Access Objetivo Al término de esta separata el alumno tendrá el conocimiento de:  Manejo de filtros con DataView Filtros con DataView Ejemplo 01: Diseñar el siguiente formulario: Modificar las siguientes propiedades de dgvEmpleados: SelectionMode=FullRowSelect ReadOnly=True Anchor = activar todos los bordes Ahora lo que más nos gusta codificar: En al ámbito de importaciones codificar lo siguiente: Imports System.NET Pagina 36/123 Email:yauyo148@hotmail.S.Data. Alejandro Yauyo Barrientos / Specialist Developer . CESCA (ADO.com .E.

4. CESCA (ADO.DataSource = dv dgvEmpleados.IdCargo.Fill(ds.Count En el evento TextChanged del control txtFiltro codificar lo siguiente: If txtFiltro. Alejandro Yauyo Barrientos / Specialist Developer .OleDb.com .Text. "Personal") dv = ds.RowFilter = "Apellidos Like'" & txtFiltro.Nombres.Trim <> "" Then dv. 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.E.FechaContratacion From Empleados".Text = dgvEmpleados.Apellidos.DataSource = dv LblTot.NET) En el ámbito ah nivel de clase codificar lo siguiente: Dim cn As New OleDbConnection("Provider=Microsoft.DefaultView bs. Edad.NET Pagina 37/123 Email:yauyo148@hotmail.Text = dv.Rows. Prof.Rows. cn) Dim ds As New DataSet da.Table.S.Jet. I.Text & "%'" Else dv.RowFilter = "" End If LblTot.Count Ah probar la aplicación.0.Tables(0).

1 dgvProducto.NotSortable Next End Sub Prof.Count . I.NET Pagina 38/123 Email:yauyo148@hotmail.mdb") Dim bs As New BindingSource Dim dv As DataView Crear los siguientes procedimientos: REM procedimiento para quitar la ordenación Private Sub QuitarOrdenacion(ByVal dgv As DataGridView) For i As Integer = 0 To dgv.Columns.OleDb En el ámbito ah nivel de clase codificar lo siguiente: Dim cn As New OleDbConnection("Provider=Microsoft. Data Source=D:\Ventas.E.4. CESCA (ADO.SortMode = DataGridViewColumnSortMode.Columns(i).NET) Ejemplo 01: Diseñar el siguiente formulario: Modificar las siguientes propiedades de dgvProducto: SelectionMode=FullRowSelect ReadOnly=True Anchor = activar todos los bordes Ahora lo que más nos gusta codificar: En al ámbito de importaciones codificar lo siguiente: Imports System.OleDb.Jet. Alejandro Yauyo Barrientos / Specialist Developer .Data.0.S.com .

cn) Dim ds As New DataSet da.Tables(0).RowFilter = cboCriterio.Sort = "CodigoProducto" 'Enlazando el BindingSource al DataGridView dgvProducto.S.PrecioUnidad.RowFilter = "" End If Prof.RowFilter = cboCriterio.NumeroProveedor.Items.1 cboCriterio.Text & "%'" ElseIf TipoDato = "DateTime" Then 'si el tipo dato es Fecha If txtFiltro.Fill(ds.Table. "Ingrese") End If End If End If Else dv. Alejandro Yauyo Barrientos / Specialist Developer .Show("Ingrese una Fecha Valida".Text ElseIf TipoDato = "String" Then 'si el tipo dato es Cadena dv.Add(dv.DefaultView 'Crear y Enlazar el BindingSource bs.Text & "=" & txtFiltro.com . I.Table.Columns.Trim <> "" Then REM si el tipodato es numerico If TipoDato = "Int32" Or TipoDato = "Int16" Or TipoDato = "Int64" Or TipoDato = "Decimal" Then dv.NET Pagina 39/123 Email:yauyo148@hotmail.Text > 10 Then If IsDate(txtFiltro.ColumnName) Next End Sub En el evento Load del formulario codificar lo siguiente: Dim da As New OleDbDataAdapter("Select CodigoProducto. "Productos") 'Creando la vista de Productos dv = ds. UnidadesPedidas From Productos".Sort = cboCriterio.DataType.NET) REM procedimiento para listar los campos dentro del combobox cbocriterio Private Sub ListarCampos() For i As Integer = 0 To dv.Text).Text & "'" Else MessageBox. NombreProducto. CESCA (ADO.Text & "='" & txtFiltro.RowFilter = cboCriterio.Name En el evento TextChanged del control txtFiltro codificar lo siguiente: If txtFiltro.Text TipoDato = dv.Text & " Like'" & txtFiltro.IdCategoriaProducto.Text) Then dv.Table.DataSource = dv 'Ordenar la vista por Nombre para hacer busquedas dv.Columns(cboCriterio.Text.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.Count .E.Columns(i).UnidadesExistencia.

UpdateCommand=SqlCommand Prof.InsertCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para insertar nuevos registros en el origen de datos. Sqlcommand([Procedimiento para la inserccion].SelectCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para seleccionar registros en el origen de datos. Alejandro Yauyo Barrientos / Specialist Developer . I.[Conexion]) sqlDataAdapter. para esto el DataAdapter se le puede configurar.com . SqlDataAdapter.NET II Trabajar Forma Administrada Objetivo: Al término 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.UpdateCommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para actualizar las registros de la base de datos.[Conexion]) sqlDataAdapter. CESCA (ADO.NET) Visual Basic .InsertCommand=SqlCommand SqlDataAdapter. Sqlcommand([Procedimiento para la inserccion].[Conexion]) sqlDataAdapter.NET Pagina 40/123 Email:yauyo148@hotmail. primero debemos configurar este comando e indicarle que tipo de modificación debe realizar.Deletecommand Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar registros de un conjunto de datos. varia al del interior en este tenemos que indicarle el tipo de dato y además el nombre del campo que se hace referencia. luego se le asigna al SqlDataAdapter con el comando especificó según la acción del comando. observemos primero el siguiente ejemplo. La configuración del SqlCommand. Sqlcommand([Procedimiento para la inserccion].Deletecommand=SqlCommand SqlDataAdapter.S. Sqlcommand([Procedimiento para la inserccion].E. El SqlDataApadter para administrar las modificaciones a la base de datos cuenta con comandos para definir.[Conexion]) sqlDataAdapter.SelectCommand=SqlCommand SqlDataAdapter.

NET II Trabajando en Forma Administrada Objetivo: Al término de esta separata el participante conocerá:  Trabajar correctamente con el adaptador de datos en forma desconectado  Uso del Dataset Empecemos a desarrollar: Abrir el SQL server y codificar lo siguiente: use master go create database VentasPeru go use VentasPeru go Create table Productos ( CodPro char(8)Primary key.10. StockMax int.10. CESCA (ADO.150.com .36) Insert into Productos Values('PR000002'.'Mouses'.10. StockMin int.150.36) Insert into Productos Values('PR000003'. Alejandro Yauyo Barrientos / Specialist Developer .NET) Visual Basic .7.'Teclados'.'Monitores'.10.NET Pagina 41/123 Email:yauyo148@hotmail.36) Insert into Productos Values('PR000004'.5) ) go Insert into Productos Values('PR000001'.20. DesPro char(50).150.150. StockActual int.36) Go /* Ejecutamos las lineas de codigo bloque por bloque?? */ Prof.150.10.12.20.20.S. PrecVenta decimal(10.'Laptos'.E.20. I.

cn) With xComand .@StockActual.Server=.DeleteCommand = xComand REM para la inserccion xComand = New SqlCommand("Insert into Productos(CodPro.Char. "CodPro") da.@PrecVenta)". 8.Parameters.com .StockMax. cn) With xComand .CommandType = CommandType.CommandType = CommandType.Text .Integrated security=true") Dim ds As New DataSet Dim da As New SqlDataAdapter En el evento load del formulario colocaremos lo siguiente: Try cn.@StockMin.NET) Crear un nuevo proyecto y diseñar la siguiente interfas: DgdProductos Declarar las siguientes variables en el ámbito a nivel de clase.S.DesPro. CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .CommandType = CommandType.SelectCommand = xComand da.Text xComand.@StockMax. I.Text End With da.Add("@CodPro".Add("@CodPro".. "Productos") REM para la eliminacion xComand = New SqlCommand("Delete From Productos Where CodPro=@CodPro".Char.Database=VentasPeru.Fill(ds.StockActual.Open() Dim xComand As New SqlCommand("Select * From Productos". Dim cn As New SqlConnection("User id=sa. 8.PrecVenta)values(@CodPro. cn) xComand. "CodPro") Prof. SqlDbType.Parameters.NET Pagina 42/123 Email:yauyo148@hotmail.@De sPro.StockMin.E. SqlDbType.

Int. I. 0.Add("@PrecVenta". SqlDbType. SqlDbType.NET Pagina 43/123 Email:yauyo148@hotmail.Int.Add("@StockMin".Parameters.com . "Productos") MessageBox.Show(ex.Parameters. "StockMax") .Show("Los canbios fueron realizados".Add("@PrecVenta". cn) With xComand . SqlDbType. 50. SqlDbType. 0. "StockActual") .S. SqlDbType.Add("@DesPro".Char. CESCA (ADO. "StockMin") .Decimal. "PrecVenta") End With da.Parameters.Parameters.Char.HasChanges Then da.Parameters.StockMax=@StockMax.1. MessageBoxButtons.Add("@StockMin". 8.Add("@StockActual". "StockMax") .Char.NET) .Add("@StockMax". "DesPro") .Tables(0) Catch ex As Exception MessageBox.InsertCommand = xComand REM para la Actualizacion xComand = New SqlCommand("Update Productos Set DesPro=@Despro. "CodPro") .PrecVenta=@PrecVenta Where CodPro=@CodPro".Add("@StockMax". SqlDbType.Decimal. "DesPro") . 0. Alejandro Yauyo Barrientos / Specialist Developer . SqlDbType. 0.Int.CommandType = CommandType. 0.Text . SqlDbType. _ "Mantenimiento Productos".Message) End Try En el botón modificar colocamos lo siguiente: If ds. 0. 0.Information) End If Prof.Parameters. "StockActual") .Int.DataSource = ds. 0.StockActual=@StockActual . SqlDbType.OK.E.Int.Add("@StockActual".Parameters.Add("@DesPro".Update(ds.Parameters. _ MessageBoxIcon.UpdateCommand = xComand dgdProductos.Parameters.Add("@CodPro". SqlDbType. "StockMin") .Int.Parameters.StockMin=@StockMin. 50.Parameters. SqlDbType. "PrecVenta") End With da.

10.7.5) ) go Insert into Productos Values('PR000001'.36) Insert into Productos Values('PR000002'.'Mouses'. StockActual int. StockMin int.20. 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.com .'Teclados'. PrecVenta decimal(10.10.36) Insert into Productos Values('PR000003'.'Laptos'.NET Pagina 44/123 Email:yauyo148@hotmail.10.36) Insert into Productos Values('PR000004'.150.20.150.150.150. Alejandro Yauyo Barrientos / Specialist Developer . StockMax int.E. DesPro char(50).'Monitores'.12.10.S.20.20. I.36) go --Select * From Productos Crear un proyecto windows y diseñar la siguiente interfaz: Prof.10.150.

NET) Recuerda si ves en control TABControl tiene 5 pestañas bien cada pestaña tiene un DataGridView si quieres ver el ejemplo esta junto con este ejemplo y lo chekeas o si no pasas la voz al profesor. cn) Dim ds As New DataSet En el evento Load del formulario codificar lo siguiente: Try da.Sort = "CodPro Desc" End With Dgdfiltrado. I. Alejandro Yauyo Barrientos / Specialist Developer .DataSource = dvModofi Prof. Sigamos: Codificar lo que más nos gusta: En el ámbito de importaciones Importar el NameSpace: Imports System.RowFilter = "" .Password=12345678") Dim da As New SqlDataAdapter("Select CodPro. "CodPro Desc".Tables(0). CESCA (ADO.AllowDelete = False .AllowEdit = True .NET Pagina 45/123 Email:yauyo148@hotmail.CurrentRows) dgdModi.StockMax. "Productos") DgdCliente.StockMin.StockActual.PrecVenta From Productos".com .Data.DataSource = ds.E. DataViewRowState.Tables(0) .Tables(0).DataSource = dvVistaOriginal REM Modificados Dim dvModofi = New DataView(ds.DataSource = dvVista REM Vista Original que no han sido Modificado Dim dvVistaOriginal = New DataView(ds.Tables(0) REM Vista Simple Dim dvVista As New DataView With dvVista .Server=User- PC\Admin. "".S.Table = ds. "CodPro Desc". "".SqlClient En el ámbito a nivel de clase declarar la cadena de conexión: Dim cn As New SqlConnection("User id=sa.Fill(ds.AllowNew = True .Unchanged) dgdNoModi. DataViewRowState.DesPro.Database=Almacen.

DataViewRowState. "".NET) REM Modificados Originales Dim dvModoOri = New DataView(ds.com .ModifiedOriginal) dgdOriModi.Message) End Try Prof.DataSource = dvModoOri REM Eliminados Dim dvEliminados = New DataView(ds.Tables(0).E. "CodPro Desc".DataSource = dvEliminados Catch ex As Exception MessageBox.Show(ex.Deleted) DgdEliminados. DataViewRowState. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 46/123 Email:yauyo148@hotmail. CESCA (ADO.S. "". "CodPro Desc".Tables(0). I.

Devuelve un objeto de tipo BindingManagerBase o administrador de base de enlace a datos.S. se puede crear un objeto BindingContext solo para ese control contenedor y sus controles. 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. I. Alejandro Yauyo Barrientos / Specialist Developer . Ese objeto BindingContext administra los objetos de BindingManagerBase para ese control y cualquier control que este incluido. De este modo.NET II Manejo de BindingContext y DataBindings Objetivo Al término de esta separata el alumno tendrá el conocimiento de:  Conocer los conceptos de BindingContext y DataBindings  Conocer métodos y propiedades BindingContext Propiedad de la clase form que representa el contexto de enlace a datos establecido en los controles del formulario.E. o tabcontrol. Cada objeto que herede de la clase control puede tener un solo objeto BindingContext.BindingContext(<Dataset>. 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. Ejemplo de cómo usarlo me.NET Pagina 47/123 Email:yauyo148@hotmail.com . toda la información de enlaces establecida entre los controles y objetos proveedores de datos. es decir.<nombre tabla>) Este objeto es el que mantiene la posición actual en la lista de datos. panel. Si se utiliza un control contenedor.NET) Visual Basic . 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. para incluir controles con enlace a datos. Normalmente. como Groupbox. cada parte de un formulario puede ser administrada por su propio objeto BindingMangerBase. CESCA (ADO.

luego para administrar esta se debe utilizar la propiedad BindingContext de la clase contenedora. Sintaxis: Control.BindingContext(ds.S. Alejandro Yauyo Barrientos / Specialist Developer . ds. como lo dicho en las líneas de arriba.NET) DataBinding Los controles que con regularidad se utilizan en aplicaciones Windows asi como en aplicaciones Web tienen una propiedad DataBinding.tables(0). Me.TxtDistrito.tables(0)).<Origen de Datos tabla o Dataset>. es necesario configurar la propiedad de cada control que contenga el enlace a los datos.<Campo a enlsar>) Por ejemplo Para enlazar una caja de texto con el campo NomDis de la tabla Distrito (DTDistrito) contenida en dataset previamente utilizo la siguiente instrucción. "NomDis") Luego para administrar por ejemplo la posición actual o lo que es lo mismo el registro activo se utiliza la siguiente instrucción.DataBindings. Al usar el BindingContext obtiene el BindingManagerBase que mantiene sincronizados todos los controles enlazados al mismo origen de datos. CESCA (ADO.NET Pagina 48/123 Email:yauyo148@hotmail. Me. I.Position +=0 Note en la instrucción anterior que se utiliza la propiedad BindingContext del formulario.Add("Text".E.Add(<Propiedad a utilizar>.com .DataBindings. la propiedad position va a mantener sincronizados los controles enlazados al Dataset Prof. se puede utilizar la propiedad position del BindingManagerBase para especificar el elemento actualmente seleccionado de una lista.

DniClie.C.CodDis=D. C.EmaiClie.CodClie.S.CodDis Crear un proyecto de tipo WindowsForm.C. Alejandro Yauyo Barrientos / Specialist Developer .com .C.TelClie.DirClie.NomDis.NET) Visual Basic .E.C. con nombre DataBinding Pasos 1.NET Pagina 49/123 Email:yauyo148@hotmail.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 almacén y crear el siguiente Store Create proc Usp_Traer_Cliente as Select C.ApeClie.C.NomClie..C.RucClie from Cliente C inner join Distrito D on C. I.D. CESCA (ADO.Diseñar la siguiente Internas: Prof.

BindingContext(ds.DataBindings.Tables(0)).Add("Text". "TelClie") txtDNI.NET) Codificar: En el general del formulario.Tables(0)).Add("Text". I. Alejandro Yauyo Barrientos / Specialist Developer . ds.Tables(0)). ds.Tables("Cliente").Tables("Cliente").Tables("Cliente").DataBindings.Tables(0)).Tables(0)).Tables(0)).Position + 1)) En el evento Clic del botón “Siguiente” Me.ToString & " de " _ & Me.Server=. "ApeClie") txtNomClie. ds.Tables("Cliente").Position + 1)) En el evento clic del botón “Ultimo” Me. "NomClie") txtDireccion. "NomDis") txtTelefono.Position = ds.Position + 1)) En el evento Clic del botón “Primer” Me.S.ds.BindingContext(Me.DataBindings.BindingContext(Me.BindingContext(ds.Position + 1)) Prof.Rows.E.Position = 0 Call Registro(Integer.DataBindings. "RucClie") dgdcliente.Fill(ds. ds.Add("Text".Parse(Me.DataBindings.Database=Almacen.Tables(0)).Tables(0)).NET Pagina 50/123 Email:yauyo148@hotmail.Add("Text".Tables("Cliente").Tables(0)). ds.Parse(Me.ToString End Sub En el load del formulario. ds.Tables("Cliente").Position + 1)) En el evento Clic del botón “Anterior” Me.Position += 1 Call Registro(Integer. "DniClie") txtEmail.Text = "Registro " & posicion.com .BindingContext(Me.Tables(0) Call Registro(Integer. ds.BindingContext(ds.DataBindings.Parse(Me. ds. "DirClie") txtDistrito.Parse(Me.ds.Integrated security=true") Dim da As New SqlDataAdapter("Usp_Traer_Cliente".Tables(0)).Add("Text".SqlClient A nivel de clase: Dim cn As New SqlConnection("User id=sa.ds.Item(ds.BindingContext(ds.DataBindings..Tables(0).BindingContext. da.DataBindings. CESCA (ADO.DataSource = ds.BindingContext(ds.Position -= 1 Call Registro(Integer. cn) Dim ds As New DataSet REM procedimiento para mostrar registro activo Private Sub Registro(ByVal posicion As Integer) lblregistro.Add("Text".Tables(0). Imports System.Parse(Me.Add("Text".Count.BindingContext(ds.Add("Text".Count Call Registro(Integer. "CodClie") txtApeClie.Tables("Cliente").Tables("Cliente"). "Cliente") txtCodClie.Data. "EmaiClie") txtRUC.DataBindings.Add("Text". ds.

E. Alejandro Yauyo Barrientos / Specialist Developer . SelectedIndex Obtiene o establece el indice que espesifica el elemento seleccionado.  Uso del control ListBox y Combobox con una fuente de datos.NET) Propiedades principales del control ListBox y Combobox Objetivo: Al término de esta separata el alumno Conocerá:  Conocer propiedades de enlace a 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. I.com . CESCA (ADO.. ValueMember Obtiene o establece la propiedad que se utilizara como valor real para los elementos del control. Ejemplo 01 TxtValor1 TxtValor2 Prof.NET Pagina 51/123 Email:yauyo148@hotmail. SelectedValue Obtiene o establece el valor del control según la configuracion.S.

(Rtrim(ApeClie) + '.DataSource = ds.Password=") Dim ds As New DataSet Nota: Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM En el evento Load Codificar lo siguiente: Try REM Procedimiento para Listar Distrito REM Consulta a la tabla Distrito Dim da As New SqlDataAdapter("Select CodDis. "Dis") REM Enlazando los datos con el ListBox y configurando ListBox1.Database=Almacen. I.Text = ListBox1. Alejandro Yauyo Barrientos / Specialist Developer .Show(ex.NomDis From Distrito".'+NomClie) as NomCom From Cliente".NET) Usar la BD Almacen osea Restaurarla Ok!!!! Importar el NameSpace Imports System.DisplayMember = "NomDis" ListBox1.NET Pagina 52/123 Email:yauyo148@hotmail.CommandType = CommandType.Text Dim dt As New DataTable da2.Server=.ValueMember = "CodClie" Catch ex As Exception MessageBox.CommandType = CommandType.Tables(0) ListBox1.Text REM LLenado de datos da.Fill(dt) ComboBox1. CESCA (ADO.S.SqlClient En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET Dim cn As New SqlConnection("User id=Sa.Message) End Try En el evento SelectedIndexChanged del ListBox codificar lo siguiente: Try txtValor1. cn) da2. cn) REM espesifico el tipo de comando da.DisplayMember = "NomCom" ComboBox1.com ..E.SelectedValue Catch ex As Exception End Try Has lo mismo para el control Combobox Ok  Prof.SelectCommand.Fill(ds.ValueMember = "CodDis" Rem Listado del combobox Dim da2 As New SqlDataAdapter("Select CodClie.Data.SelectCommand.DataSource = dt ComboBox1.

SqlClient En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET Dim cn As New SqlConnection("User id=Sa.Database=Almacen. Alejandro Yauyo Barrientos / Specialist Developer .Password=") Dim ds As New DataSet Nota: Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM Prof. CESCA (ADO.S. I.Server=.Data.E.com .NET Pagina 53/123 Email:yauyo148@hotmail..NET) Consultas en ambiente desconectado Objetivo: Al término de esta separata el alumno Conocerá:  Implementar sentencias SQL  Uso del objeto Dataset Ejemplo 01 Diseñar la siguiente interfaz: Usar la BD Almacen osea Restaurarla Ok!!!! Importar el NameSpace Imports System.

CESCA (ADO. cn) da. Alejandro Yauyo Barrientos / Specialist Developer .RucClie From Cliente Where CodClie='" & Me.SelectCommand.Tables(0) End Sub Private Sub ListarClientexCodigo() Dim da As New SqlDataAdapter("Select CodClie.CommandType = CommandType.com .TelClie.E.TextBox1.DniClie.Text Dim dt As New DataTable da.TelClie.NET Pagina 54/123 Email:yauyo148@hotmail.ApeClie.NET) Crear los siguientes procedimientos: Private Sub ListarCliente() Dim da As New SqlDataAdapter("Select CodClie.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 botón Buscar ListarClientexCodigo() Por ultimo ejecutar!!! Prof.ApeClie.Text da.Fill(dt) DataGridView1.DniClie. cn) da.RucClie From Cliente".NomClie. I.DirClie. CodDis.CommandType = CommandType.Text & "'". EmaiClie.DataSource = ds.SelectCommand. "Clientes") DataGridView1. CodDis.NomClie.Fill(ds. EmaiClie.S.DirClie.

Fill(ds. "Clientes") DataGridView1.Tables(0) End Sub Prof.Data.Eliminado From Articulo".NET) Ejemplo 02 Usar la BD Almacen osea Restaurarla Ok!!!! Importar el NameSpace Imports System.S.Password=") Nota: Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM Crear los siguientes procedimientos: Rem Procedimiento para Listar Articulos Private Sub ListarArticulo() Dim da As New SqlDataAdapter("SelectCodArti. StockActual. I.. cn) da.Text Dim ds As New DataSet da.SelectCommand.E.DataSource = ds.PrecVenta.Database=Almacen. CESCA (ADO.Server=.DesArti.CodPer.SqlClient En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET Dim cn As New SqlConnection("User id=Sa.com .NET Pagina 55/123 Email:yauyo148@hotmail.StockMin.StockMax. Alejandro Yauyo Barrientos / Specialist Developer .CommandType = CommandType.

CommandType = CommandType.Text & "%'".Message) End Try Por ultimo ejecutar!!! Prof.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. StockActual.Fill(dt) DataGridView1. I.SelectCommand. Alejandro Yauyo Barrientos / Specialist Developer .TextBox1. cn) da.E.NET Pagina 56/123 Email:yauyo148@hotmail.Eliminado From Articulo Where DesArti Like '" & Me.NET) Rem Procedimiento para Filtrar Los Articulos Utilizando el operador Like Private Sub ListarArticuloxNombre() Dim da As New SqlDataAdapter("Select CodArti.PrecVenta.S.Text.StockMin.StockMax. CESCA (ADO.com .Show(ex.DataSource = dt End Sub En el evento TextChanged: If TextBox1.CodPer.Text Dim dt As New DataTable da.DesArti.

SelectCommand.Rtrim(NomDis) as Nom From Distrito".NET Pagina 57/123 Email:yauyo148@hotmail. Alejandro Yauyo Barrientos / Specialist Developer .Tables(0) ComboBox1.DataSource = ds. CESCA (ADO.Fill(ds. I..Text REM LLenado de datos da. cn) REM espesifico el tipo de comando da.Data.Password=") Dim ds as New DataSet Nota: Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM Crear los siguientes procedimientos: Rem metodo para listar los distritos Private Sub ListarDistrito() Dim da As New SqlDataAdapter("Select CodDis. "Dis") REM Enlazando los datos con el ListBox y configurando ComboBox1.CommandType = CommandType.S.ValueMember = "CodDis" End Sub Prof.Server=.DisplayMember = "Nom" ComboBox1.E.com .Database=Almacen.NET) Ejemplo 03 Usar la BD Almacen osea Restaurarla Ok!!!! Importar el NameSpace Imports System.SqlClient En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET Dim cn As New SqlConnection("User id=Sa.

E.NomClie. cn) da.SelectedValue & "'".Fill(dt) DataGridView1.Text Dim dt As New DataTable da.CodDis. Alejandro Yauyo Barrientos / Specialist Developer .CommandType = CommandType.DataSource = dt End Sub En el evento Load del formulario: Try ListarDistrito() Catch ex As Exception MessageBox.Message) End Try En el evento SelectedIndexChanged del combobox: Try GetClientexDistrito() Catch ex As Exception REM Throw ex End Try Por ultimo ejecutar!!! Prof.ApeClie. CESCA (ADO.DirClie.NET Pagina 58/123 Email:yauyo148@hotmail.SelectCommand.Show(ex.NET) Private Sub GetClientexDistrito() Dim da As New SqlDataAdapter("Select CodClie.S.com . I.TelClie From Cliente Where CodDis='" & ComboBox1.

com .NET) Propuesto: 1) Cuando seleccione una opción: por ejemplo si selecciono la opción clase me tendrá que llenar los datos de la tabla clase en el combobox y lo mismo para las otras opciones dependiendo de la tabla. Prof. I. CESCA (ADO. 2) Me permitirá realizar la consulta de la tabla Articulo en la grilla según mi opción seleccionado.NET Pagina 59/123 Email:yauyo148@hotmail. Alejandro Yauyo Barrientos / Specialist Developer .E.S.

'1234'.getdate().Nivel.'killbill'.'Si') Go Luego en VS.getdate(). CESCA (ADO.E. FechaIngreso datetime.'Admistrador'.Clave.NET Crear la siguiente Interfaz: txtUsuario txtPassword Modificar la propiedad: btnIngresar PasswordChar = * Prof. Activo char(2) ) Go --Ingresamos datos a la tabla Usuarios Insert into Usuarios(NomUsuario.S. Alejandro Yauyo Barrientos / Specialist Developer .FechaIngreso.Activo) values('Alejandro'.NET) Consultas en ambiente desconectado Objetivo: Al término de esta separata el alumno Conocerá:  Implementar sentencias SQL  Uso del objeto Dataset Ejemplo 1: Crear la la Siguiente BD en SQL: Create Database Ventas Go Use ventas go Create table Usuarios ( NomUsuario Char(15).com .Clave.'Si') Go Insert into Usuarios(NomUsuario. I.getdate(). Clave Char(15).Nivel.FechaSalida. FechaSalida datetime.Activo) values('xD148'.FechaIngreso.NET Pagina 60/123 Email:yauyo148@hotmail.getdate(). Nivel Char(30).'Almacenero'.FechaSalida.

Information) Else MessageBox.OK.Trim() & "'" & " and " & _ "Clave='" & txtPassword.Text <> "" And txtPassword. "Error".Password=1234") En el evento Load btningresar. "Ingreso".OK.Rows.Text.Enabled = txtUsuario.Enabled = txtUsuario.1 If Cantusu = 0 Then MessageBox.Server=. MessageBoxButtons.Text <> "" And txtPassword.S.NET Pagina 61/123 Email:yauyo148@hotmail.Fill(dt) Dim Cantusu As Integer = dt. MessageBoxIcon. cn) Dim dt As New DataTable da. MessageBoxIcon.Enabled = False Nota: Cambiar la cadena de conexión chicos de ATE-Vitarte y San juan de Miraflores.Trim() & "'". Alejandro Yauyo Barrientos / Specialist Developer .Clave From Usuarios Where NomUsuario='" & txtUsuario.Text <> "" En el evento Click del boton ingresar codificar lo siguiente: Dim da As New SqlDataAdapter("Select NomUsuario. MessageBoxButtons.E. I.Show("Error Usted no es usuario del sistema".Text.Count . “No te olvides de importar el namespace”  En el evento TextChanged del control txtusuario codificar lo siguiente: btningresar. CESCA (ADO.com .Exclamation) End If Resultado: Prof..NET) En el evento a nivel de clase crear la cadena de conexión: Dim cn As New SqlConnection("User id=Sa.Text <> "" En el evento TextChanged del control txtPassword codificar lo siguiente: btningresar.Database=Ventas.Show("Bienvenido al sistema".

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

NET te acompañe” Prof.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.S. 1) Se listaran en el combobox todos los usuarios.NET Pagina 63/123 Email:yauyo148@hotmail.E. Alejandro Yauyo Barrientos / Specialist Developer . CESCA (ADO. 2) Se validara en la tercera opción 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 .com . I.

C. C. 1.TelClie.-) cboDistrito dgdClientes Diseñar el siguiente Formulario Prof.S.C.Rtrim(D.C.CodClie.C.NET) Visual Basic .Rtrim(NomDis) as Distrito from Distrito go --USP para traer los Clientes Create proc Usp_Traer_Cliente as Select C.E.C.C.RucClie from Cliente C inner join Distrito D on C.NET Pagina 64/123 Email:yauyo148@hotmail. I. Alejandro Yauyo Barrientos / Specialist Developer .NomDis) as Distrito.DirClie.ApeClie.NET II Laboratorio del objeto Dataview Objetivo: Al término de esta separata el participante conocerá:  Manejar filtros a trabes DataView DataView Para este ejemplo utilizare la base de datos Almacen.EmaiClie.NomClie.-) Crear los Siguientes Stored Procedure --USP para traer los distritos create proc usp_Traer_dis as select CodDis.CodDis=D.DniClie.CodDis go 2. CESCA (ADO.com .

I.Text + "%'" Por último probar la aplicación F5 Prof.-) importar el namespace SQLClient Imports System.Tables("Clientes").-) Enel evento load codificar lo siguiente: REM metodo para traer los Distritos da = New SqlDataAdapter("usp_Traer_dis".DataSource = ds.Integrated security=SSPI") Dim da As SqlDataAdapter Dim ds As New DataSet Dim dv As New DataView 5.E.cboDistrito. cn) da.DisplayMember = "Distrito" cbodistrito.Data.Fill(ds.Fill(ds.SelectCommand. cn) da..Database=Almacen.Server=.SqlClient 4. "Clientes") dv = ds.RowFilter = "Distrito like'" + Me. Alejandro Yauyo Barrientos / Specialist Developer .-) En el ámbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.DataSource = ds.NET Pagina 65/123 Email:yauyo148@hotmail.S.StoredProcedure da.Tables("Clientes") 6.StoredProcedure da.ValueMember = "CodDis" REM metodo para traer los clientes da = New SqlDataAdapter("Usp_Traer_Cliente". CESCA (ADO.NET) 3.-) en el Evento SelectedIndexChanged codificar lo siguiente: dv.DefaultView dgdclientes.CommandType = CommandType.SelectCommand.Tables(0) cbodistrito.com . "Distrito") cbodistrito.CommandType = CommandType.

DesClase.m.E.Data.CodClase=a.CodUnidad=a.-) Diseñar la siguiente interfas: çImportar el namespace Imports System.S.DesModelo.StockMin.a.CodMarca=a.CodPer 2.SqlClient En el ámbito a nivel da clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.CodPer=a.DesUnidad. Alejandro Yauyo Barrientos / Specialist Developer . CESCA (ADO.NET II Usando el objeto DataView Usar la base de datos Almacén: Crear el procedimiento almacenado: create proc usp_Traer_Articulos as select a.NET Pagina 66/123 Email:yauyo148@hotmail.rtrim(a.Server=.a.CodModelo=a.PrecVenta.CodClase inner join Modelo m on m.CodModelo inner join Marca Ma on Ma.a.u.CodMarca inner join Personal P on p.c.a.StockMax.StockActual.Integrated security=SSPI") Prof.com . I.Database=Almacen.NET) Visual Basic .DesArti)as Articulo..CodUnidad inner join Clase c on c.CodArti. Ma.DesMarca.ApePer)+ ' ' +(NomPer) as Nombre from Articulo a inner join [Unidad de Medida] u on u.rtrim(P.

RowFilter = "DesClase like'" & Me.Text = "Descripcion" Then dv.Add("Marca") ComboBox1.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.E.Text TextBox1.Items.Fill(ds.DataSource = ds.TextBox1. "Articulos") dv = ds.Add("Descripcion") ComboBox1.Text = "" Then MessageBox.Add("Codigo") ComboBox1.TextBox1. I.Text & "%'" ElseIf ComboBox1.Items.Text & "%'" ElseIf ComboBox1.Text = "Codigo" Then dv.Clear() Prof.Items.Add("Modelo") End Sub En el Evento load del formulario Codificar lo siguiente: REM llenamos el combo da = New SqlDataAdapter("usp_Traer_Articulos".Text = "Marca" Then dv.TextBox1.NET Pagina 67/123 Email:yauyo148@hotmail.RowFilter = "DesMarca like'" & Me.Text = "Modelo" Then dv.Text = "Codido" Then dv.Add("Clase") ComboBox1.RowFilter = "CodArti like'" & Me.Text & "%'" ElseIf ComboBox1.TextBox1.Clear() Else If ComboBox1. cn) da.Tables(0) REM llamamos el procedimiento llenarcombo() En el evento TextChanged de la caja de texto codificar lo siguiente: If ComboBox1.Items.TextBox1.RowFilter = "CodArti like'" & Me.Text = "Ingrese" & " " & Me.S.ComboBox1.RowFilter = "Articulo like'" & Me.Items.DefaultView DataGridView1. CESCA (ADO.Text & "%'" End If End If En el evento SelectedIndexChanged del control conbobox codificar lo siguiente: Label3.TextBox1. Alejandro Yauyo Barrientos / Specialist Developer .Text & "%'" ElseIf ComboBox1.com .RowFilter = "DesModelo like'" & Me.Text & "%'" ElseIf ComboBox1.Tables(0).Show("Seleccione una opcion") TextBox1.Text = "Clase" Then dv.

¿Y si estamos trabajando continuamente con una fuente de datos?.NET II Estudiando el Objeto SqlDataReader Objetivo: Al término de esta separata el participante conocerá:  El paradigma de la conexión. y es que dependiendo de lo que vayamos a realizar. I. a veces es más efectiva una acción que otra. Es difícil de asumir que acción tomar en cada caso. Lo que sí está claro es que el modelo de datos de ADO. CESCA (ADO. ¿cómo penalizarían todas estas acciones?. siempre nos encontramos con una duda existencial.NET) Visual Basic .NET que hemos visto.  Uso del objeto DataReader y sus diferencias. Alejandro Yauyo Barrientos / Specialist Developer . y en otras ocasiones.S.E. no está del todo claro. quedaría resumido en cuanto a la conectividad de la manera en la que se representa en la siguiente imagen: Prof. ya que no existe en sí una regla clara que especifique qué acción tomar en un momento dado.NET Pagina 68/123 Email:yauyo148@hotmail.com . El paradigma de la conexión Cuando abordamos un proyecto de acceso a fuentes de datos. ¿Debemos crear una conexión con la base de datos al principio de nuestra aplicación y cerrarla cuando la aplicación se cierre?. ¿o debemos crear una conexión con la base de datos sólo cuando vayamos a trabajar con la fuente de datos?.

De esta manera. a veces necesitamos trabajar con la fuente de datos estando conectados a ella. Como es lógico. Por otro lado. sin vuelta atrás. Conociendo el objeto DataReader El objeto DataReader nos permite como hemos indicado anteriormente. dependiendo de las necesidades con las que nos encontremos. pero no podemos variar esta. DataReader es rápido Debido a su naturaleza y características. establecer una conexión con una fuente de datos y trabajar con esta fuente de datos sin desconectarnos de ella. DataReader se maneja en una sola dirección El objeto DataReader sólo permite que nos desplacemos por los datos en una sola dirección. debemos entonces modificar la conexión con el comando establecido. Para hacerlo. hay diferentes cualidades y particularidades que conviene conocer. El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con fuentes de datos conectadas. I. Analizando el flujo de trabajo de DataReader Prof. con el que podemos interactuar con la fuente de datos en modo lectura y modo escritura. sólo podemos utilizar el objeto DataReader con conexiones establecidas en una sentencia SQL por ejemplo. el objeto DataSet nos permite movernos por los registros para adelante y para atrás.NET Pagina 69/123 Email:yauyo148@hotmail. Por el contrario. este objeto es bastante rápido a la hora de trabajar con datos. Sin embargo.NET) El objeto DataSet nos ofrece la posibilidad de almacenar datos. sin embargo.E. CESCA (ADO. Sin embargo. podemos trabajar con las aplicaciones estando desconectados de la fuente de datos. que esta conexión se establezca en un modo de sólo lectura. Alejandro Yauyo Barrientos / Specialist Developer . requiere sin embargo. tablas y bases de datos de una determinada fuente de datos. DataReader es de solo lectura Lo que hemos dicho anteriormente. consume además menos memoria y recursos que un objeto DataSet por ejemplo. al contrario de lo que se puede hacer con el objeto DataSet.com . el objeto DataReader tiene algunas particularidades que conviene conocer y que veremos a continuación. Además.S. puede que este método de acceso y trabajo no sea el más idóneo.

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

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

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

Usando la Clase 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 más 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 conexión:

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

En el evento Load del Formulario Codificar lo siguiente:

REM Creamos las 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 diseñar la siguiente interfaz:

Haber codificar lo que más nos gusta:

En el ámbito de importaciones Importar el NameSpace:

Imports System.Data.SqlClient

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

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

En el ámbito general crear los siguientes procedimientos:

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 72/123
Email:yauyo148@hotmail.com

Columns. 120) LstClientes.Text cmd. ComboBox1.GridLines = True REM Creamos las Columnas en ListView LstClientes.Add(dr(1).State <> ConnectionState.Close() cn.ExecuteReader LstClientes. "Codigo".ToString()) List.Add("Apellido". CESCA (ADO.Clear() While dr.Open() End If Dim dr As SqlDataReader = cmd.SubItems.ToString()) LstClientes.Items.View = View.AddWithValue("@CodDis".Add(List) End While dr. cn) cmd. cn) cmd. Alejandro Yauyo Barrientos / Specialist Developer .NET) Private Sub ListarCliente() Dim cmd As New SqlCommand("Select CodClie.SelectedValue) If cn.Parameters.NomClie.Add("Codigo".DirClie From Cliente".Add(dr(2). "Apellido".E.SubItems.Open Then cn.ToString()) List. 140) LstClientes.ApeClie. I.NomClie.ExecuteReader While dr.Columns.CommandType = CommandType.State <> ConnectionState.DirClie From Cliente where CodDis=@CodDis".ToString()) Prof.Columns. 199) ListarDistrito() ListarCliente() En el evento SelectedIndexChanged del combobox1 codificar lo siguiente: Dim cmd As New SqlCommand("Select CodClie. "Nombre".Add(dr(3).NET Pagina 73/123 Email:yauyo148@hotmail.Open() End If Dim dr As SqlDataReader = cmd.CommandType = CommandType.SubItems. "Direccion".Text If cn.Add("Direccion".Details LstClientes. 80) LstClientes.Close() End Sub En el evento Load del Formulario invocar los métodos creados: LstClientes.Open Then cn.Read Dim List As New ListViewItem(dr(0).Read Dim List As New ListViewItem(dr(0).ToString()) List.Columns.com .S.Items.ApeClie.Add("Nombre".

Nota: Implemente el procedimiento de un entorno conectado para filtrar sobre la grilla.ToString()) LstClientes.SubItems.Add(List) End While dr. I.SubItems.Add(dr(3).ToString()) List.S.NET) List.ToString()) List.Close() Catch ex As Exception End Try Propuesto: Cuando seleccione una opción ejemplo clase me mostrara el combo la lista de clases y al seleccionar un item del combo me permitirá filtrar en la grilla.E.NET Pagina 74/123 Email:yauyo148@hotmail.Items.Close() cn. Lo mismo para marca y modelo.Add(dr(1).com . Prof. CESCA (ADO.SubItems.Add(dr(2). Alejandro Yauyo Barrientos / Specialist Developer .

E. Alejandro Yauyo Barrientos / Specialist Developer .NET) Creando Variables dentro de una Instrucción SQL Objetivo: Al término de esta separa el alumno conocerá:  Crear variable dentro de una instrucción sql  Funciones de tipo Sub y Function  Manejar las sentencias Insert.Server=.Text Dim dt As New DataTable da.Rtrim(NomDis) as NomDis From Distrito".DataSource = dt CboDistrito.DisplayMember = "NomDis" CboDistrito.S.SqlClient dgdCliente En el anbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.CommandType = CommandType.Password=1234") Crear el siguiente procedimiento: Private Sub GetDistrito() Dim da As New SqlDataAdapter("Select CodDis. cn) da.Fill(dt) CboDistrito.com . Delete y Select Restaurar la BD Almacen cboDistrito Ejemplo 01: Importar el NameSpace Imports System..NET Pagina 75/123 Email:yauyo148@hotmail.ValueMember = "CodDis" End Sub Prof.SelectCommand. Update. I. CESCA (ADO.Data.Database=Almacen.

DataSource = dt Ejemplo 02: Importar el NameSpace Imports System.NomClie.Database=Almacen.com .E.SelectCommand.Fill(dt) cboCliente.Data.Server=.(rtrim(ApeClie)+ '.NET) En el botón buscar codificar lo siguiente: Dim da As New SqlDataAdapter("Select CodClie.Parameters.ApeClie.DirClie.ValueMember = "CodClie" End Sub Prof.Password=1234") Crear los siguientes procedimientos: Private Sub GetLLenarCombo() Dim da As New SqlDataAdapter("Select CodClie.Text Dim dt As New DataTable da. cn) da.Text da. CboDistrito.S.SelectCommand.DataSource = dt cboCliente.DisplayMember = "NomCom" cboCliente.NET Pagina 76/123 Email:yauyo148@hotmail. CESCA (ADO.SqlClient dgdCliente En el anbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.'+Rtrim(NomClie)) as NomCom From Cliente". I.SelectedValue) Dim dt As New DataTable da. Alejandro Yauyo Barrientos / Specialist Developer .CommandType = CommandType. cn) da.CodDis From Cliente Where CodDis=@CodDis".Fill(dt) dgdCliente.CommandType = CommandType.AddWithValue("@CodDis"..SelectCommand.

Rows(0)(3) txtCodDis. I.CommandType = CommandType.Rows(0)(1) txtApeClie.NET Pagina 77/123 Email:yauyo148@hotmail.Rows(0)(“CodClie”) Columna Fila En el botón “Buscar” evento click codificar lo siguiente: Dim codigo As String codigo = InputBox("Ingrese codigo".CodDis.Rows(0)(4) txtTelClie.E.Fill(dt) txtCodClie. TelClie.Rows(0)(0) ó dt.Parameters.Text = dt.AddWithValue("@CodClie".Text = dt.SelectCommand.Text = dt.Rows(0)(7) End Sub Donde: dt.com .DirClie.SelectedValue) Catch ex As Exception End Try Terminar el código necesario para los controles de desplazamiento: Prof.NET) Private Sub GetLlenarCajas(ByVal Codigo As String) Dim da As New SqlDataAdapter("SelectCodClie.ApeClie.Rows(0)(5) txtRucClie.Text = dt.RucClie.Rows(0)(6) txtemail.Rows(0)(0) txtNomClie.Text = dt.Text = dt.S. Codigo) Dim dt As New DataTable da.Text = dt.Rows(0)(2) txtDirClie.SelectCommand.Text da. CESCA (ADO. cn) da. "INGRESE") GetLlenarCajas(codigo) En el Combobox evento SelectedIndexChanged: Try GetLlenarCajas(cboCliente.Nomclie.Text = dt. Alejandro Yauyo Barrientos / Specialist Developer .EmaiClie From Cliente Where CodClie=@CodClie".

Text Dim dt As New DataTable da.Server=.Database=Almacen.DataSource = dt Cboopcion.Text Dim dt As New DataTable da.SelectCommand.Data.com .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".DataSource = dt Cboopcion.DisplayMember = "DesMarca" Cboopcion. Alejandro Yauyo Barrientos / Specialist Developer .NET) Ejemplo 03: rbtClase rbtMarca rbtPersonal Importar el NameSpace dgdArticulos Imports System.S. CESCA (ADO.CommandType = CommandType.ValueMember = "CodMarca" Prof.ValueMember = "CodClase" End Sub Rem Listar Marca Private Sub GetMarca() Dim da As New SqlDataAdapter("Select CodMarca.DisplayMember = "DesClase" Cboopcion.Fill(dt) Cboopcion.. I.SqlClient En el ámbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.Rtrim(DesMarca)as DesMarca From Marca".E.NET Pagina 78/123 Email:yauyo148@hotmail. cn) da.SelectCommand.CommandType = CommandType.Fill(dt) Cboopcion. cn) da.

DataSource = Nothing End If En el evento CheckedChanged del control rbtPersonal: If rbtPersonal.Checked = True Then GetPersonal() Else Cboopcion. cn) da.CommandType = CommandType. cn) da.SelectedValue) Dim dt As New DataTable da.DataSource = Nothing End If En el evento CheckedChanged del control rbtMarca: If RbtMarca.ValueMember = "CodPer" End Sub En el evento CheckedChanged del control rbtClase: If rbtClase.Rows.Fill(dt) dgdArticulos. Alejandro Yauyo Barrientos / Specialist Developer .E.Checked = True Then GetClase() Else Cboopcion.Rtrim(NomPer)+'.AddWithValue("@CodClase". Cboopcion.SelectedValue) Dim dt As New DataTable da.AddWithValue("@CodMarca".NET Pagina 79/123 Email:yauyo148@hotmail.CommandType = CommandType.SelectCommand. cn) da.DataSource = dt Cboopcion.'+ Rtrim(ApePer)as NomCom From Personal".com .SelectCommand.DataSource = dt lblfilas.Text da.Fill(dt) Cboopcion.NET) End Sub Rem Listar Personal Private Sub GetPersonal() Dim da As New SqlDataAdapter("Select CodPer.Text da. I.Fill(dt) Prof.DataSource = Nothing End If En el evento SelectedIndexChanged del control Combobox: Try If rbtClase.Checked = True Then GetMarca() Else Cboopcion.Parameters.Checked = True Then Dim da As New SqlDataAdapter("Select * From Articulo Where CodMarca=@CodMArca".CommandType = CommandType.S.Checked = True Then Dim da As New SqlDataAdapter("Select * From Articulo Where CodClase=@CodClase".Text Dim dt As New DataTable da.Text = dt.Count ElseIf RbtMarca.SelectCommand.DisplayMember = "NomCom" Cboopcion.Parameters. CESCA (ADO.SelectCommand.SelectCommand. Cboopcion.

Database=Almacen. I.Data.Fill(dt) dgdArticulos.DataSource = dt lblfilas. cn) da.Password=1234") Dim condi As String Crear Los siguientes procedimientos: Rem procedimiento para Limpiar los controles textbox y combobox Private Sub Limpiar() Prof.Checked Then Dim da As New SqlDataAdapter("Select * From Articulo Where CodPer=@CodPer".Rows..Rows.SelectedValue) Dim dt As New DataTable da.DataSource = dt lblfilas. Alejandro Yauyo Barrientos / Specialist Developer .NET) dgdArticulos.NET Pagina 80/123 Email:yauyo148@hotmail.AddWithValue("@CodPer".Text da.Server=.Parameters.S. CESCA (ADO.E.CommandType = CommandType.SqlClient En el ámbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa.Count End If Catch ex As Exception End Try Ejemplo 04: Diseñar la siguiente interfaz: Btnnuevo Btnmodificar BtnConsultar BtnCancelar BtnSalir Importar el NameSpace BtnGuardar BtnEliminar Imports System. Cboopcion.Count ElseIf rbtPersonal.SelectCommand.Text = dt.Text = dt.SelectCommand.com .

ByVal Consultar As Boolean.Enabled = valor End If Next End Sub Rem procedimiento para Listar los distritos Private Sub GetDistrito() Dim da As New SqlDataAdapter("Select CodDis.SelectCommand.Text Dim dt As New DataTable da.DisplayMember = "NomDis" CboDistrito.NET Pagina 81/123 Email:yauyo148@hotmail.CommandType = CommandType.Enabled = nuevo BtnGuardar.Enabled = eliminar btnSalir.E. Alejandro Yauyo Barrientos / Specialist Developer .NET) For Each Item As Object In Me.Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item.Clear() End If If TypeOf Item Is ComboBox Then CType(Item.DataSource = dt CboDistrito.Rtrim(NomDis) as NomDis From Distrito". ByVal Guardar As Boolean.Enabled = Cancelar btnEliminar. CheckBox). TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item.SelectedIndex = -1 End If Next End Sub Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis: Private Sub habilitar(ByVal nuevo As Boolean.ValueMember = "CodDis" End Sub Prof. ComboBox). ByVal Cancelar As Boolean. TextBox). I.com . ByVal salir As Boolean) btnNuevo.Enabled = Guardar btnModificar.S. ByVal modificar As Boolean.Enabled = modificar btnConsultar.Fill(dt) CboDistrito.Controls If TypeOf Item Is TextBox Then CType(Item. ComboBox).Enabled = Consultar btnCancelar. ByVal eliminar As Boolean.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. cn) da. CESCA (ADO.Controls If TypeOf Item Is TextBox Then CType(Item.

txtemail.RucClie=@RucClie. 1) txtCodClie.AddWithValue("@ApeClie".Text Prof. txtNomClie.CommandType = CommandType.Text. I. 1. 0.Parameters.Parameters.CodDis=@CodDis.TelClie. cn) cmd.Focus() En el botón guardar evento click: If condi = "N" Then Dim cmd As New SqlCommand("Insert into Cliente(CodClie. Alejandro Yauyo Barrientos / Specialist Developer .AddWithValue("@DniClie". cn) cmd. txtCodClie. 1. 1.ReadOnly = True txtNomClie. txtDirClie.Text.@ EmaiClie)". CESCA (ADO. 0.EmaiClie=@Emaiclie Where CodClie=@CodClie". 1.RucClie.Open() cmd.Trim) cmd.ApeClie=@ApeClie.AddWithValue("@NomClie". 0) txtCodClie. 0.Text cmd.ExecuteNonQuery() cn.@DirClie.@Rucclie.@NomClie.@CodDis.NomClie.NET) En el evento Load del formulario: Try GetDistrito() Limpiar() habilitar(1. txtApeClie.Text.Trim) cn.Trim) cmd.Trim) cmd. "Registro Guardado". 0. 1.ApeClie. 1. 0.NET Pagina 82/123 Email:yauyo148@hotmail.OK.@ApeClie.Text.HabilitarCajas(True) habilitar(0. txtTelClie.Information) habilitar(1.Text.AddWithValue("@DirClie". 0.Close() MessageBox. TelClie=@TelClie.AddWithValue("@EmaiClie".E. cboDistrito.Trim) cmd.AddWithValue("@CodClie".AddWithValue("@TelClie".Parameters.CommandType = CommandType.Parameters.S.ReadOnly = False txtCodClie. 0. MessageBoxIcon.AddWithValue("@RucClie". 0.Trim) cmd.Focus() En el botón Modificar evento click: condi = "M" Me.Text.Parameters.DirClie.@Dniclie. 1) HabilitarCajas(False) Catch ex As Exception End Try En el botón nuevo evento click: condi = "N" HabilitarCajas(True) habilitar(0.AddWithValue("@CodDis".Parameters.Text cmd. 0.DirClie=@DirClie.DniClie. txtRucClie.@TelClie. txtDni. MessageBoxButtons.EmaiClie) Values(@Codclie. 0.Text.com . 0. 0. 0. 1) Limpiar() HabilitarCajas(False) ElseIf condi = "M" Then Dim cmd As New SqlCommand("Update Cliente Set NomClie=@NomClie.Trim) cmd.Parameters.CommandType = CommandType.CodDis.Parameters.Text.Parameters.Trim) cmd.SelectedValue) cmd.DniClie=@DniClie.Show("Registro Almacenado Correctamente". 0.

SelectedValue) cmd.Trim) cmd. 1.Trim habilitar(0.Rows(0)("DniClie").CommandType = CommandType.OK.ToString. MessageBoxButtons. 0.AddWithValue("@CodClie".ToString. codigo) Dim dt As New DataTable da.AddWithValue("@RucClie". 0.Show("Error el codigo ingresado no existe".AddWithValue("@DirClie". txtApeClie.NET Pagina 83/123 Email:yauyo148@hotmail.Rows(0)(1).TelClie.Text = dt.EmaiClie From Cliente Where CodClie=@CodClie".Parameters.SelectCommand. cboDistrito. "Error".Open() cmd.Trim cboDistrito.AddWithValue("@DniClie".Parameters.Text.DniClie.Trim txtDni.AddWithValue("@NomClie".SelectCommand.Trim) cmd.Parameters.Rows(0)(3).Parameters.AddWithValue("@EmaiClie".Rows(0)(7).Text = dt. MessageBoxIcon.Trim txtRucClie.Trim) cmd.Text da.ToString.Parameters.Rows(0)(8).Trim txtDirClie.Rows(0)(0). 0. MessageBoxButtons.Exclamation) End Try En el botón Eliminar evento click: Try Dim cmd As New SqlCommand("Delete From Cliente Where CodClie=@CodClie". cn) cmd.AddWithValue("@CodDis".Trim) cmd.DirClie.Close() MessageBox. CESCA (ADO.ExecuteNonQuery() cn.Text = dt. txtDni.Information) habilitar(1.Text = dt. Alejandro Yauyo Barrientos / Specialist Developer . txtDirClie.CodDis. I.Trim) cmd.Rows(0)(2).Fill(dt) txtCodClie.ApeClie. 1.ExecuteNonQuery() cn.Text. 1. txtTelClie. txtCodClie.SelectedValue = dt. "Registro Actualizado".Trim txtApeClie.Rows(0)(4) txtTelClie.ToString. 1.AddWithValue("@CodClie".AddWithValue("@ApeClie".Trim) cn. 0.Trim txtemail. 1) Limpiar() HabilitarCajas(False) End If En el botón Consultar evento click: Try Dim codigo As String codigo = InputBox("Ingrese Codigo Cliente".Parameters. 0. " Ingrese Codigo a BUSCAR") Dim da As New SqlDataAdapter("Select CodClie.AddWithValue("@CodClie".Parameters.Text = dt.Text. 0) HabilitarCajas(False) txtCodClie.com .Text.S.OK.Text.ToString.Text = dt.Text = dt.Trim txtNomClie.Rows(0)(5).CommandType = CommandType.AddWithValue("@TelClie". txtRucClie.ToString. txtemail.ToString. txtCodClie.Close() Prof.ReadOnly = True Catch ex As Exception MessageBox.Text = dt.Trim) cmd.NET) cmd.RucClie.Parameters.Parameters.Show("Registro Actualizado Correctamente". cn) da. 0.E. MessageBoxIcon.Text.Trim) cmd.Text.ToString.NomClie.Text) cn.Parameters.Text.Parameters.Open() cmd. txtNomClie.Text cmd.

DialogResult. 1) Catch ex As Exception End Try En el botón Cancelar evento click: Limpiar() habilitar(1. MessageBoxButtons.Show("Registro Eliminado".E. "Eliminado". 0.com . 0.Information) Limpiar() habilitar(1. 0.YesNo) = Windows. 1) HabilitarCajas(False) En el botón Salir evento click: If MessageBox.NET Pagina 84/123 Email:yauyo148@hotmail. I. Alejandro Yauyo Barrientos / Specialist Developer .NET) MessageBox. 0. MessageBoxIcon. CESCA (ADO.Yes Then Close() End If Hacer lo mismo pero con la tabla Personal. 0. MessageBoxButtons. Prof. 0. 0.Show("Desea Salir". 1. "Salir". 1. 0.OK.Forms.S.

un valor agregado) de una base de datos. I.com . Asimismo el objeto Command realiza una tarea simple de ejecución de instrucciones SQL en el lado del servidor.Conexion) Prof. el cual necesita dos parámetros tanto la instrucción SQL como la conexión a donde debe apuntar. CommandText Obtiene o establece el procedimiento almacenado o la Instrucción SQL que se ejecutara en el origen de datos de acuerdo a la conexión establecida. CESCA (ADO.NET Pagina 85/123 Email:yauyo148@hotmail.NET) Clase SqlCommand Objetivo: Al término de esta separa el alumno conocerá:  Conocer sus métodos  Crear Funciones de tipo Sub y function  Diferencias de ExecuteNonQuery y ExecuteScalar Representa un procedimiento almacenado o una instrucción de Transact-SQL que se ejecuta en una base de datos de SQL Server. Sintaxis: Dim cmd as new SqlCommand(“Instrucción SQL Ó Procedimiento Almacenado”.S. Alejandro Yauyo Barrientos / Specialist Developer . ExecuteNonQue Ejecuta comandos como instrucciones INSERT. ExecuteReader puede no tener el efecto deseado si se utiliza para ejecutar comandos como las instrucciones SET de Transact-SQL. ExecuteReader invoca a los comandos mediante el procedimiento almacenado en el sistema sp_executesql de Transact-SQL. CommandType Obtiene o Establece el tipo de comando es decir un procedimiento Almacenado o una instrucción SQL ExecuteReader Ejecuta comandos que devuelven filas. Esta clase no se puede heredar. DELETE. que utiliza esta instancia de SqlCommand. Sqlcommand proporciona los siguientes Metodos de ejecución de comandos en una base de datos de SQL-Server. UPDATE y ry SET de Transact-SQL. Por consiguiente. ExecuteScalar Recupera un único valor (por ejemplo.E. Connection Obtiene o establece la conexión SqlConnection asociada al comando. Para obtener un mayor rendimiento.

E.WriteLine(String.com . connection) connection.ExecuteNonQuery El cual no me duevelve ningún tipo de resultado. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 86/123 Email:yauyo148@hotmail. I. consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o para cambiar la información de una base de datos ejecutando las instrucciones UPDATE.NET) Una vez configurado el Command indicándole la instrucción a realizar y la conexión donde apuntar.Close() End Try End Using End Sub Cuando usar ExecuteNonQuery o ExecuteScalar En este artículo veremos cómo y cuándo usar el método ExecuteNonQuery o ExecuteScalar de un comando (o clase) derivado de la clase abstracta (no instanciable) DbCommand si trabajas con Visual Studio 2008 o de la interfaz IDbCommand si trabajas con cualquier versión de Visual Studio para . INSERT y DELETE. Ejemplo de SqlDataReader con el método ExecuteReader. el valor devuelto corresponde al número de filas afectadas por el comando.NOMCLIE FROM CLIENTE. la ejecución de esta instrucción se realiza con el método. Esto es lo que nos dice la ayuda de Visual Studio sobre el método ExecuteNonQuery: Ejecuta una instrucción SQL en un objeto de conexión. los parámetros de salida o los valores devueltos asignados a los parámetros se rellenan con datos. _ reader(0). Aunque ExecuteNonQuery no devuelva ninguna fila. {1}". reader(1))) End While Finally ' Always call Close when done reading.Open() Dim reader As SqlDataReader = command. Prof. para la devolución de resultados podríamos utilizar ExecuteReader.NET. INSERT o DELETE.S. Para las instrucciones UPDATE. Para los demás tipos de instrucciones.Format("{0}. Public Sub ReadOrderData(ByVal connectionString As String) Dim queryString As String = _ "SELECT CODCLIE. Solo se dedica a realizar la instrucción en la base de datos donde apunta la conexión.Read() Console." Using connection As New SqlConnection(connectionString) Dim command As New SqlCommand(queryString. Se puede utilizar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo. reader.ExecuteReader() Try While reader. el cual devuelve devuelve la consulta en forma de un DataReader. CESCA (ADO. cmd. el valor devuelto es -1.

Bueno. en realidad.NET Pagina 87/123 Email:yauyo148@hotmail. Se omiten todas las demás columnas y filas. si queremos saber el número de registros (filas) de una tabla que cumple cierto criterio. Este método devuelve un valor de tipo Object que tendremos que convertir según el valor devuelto.com . devolverá cero.E. Por tanto. si eliminamos varias filas de la tabla. el valor devuelto será del tipo Int32 y será el número de filas que hay en la tabla Almacen de la base de datos indicada en el objeto Connection que previamente habremos indicado que nos muestre la cantidad de códigos que pertenezcan a dicho parámetro indicado. pero que no devolverá un valor. devolverá el número de filas eliminadas. en algunos casos si que devolverá un valor. podemos deducir que ExecuteNonQuery lo usaremos para ejecutar la mayoría de las instrucciones de SQL que ejecutará algo en la base de datos. Por ejemplo. Utilice el método ExecuteScalar para recuperar un único valor (por ejemplo. I. Alejandro Yauyo Barrientos / Specialist Developer .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. un valor agregado) de una base de datos. Prof. pero será para indicarnos. Por otro lado. ExecuteScalar lo usaremos cuando tengamos que ejecutar un código de SQL del que queremos recuperar la primera columna de la primera fila. por ejemplo.S. Si no hay ninguna fila que cumpla ese criterio. CESCA (ADO. podemos usar un comando SQL como este: Select Count(CodClie) From Cliente Where CodDis=@CodDis En este caso.

com . cn) cmd. Cod.Mid(Codigo.Data. CESCA (ADO.Open() Codigo = cmd.Text cn.Max) & Cod TextBox1.Server=. 1. 6)) + 1 REM cuanto la longitud de la variable Cod Max = Len(Cod) REM uno las variables para generar el codigo NuevoCodigo = Strings.ExecuteScalar cn. I. Alejandro Yauyo Barrientos / Specialist Developer .Text = NuevoCodigo End If Prof.CommandType = CommandType.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.NET Pagina 88/123 Email:yauyo148@hotmail.Database=Almacen.NET) Ejemplo 01 Diseñar la siguiente interfaz: Restaurar la BD Almacen: Importar el NameSpace: Imports System. 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".S. 8 .E.Password=1234") En el botón “Nuevo Codigo” evento Click codificar lo siguiente: REM Declaro mis variables Dim Codigo.Right(Codigo..SqlClient Crear la cadena de conexión en el ámbito a nivel de clase: Dim cn As New SqlConnection("User id=sa.

CESCA (ADO. ByVal modificar As Boolean.Server=. ByVal eliminar As Boolean. ByVal Cancelar As Boolean. ByVal salir As Boolean) Prof.Clear() End If If TypeOf Item Is ComboBox Then CType(Item. Alejandro Yauyo Barrientos / Specialist Developer .Controls If TypeOf Item Is TextBox Then CType(Item.NET Pagina 89/123 Email:yauyo148@hotmail.Database=Almacen. ComboBox).E. ByVal Consultar As Boolean.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.NET) Ejemplo 02 Restaurar la BD almacen y diseñar la siguiente interfaz: GroupBox1 Btnnuevo Btnmodificar BtnConsultar BtnCancelar BtnSalir Importar el NameSpace BtnGuardar BtnEliminar Imports System..com . I.Data.SelectedIndex = -1 End If Next End Sub Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis: Private Sub habilitar(ByVal nuevo As Boolean.SqlClient En el ámbito a nivel de clase codificar lo siguiente: Dim cn As New SqlConnection("User id=sa. TextBox). ByVal Guardar As Boolean.S.

@DesEmpresa. CheckBox).Parameters.Text cmd. CodEmpresa) cmd.ExecuteNonQuery() cn. Rucempresa) cn.DesEmpresa.E. TextBox).Close() Catch ex As Exception MessageBox.Parameters.Enabled = eliminar btnSalir. CESCA (ADO. ByVal DesEmpresa As String.S.Open() cmd.NET Pagina 90/123 Email:yauyo148@hotmail.AddWithValue("@DirEmpresa".Controls If TypeOf Item Is TextBox Then CType(Item. cn) cmd.DirEmpresa.Parameters.Enabled = Consultar btnCancelar.@DirEmpresa.Parameters. ByVal Rucempresa As String) Try Dim cmd As New SqlCommand("Insert into Empresa(CodEmpresa.com .AddWithValue("@CodEmpresa".RucEmpresa)Values(@CodE mpresa.@TelEmpresa.AddWithValue("@DesEmpresa". ComboBox). I.AddWithValue("@TelEmpresa".Show("Error Ocurrio un Error en " & ex. ByVal TelEmpresa As String. DirEmpresa) cmd.Parameters.AddWithValue("@RucEmpresa".NET) btnNuevo.Enabled = nuevo BtnGuardar.Message) End Try End Sub Rem procedimiento para Actualizar Prof.Enabled = valor End If Next End Su Rem procedimiento para Insertar Private Sub SetInsert(ByVal CodEmpresa As String.Enabled = modificar btnConsultar. ByVal DirEmpresa As String.Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item.@RucEmpresa)". TelEmpresa) cmd. Alejandro Yauyo Barrientos / Specialist Developer . DesEmpresa) cmd.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.Enabled = Cancelar btnEliminar.CommandType = CommandType.TelEmpresa.Enabled = Guardar btnModificar.Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item.

codigo) cn.DirEmpresa.Text cmd.AddWithValue("@CodEmpresa".Parameters. I.SelectCommand.Close() Catch ex As Exception MessageBox.AddWithValue("@DirEmpresa". DesEmpresa) cmd.AddWithValue("@DesEmpresa".Parameters. cn) da.SelectCommand. ByVal DirEmpresa As String.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".AddWithValue("@RucEmpresa".Parameters. CodEmpresa) cmd.Text cmd.com .Open() Dim i As Integer i = cmd.Open() cmd.E.S.Show("Error Ocurrio un Error en " & ex.CommandType = CommandType. cn) cmd.Show("Error Ocurrio un Error en " & ex.CommandType = CommandType.TelEmpresa=@TelEmpresa.Parameters.Parameters.NET) Private Sub SetUpdate(ByVal CodEmpresa As String.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.Parameters. TelEmpresa) cmd.Fill(dt) Return dt Catch ex As Exception MessageBox.ExecuteNonQuery() cn. Rucempresa) cn. ByVal TelEmpresa As String. cn) cmd. ByVal Rucempresa As String) Try Dim cmd As New SqlCommand("Update Empresa Set DesEmpresa=@DesEmpresa.AddWithValue("@CodEmpresa". CESCA (ADO.DesEmpresa.NET Pagina 91/123 Email:yauyo148@hotmail. codigo) Dim dt As New DataTable da.Parameters.Message) End Try End Function En el evento Load del formulario: Try Limpiar() Prof.AddWithValue("@CodEmpresa".TelEmpresa. Alejandro Yauyo Barrientos / Specialist Developer . DirEmpresa) cmd.AddWithValue("@TelEmpresa".Close() Return i Catch ex As Exception MessageBox.Ruce mpresa=@RucEmpresa Where CodEmpresa=@CodEmpresa". ByVal DesEmpresa As String.Text da.RucEmpresa From Empresa Where CodEmpresa=@CodEmpresa".ExecuteNonQuery cn.DirEmpresa=@DirEmpresa.CommandType = CommandType.

1.Text = NuevoCodigo End If : txtCodEmp.Text = "E00001" Else Cod = Val(Strings.Text.com .Trim) MessageBox.Focus() En el botón Guardar evento click: If condi = "N" Then SetInsert(txtCodEmp. 0. 1) txtCodEmp. 0. txtTelEmp.Focus() En el botón Modificar evento click: condi = "M" Me. 0. txtDirEmp.Trim. NuevoCodigo As String Dim Max As Integer Dim cmd As New SqlCommand("Select CodEmpresa From Empresa Order By CodEmpresa desc".Trim. 0. 1) Limpiar() HabilitarCajas(False) End If Prof.ExecuteScalar cn.CommandType = CommandType.Max) & Cod txtCodEmp.ReadOnly = True txtDesEmp.Text. "Registro Actualizado". 1. 0. txtTelEmp. 0. 1) Limpiar() HabilitarCajas(False) ElseIf condi = "M" Then SetUpdate(txtCodEmp. 1) HabilitarCajas(False) Catch ex As Exception End Try En el botón nuevo evento click: condi = "N" HabilitarCajas(True) habilitar(0.Text.Text. CESCA (ADO. "Guardado") habilitar(1.Close() If Codigo Is Nothing Then txtCodEmp. 0.HabilitarCajas(True) habilitar(0.Right(Codigo. txtRuc. 0.OK. 1. 0. 0.Trim.Trim. 0. 1.Text. 0. MessageBoxIcon.Trim. 0. 0.NET) habilitar(1. 5)) + 1 Max = Len(Cod) NuevoCodigo = Strings. 1. txtDesEmp. I. cn) cmd. 6 . txtDesEmp. Alejandro Yauyo Barrientos / Specialist Developer .ReadOnly = True : txtDesEmp.Trim. 0.E.Trim.Open() Codigo = cmd.Show("Registro Almacenado". MessageBoxButtons.Show("Registro Actualizado Correctamente". 0.Trim. 0) Dim Codigo.Text.Text cn. Cod.Text.Information) habilitar(1.Text. 0.Text.Mid(Codigo. 1. 1.Trim) MessageBox.NET Pagina 92/123 Email:yauyo148@hotmail.S.Text. 1. txtDirEmp. txtRuc. 0.

Text = dt.Information) Limpiar() habilitar(1.S.com . 0. 0. 0.Text. 1.Text = dt. 0.Text = dt.OK.Rows(0)(3) txtRuc.Rows(0)(4) habilitar(0.Text = dt.Rows(0)(0) txtDesEmp.Rows(0)(1) txtDirEmp. "Eliminado " & CStr(cant). 1.Rows(0)(2) txtTelEmp. 1) Catch ex As Exception End Try En el botón Salir evento click: If MessageBox.E. MessageBoxButtons.NET) En el botón Consultar evento click: Try Dim codigo As String codigo = InputBox("Ingrese Codigo". "Salir". MessageBoxIcon.Yes Then Close() End If Propuesto: Hacer lo mismo pero con la tabla MARCA.Text = dt.ReadOnly = True Catch ex As Exception MessageBox.Show("El codigo ingresado no existe") End Try En el botón Eliminar evento click: Try Dim cant As Integer cant = setEliminar(txtCodEmp.DialogResult. 1. CESCA (ADO. Prof. Alejandro Yauyo Barrientos / Specialist Developer .Show("Desea Salir". I. 0.Show("Registro Eliminado".NET Pagina 93/123 Email:yauyo148@hotmail. MessageBoxButtons.Trim) MessageBox. 0) HabilitarCajas(False) txtCodEmp. "Codigo") Dim dt As New DataTable dt = GetConsultar(codigo) txtCodEmp.Forms. 1.YesNo) = Windows. 0.

E. CESCA (ADO. I.NET Pagina 94/123 Email:yauyo148@hotmail.com .S.NET) Uso del DataTable Objetivo: Al término de esta separa el alumno conocerá:  Que es un DataTable  Configurar el Datatable  Trabajar con Clases Ejemplo 01 Restaurar la BD Almacen luego diseñar la siguiente interfaz: Una vez diseñado la siguiente interfaz agregar una clase: Como?: Vea la siguiente imagen: Menu Proyecto/Agregar Clase: Prof. Alejandro Yauyo Barrientos / Specialist Developer .

SqlClient 2.Text Dim ds As New DataSet() da.com . cn) da.Integrated security=true") Nuestra clase operaciones quedaría de la siguiente forma: Debajo de la conexión crear los siguientes métodos: Rem Listado de todos los Articulos.vamos a trabajar en la clase agregada: Primero en el ámbito de importaciones importar el namespace: Imports System..NET Pagina 95/123 Email:yauyo148@hotmail.En el ámbito a nivel de clase crear la cadena de conexión: Private cn As New SqlConnection("Server=..Rtrim(DesArti) as DesArti From Articulo".S.Fill(ds.Data. CESCA (ADO..DataBase=Almacen.E.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. I.SelectCommand. "Articulos") Return ds Catch ex As Exception Throw ex End Try End Function Prof.CommandType = CommandType. Alejandro Yauyo Barrientos / Specialist Developer . Public Function getArticulos() As DataSet Try Dim da As New SqlDataAdapter("Select CodArti.

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 métodos nos dirigimos al formulario para trabajar:
En el ámbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim objOper As New 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 botón agregar evento click codificar lo siguiente:

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

End If

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

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

Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 98/123
Email:yauyo148@hotmail.com

@NomPer. TelPer = @TelPer. set @CodPer=@Codigo GO Create Proc [usp_Actualizar_Personal] @CodPer Char(6).1.E. @Retirado Char(2) AS declare @Cod Char(6). DirPer. CodCargo. GO Create Proc [usp_Eliminar_Personal] Prof. @ApePer Char(35). NomPer. @CodCargo Char(3). DirPer. @Retirado). @ApePer Char(35).com . @DirPer Char(40). NomPer. @CodCargo Char(3). @Dni. CodCargo = @CodCargo. DirPer = @DirPer. GO Create Proc [usp_Consultar_Personal] @CodPer char(6) AS Select CodPer. Dni = @Dni. @Dni Char(8). Dni. @TelPer Char(8). DirPer. ApePer.6-@Max)+@Cod From Personal Insert Into [Personal] (CodPer. NomPer = @NomPer. Retirado From [Personal] Where CodPer = @CodPer. Retirado = @Retirado Where CodPer = @CodPer. ApePer = @ApePer. CodCargo. @Retirado Char(2) AS Update [Personal] Set CodPer = @CodPer. @TelPer Char(8). @ApePer.NET) Manejo de Clases en . @CodCargo. @NomPer Char(35). ApePer.NET Pagina 99/123 Email:yauyo148@hotmail.@max int. @NomPer Char(35). TelPer. @Dni Char(8).NET Objetivo: Al término de esta separa el alumno conocerá:  Manejar los objetos de tipo Clase. @DirPer. Go Create Proc [usp_Guardar_Personal] @CodPer Char(6)Output. Retirado) Values(@Codigo. ApePer. NomPer. @DirPer Char(40).@Codigo Char(6) Select @Cod=Max(right(CodPer. TelPer. CodCargo. Restaurar la BD Almacen y crear los siguientes procedimientos almacenados: Create Proc [usp_Listar_Personal] AS Select CodPer. Retirado From [Personal]. I. @TelPer.  Crear Procedimientos Almacenados con parámetros de salida. CESCA (ADO. TelPer. Dni. Dni. Alejandro Yauyo Barrientos / Specialist Developer .3))+1 From Personal Set @Max=Len(@Cod) Select @Codigo=substring(CodPer.S.

NET) @CodPer char(6) AS Delete [Personal] Where CodPer = @CodPer.com . Go Create Proc Usp_Listar_Cargo As select CodCargo.S. I.NET Pagina 100/123 Email:yauyo148@hotmail. y diseñar la siguiente interna: GroupBox1 BtnSalir Btnnuevo Btnmodificar BtnConsultar Prof. Alejandro Yauyo Barrientos / Specialist Developer .Rtrim(DesCargo) Cargo from Cargo Abrir el Visual Studio 2008 y crear un proyecto de tipo aplicación para Windows. CESCA (ADO.E.

CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .Data.SqlClient 2.Integrated security=true") Nuestra clase operaciones quedaría de la siguiente forma: Prof..NET Pagina 101/123 Email:yauyo148@hotmail.NET) BtnCancelar BtnGuardar BtnEliminar Una vez diseñado la siguiente interfaz agregar una clase: Como ¿?: Vea la siguiente imagen: Menu Proyecto/Agregar Clase: La cual nos pedirá un nombre la llamaremos Operaciones: Una ves ingresado el nombre lo agregamos: Lo cual nuestro proyecto quedara de la siguiente forma: 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.com . I..En el ámbito a nivel de clase crear la cadena de conexión: Private cn As New SqlConnection("Server=.DataBase=Almacen..S.E.

E. cn) da.S.CommandType = CommandType.NET) Debajo de la conexión crear los siguientes métodos: REM metodo para Listar los Cargos Public Function GetCargo() As DataTable Try Dim da As New SqlDataAdapter("Usp_Listar_Cargo".com . "Cargo") Return ds. CESCA (ADO.StoredProcedure Dim ds As New DataSet da.NET Pagina 102/123 Email:yauyo148@hotmail.SelectCommand.Tables(0) Catch ex As Exception Throw ex End Try End Function Prof. Alejandro Yauyo Barrientos / Specialist Developer . I.Fill(ds.

Open() cmd.Parameters. TelPer) cmd.AddWithValue("@DirPer".Parameters.StoredProcedure cmd. ByVal CodCargo As String.Parameters. NomPer) cmd.Parameters.com .AddWithValue("@Retirado".AddWithValue("@CodCargo".AddWithValue("@TelPer".Parameters. CodCargo) cmd. SqlDbType. _ ByVal TelPer As String. CodCargo) cmd.Open() cmd.Output cmd. Dni) cmd. ApEper) cmd.Parameters.Parameters. SqlDbType.Parameters. _ ByVal TelPer As String.Add(New SqlParameter("@CodPer".StoredProcedure cmd.Parameters. CESCA (ADO. ByVal CodCargo As String. I.CommandType = CommandType. NomPer) cmd.AddWithValue("@ApePer". ByVal ApEper As String.AddWithValue("@ApePer".Char. ApEper) cmd.ExecuteNonQuery() cn.Parameters.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 DirPer As String.Value = CodPer cmd. ByVal DirPer As String.NET) REM metodo para Guardar Personal Public Function SetGurdar(ByVal CodPer As String.Add(New SqlParameter("@CodPer".Parameters. cn) cmd.AddWithValue("@TelPer".Parameters.AddWithValue("@CodCargo". _ ByVal Dni As String. _ ByVal Retirado As String) Dim cmd As New SqlCommand("[usp_Actualizar_Personal]".CommandType = CommandType. Retirado) Try cn.Parameters. ByVal NomPer As String.Parameters. cn) cmd.Direction = ParameterDirection. Alejandro Yauyo Barrientos / Specialist Developer . ByVal NomPer As String.AddWithValue("@DirPer". DirPer) cmd. Dni) cmd. Retirado) Try Dim codigo As String cn.AddWithValue("@NomPer". _ ByVal Retirado As String) As String Dim cmd As New SqlCommand("[usp_Guardar_Personal]". _ ByVal Dni As String. 6)).Close() codigo = cmd.AddWithValue("@Retirado".NET Pagina 103/123 Email:yauyo148@hotmail. ByVal ApEper As String.Parameters("@CodPer"). DirPer) cmd.Parameters. 6)).ExecuteNonQuery() cn.Close() Catch ex As Exception Throw ex End Try End Sub Prof.Parameters.E.AddWithValue("@Dni".AddWithValue("@Dni".S. TelPer) cmd.Char.AddWithValue("@NomPer".

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]".Controls If TypeOf Item Is TextBox Then CType(Item. cn) da. codigo) Dim ds As New DataSet da.NET) REM metodo para Consultar Personal Public Function GetPersona(ByVal codigo As String) As DataTable Try Dim da As New SqlDataAdapter("[usp_Consultar_Personal]".AddWithValue("@CodPer".SelectCommand.StoredProcedure cmd. ComboBox).CommandType = CommandType. I.com . Codigo) Try cn.Controls If TypeOf Item Is TextBox Then CType(Item.AddWithValue("@CodPer".ExecuteNonQuery() cn.Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item.NET Pagina 104/123 Email:yauyo148@hotmail.E.Open() cmd. CheckBox). CESCA (ADO.SelectCommand.GroupBox1.CommandType = CommandType. ComboBox).Parameters.StoredProcedure da. TextBox).Close() Catch ex As Exception Throw ex End Try End Sub Ahora una ves creado los métodos nos dirigimos al formulario para trabajar: En el ámbito a nivel de clase declarar la variable obj de tipo operaciones: Dim obj As New Operaciones dim condi as String="" Crear los siguientes procedimientos a nivel general: Private Sub LimpiarCajas() For Each Item As Object In Me.S.Clear() End If If TypeOf Item Is ComboBox Then CType(Item.SelectedIndex = -1 End If Next End Sub Private Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.GroupBox1. cn) cmd. Alejandro Yauyo Barrientos / Specialist Developer .Fill(ds.Enabled = valor End If Next End Sub Prof. TextBox).Parameters. "Persona") Return ds.Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item.

Text = obj. 1) LimpiarCajas() HabilitarCajas(False) ElseIf condi = "M" Then obj.txtDNI. 0.Text. Me.txtDirPer.HabilitarCajas(True) habilitar(0.Text.Text.Focus() Ahora en el evento Clic del botón “Guardar” If condi = "N" Then txtCodPer. 0. Me. 0. 0.DisplayMember = "Cargo" cbocargo. 0.Enabled = Consultar btncancelar.txtRetirado. 0.SetActualizar(txtCodPer. 0) txtApePer.Enabled = modificar btnconsultar. 1. 0. Me. 1.Text. 0.com .SelectedValue.Show("Registro Actualizado") habilitar(1. Me.Text. Me. Me.NET Pagina 105/123 Email:yauyo148@hotmail.Text.Enabled = salir End Sub Ahora en el evento Load del formulario codificar lo siguiente: cbocargo. 1. Me.GetCargo cbocargo. Alejandro Yauyo Barrientos / Specialist Developer .SetGurdar(txtCodPer. 1.txtRetirado.txtDirPer.ReadOnly = True Ahora en el evento Clic del botón “Modificar” condi = "M" Me. 0. 1.Show("Registro Guardado") habilitar(1. 1) HabilitarCajas(False) Ahora en el evento Clic del botón “Nuevo” condi = "N" HabilitarCajas(True) habilitar(0. ByVal eliminar As Boolean.txtApePer. 1) LimpiarCajas() HabilitarCajas(False) End If Prof. ByVal Guardar As Boolean.Text.Text. CESCA (ADO. 0.txtApePer. Me.Enabled = eliminar btnsalir. 1) txtCodPer. Me. I. Me.txtNomPer. 0.E. Me. 0. ByVal salir As Boolean) btnnuevo.txtNomPer.txtTelPer.SelectedValue.Enabled = Cancelar btneliminar.cbocargo. 0.Text) MessageBox. Me. 1.Text.Text. 0. 0.ReadOnly = True txtApePer.Enabled = Guardar btnModificar.NET) Private Sub habilitar(ByVal nuevo As Boolean. 1. Me.ValueMember = "CodCargo" LimpiarCajas() Habilitar(1.Enabled = nuevo btnguardar. ByVal Cancelar As Boolean. 0. Me.txtTelPer.cbocargo.Text) MessageBox.DataSource = obj. 0. ByVal Consultar As Boolean.Text. ByVal modificar As Boolean.S.Focus() txtCodPer.txtDNI. 0.Text.

ToString.Trim Me. CESCA (ADO.txtCodPer.YesNo) = Windows.Text = dt. 1.Rows(0)(5).NET Pagina 106/123 Email:yauyo148@hotmail. 0. 0.txtRetirado.Rows(0)(3). 0) HabilitarCajas(False) txtCodPer. 1.ToString. 0.E.Show("Registro Eliminado") LimpiarCajas() habilitar(1.ToString. 0.ToString.Show("Error el codigo ingresado no existe") End Try Ahora en el evento Clic del botón “Cancelar” LimpiarCajas() habilitar(1.txtApePer.DialogResult.ReadOnly = True Catch ex As Exception MessageBox.com .Trim Me.Show("Desea Salir". 0.Trim Me.Rows(0)(6) Me.Text) MessageBox. 1.SelectedValue = dt.txtDNI.Text = dt.SetEliminar(Me.Yes Then Close() End If Prof. 0.Rows(0)(1). 1) HabilitarCajas(False) Ahora en el evento Clic del botón “Salir” If MessageBox.NET) Ahora en el evento Clic del botón “Eliminar” obj. 0. "Salir".Text = dt.Trim Me. MessageBoxButtons. 1.Rows(0)(4). 0. 0.Text = dt.txtTelPer.txtNomPer.Trim habilitar(0. 1.Rows(0)(2).Rows(0)(7).txtCodPer. 0. "Ingrese") Dim dt As New DataTable dt = obj.Text = dt. 1) Ahora en el evento Clic del botón “Consultar” Try Dim codigo As String codigo = InputBox("Ingrese Codigo".txtDirPer.Text = dt.Trim Me. Alejandro Yauyo Barrientos / Specialist Developer .Rows(0)(0).GetPersona(codigo) Me.S.ToString.ToString.cbocargo.Forms.Text = dt. I.ToString.Trim Me.

E. Foreign key(CodArti)References Articulo ) Go Prof. Total Decimal(10. Alejandro Yauyo Barrientos / Specialist Developer . CodArti Char(7)not null.2).2).2) Primary key(NumFact. I. CodPer Char(6). CodClie Char(8)not null. CESCA (ADO. 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.NET) Usando del parámetro de salida OutPut Objetivo: Al término de esta separata el alumno tendrá el conocimiento de: • Utilizar el parámetro OutPut • Uso del metodo AddWithValue de la propiedad Parameters Ejercicio: Antes de desarrollar este ejercicio deberemos de crear los stores procedures Desde el analizador de consultas (SQL Server) codificar: Use Almacen Go --Creamos la table Factura Create Table Factura ( NumFact Char(8)Not null. CantArti Int. FechaEmi DateTime.S. Anula Char(1).CodArti) Foreign key(NumFact)References Factura. PreUnit Decimal(10.com .NET Pagina 107/123 Email:yauyo148@hotmail. Importe Decimal(10.

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.2) As Insert Into Detalle_Factura(NumFact. @Cod Char(8) Select @Cod=Max(NumFact)+ 1 From Factura Set @max=Len(@Cod) Select @NumFactura=Substring(NumFact. @Anula Char(1).CodArti. @CodClie Char(8).PreUnit. @max int. Alejandro Yauyo Barrientos / Specialist Developer .@Importe) Go --Sp para Consultas Create Proc Usp_Clientes_Todos As Select CodClie.Total.CantArti.CodPer.@Total. @Total Decimal(10.1.'23/06/2009'.Rtrim(Rtrim(ApeClie) +'.'PER001'.30.Emitido) Values(@NumFactura.NET) Aquí los SP Sp para Guardar Factura Create Proc Usp_Guardar_Factura_x @NumFact Char(8)OutPut.@CodClie. CESCA (ADO.'N'.@PreUnit.2).'+ NomClie) as [Cliente] From Cliente Go Prof.Anula.'S' print @NumFact Go --Sp para Guardar Detalle Factura Create Proc Usp_Guardar_Detalle_x @NumFact char(8).@Emitido) Set @NumFact=@NumFactura Go --Provar el SP Declare @NumFact Char(8) exec Usp_Guardar_Factura_x @NumFact output. @Emitido Char(1) As Declare @NumFactura char(8). @PreUnit Decimal(10.NET Pagina 108/123 Email:yauyo148@hotmail.@CodPer.Importe) Values(@NumFact.'CL000001'. @Importe Decimal(10. I.FechaEmi.@CodArti.CodClie.E.@FechaEmi.com .@CantArti. @CantArti Int. @CodArti Char(7).S.2). @CodPer Char(6). @FechaEmi DateTime.@Anula.00.

Data. Alejandro Yauyo Barrientos / Specialist Developer .NET) ---Sp para traer todos los productos Create Proc Usp_Productos_todos As Select CodArti. con el nombre “Facturacion” Diseñar la siguiente interfase: Agregar una clase al proyecto de nombre “Operaciones” y codificar En el ámbito de importaciones importar los namespace: Imports System.NET Pagina 109/123 Email:yauyo148@hotmail.TelClie From Cliente Where CodClie=@CodClie Go Crear un proyecto de tipo WindowsForm.RTrim(DesArti) as [DesArti].SqlClient Prof.Data Imports System.E.S.PrecVenta From Articulo Go --Sp para traer todos los Clientes Create Proc Usp_Traer_Cliente_x_Cod @CodClie Char(8) As Select DirClie.RucClie. I. CESCA (ADO.com .

cn) da. "Clientes") Return ds.SelectCommand.Parameters.CommandText = "Usp_Productos_todos" da. CESCA (ADO.com . "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". 8)).Fill(ds.DataBase=Almacen. "Cliente") da.S.E. cn) da. I.Add(New SqlParameter("@CodClie".CommandType = CommandType.SelectCommand.SelectCommand.Fill(ds.Server=.CommandType = CommandType.. SqlDbType.SelectCommand.Tables(0) Catch ex As Exception Throw ex End Try End Function Prof.NET Pagina 110/123 Email:yauyo148@hotmail.Text Dim ds As New DataSet() da.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".Fill(ds. Alejandro Yauyo Barrientos / Specialist Developer .Char.StoredProcedure Dim ds As New DataSet() da.NET) A nivel de clase: Dim cn As New SqlConnection("User id=sa.Value = CodClie da.

Transaction = trans Dim cmdDeta As New SqlCommand("Usp_Guardar_Detalle_x".Add(New SqlParameter("@NumFact".NET Pagina 111/123 Email:yauyo148@hotmail. CodPer) cmdCabe.AddWithValue("@Importe". ByVal detalle As DataTable) As String cn. Fila("Cant")) cmdDeta. FechaEmi) cmdCabe.Value. SqlDbType.NET) 'Metodo para Guardar los Datos de la Factura(Cabecera y Detalle) Public Function SetFactura(ByVal CodClie As String. dtDet As New DataTable() Dim dr As DataRow Dim SubTotal As Decimal Prof. Fila("Precio")) cmdDeta.Parameters.AddWithValue("@PreUnit".AddWithValue("@CodArti". CodClie) cmdCabe.Parameters("@NumFact").Parameters. ByVal CodPer As String.com . ByVal anula As String.Parameters.ToString() For Each Fila As DataRow In detalle. SqlDbType.Transaction = trans cmdCabe.StoredProcedure cmdCabe.AddWithValue("@CodPer".Parameters.AddWithValue("@CodClie".Parameters.Value = Codigo cmdDeta.Closed Then cn.Parameters.AddWithValue("@FechaEmi". Fila("Importe")) cmdDeta. Alejandro Yauyo Barrientos / Specialist Developer . anula) cmdCabe. 8)).BeginTransaction() Dim cmdCabe As New SqlCommand("Usp_Guardar_Factura_x". I.CommandType = CommandType.Close() End If End Try End Function Codificar en el Formulario: Dim Obj As New Operaciones() Dim CodPro As String Dim dtProd.Parameters. CESCA (ADO.Commit() Return Codigo Catch ex As Exception trans.StoredProcedure cmdDeta.E. cn) cmdCabe. ByVal FechaEmi As DateTime.State <> ConnectionState.Char.Direction = ParameterDirection.ExecuteNonQuery() cmdDeta. ByVal Emitido As String.AddWithValue("@Total". Fila("Codigo")) cmdDeta.Parameters. cn) cmdDeta. Emitido) Dim Codigo As String cmdCabe.Clear() Next Try trans.Open() Dim trans As SqlTransaction = cn. 8)).AddWithValue("@Anula".Rows cmdDeta.AddWithValue("@Emitido".ExecuteNonQuery() Codigo = cmdCabe.Parameters.Output cmdCabe.Add(New SqlParameter("@NumFact".Parameters. ByVal total As Decimal.Rollback() Throw ex Finally If cn. total) cmdCabe.Parameters.Char.Parameters.S.CommandType = CommandType.Parameters.AddWithValue("@CantArti".

txtPrecio.Columns.Columns.Columns(0).S.Add("Cant".Add("Descripcion".ToLongDateString() CrearTabla() Catch ex As Exception End Try En el evento SelectedIndex_Ghanged del combo “cboCliente” Try Dim dt As New DataTable() dt = Obj.GetDatosFac().DataSource = dtProd cboProducto.Text = "" lblFecha. Alejandro Yauyo Barrientos / Specialist Developer . GetType(Decimal)) dtDet.DisplayMember = "Cliente" CboCliente. GetType(String)) dtDet.Columns.Add("Importe".Width = 60 End Sub En el Load del Formulario: Try CboCliente. I. GetType(Integer)) dtDet.Columns(1).E.Width = 60 dgdDetalle.Text = "" dtProd = Obj.Text = dt.Text = "" Me.Width = 60 dgdDetalle.ValueMember = "CodClie" CboCliente.Text = dt.Add("Codigo".getCliente(CboCliente.Tables(1) cboProducto. GetType(Decimal)) dgdDetalle.Now.Rows(0)(1).Rows(0)(0).ValueMember = "PrecVenta" cboProducto.Width = 60 dgdDetalle.SelectedValue. CESCA (ADO.DataSource = Obj.Width = 150 dgdDetalle.Tables(0) CboCliente.ToString()) txtDirClie.Add("Precio".Columns.DataSource = dtDet dgdDetalle.ToString() txtRuc.com .NET) //Creamos 1 Metodo para crear la tabla q se enlaza con la grilla Private Sub CrearTabla() dtDet.Rows(0)(2).DisplayMember = "DesArti" cboProducto.ToString() Catch ex As Exception End Try Prof.Columns(2).Columns(4).Columns.NET Pagina 112/123 Email:yauyo148@hotmail. GetType(String)) dtDet.Text = dt.ToString() txtTelClie.Columns(3).Text = DateTime.GetDatosFac().

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

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.E. I.NET Pagina 116/123 Email:yauyo148@hotmail. CESCA (ADO. Vista Diseño Vista Prelimnar. Prof.com . 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.S. Alejandro Yauyo Barrientos / Specialist Developer .

E. CESCA (ADO.NET Pagina 117/123 Email:yauyo148@hotmail.S.com . I. Alejandro Yauyo Barrientos / Specialist Developer .NET) Paso 7: Click derecho sobre Campos de base de datos: Darle Click Aqui 8) Nos apertura la siguiente ventana: Darle Click Prof.

CESCA (ADO.com .NET Pagina 118/123 Email:yauyo148@hotmail.S.E.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 botón siguiente: Prof. I. Alejandro Yauyo Barrientos / Specialist Developer .

) Base datos seleccionamos Almacen 11) Luego siguiente y finalizar .NET Pagina 119/123 Email:yauyo148@hotmail.com . Alejandro Yauyo Barrientos / Specialist Developer . I.) Bueno por defecto ya tenemos una conexión establecida más o menos como la siguiente imagen: Prof.) En contraseña indicamos el password en este caso también creo q es 123 . CESCA (ADO.S.) En Id del usuario indicamos el usuario en este caso q es SA cierto .NET) 10) Nos despliega un venta para conectarnos al origen de datos: En Servidor indicamos el nombre de tu servidor: ojo de tu servidor .E.

Seleccionamos la ficha tablas y seleccionamos la tabla Cliente: Prof.NET Pagina 120/123 Email:yauyo148@hotmail. En dbo encontramos nuestras tablas procedimientos almacenados. Alejandro Yauyo Barrientos / Specialist Developer . vistas de la BD. I. information.NET) Seleccionamos la Ficha almacen y nos despliega dbo.com . CESCA (ADO.S. sys.E.

com . I.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 añadido junto con los campos: Arrastrar los campos que deseas mostrar en la seccion 3 asi: Prof. CESCA (ADO.S. Alejandro Yauyo Barrientos / Specialist Developer .E.NET Pagina 121/123 Email:yauyo148@hotmail.

NET Pagina 122/123 Email:yauyo148@hotmail.S. CESCA (ADO. Alejandro Yauyo Barrientos / Specialist Developer .com . I.NET) Le damos una vista Preliminar para ver cómo va quedando: Prof.E.

E. "1234") CRVCliente. CESCA (ADO. I.SetDatabaseLogon("sa".NET Pagina 123/123 Email:yauyo148@hotmail. Alejandro Yauyo Barrientos / Specialist Developer .com .S.ReportSource = report Y por ultimo probamos la aplicación con un F5 Prof.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.