Libroado.net
-
Upload
jose-antonio-collazos-oliveros -
Category
Documents
-
view
226 -
download
0
Transcript of Libroado.net
I.E.S. CESCA(ADO.NET)
Taller de Desarrollo IIIADO.NET
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 1/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic.NET (II)ObjetivoAl término de esta separata el alumno conocerá
Que es ADO.NET Conocer los Espacios entre nombre (Namespace) Conocer los Proveedores para los diferentes Gestores de Base de Datos
INTRODUCCION
La mayoría de las aplicaciones escritas en visual Basic giran en entorno a la lectura y escritura actualización de información de base de datos para permitir la integración de datos en aplicaciones distribuidas y escalables, Visual Studio .NET es compatible con una nueva generación de tecnología de acceso a datos: ADO.NET
ADO.NET.- Es un conjunto de librerías para el acceso de datos, ya sea estén en una base de datos o en hoja de cálculo o un archivo XML.
ADO.NET.- Forma parte del tercer nivel del conjunto de objetos que el .NET Framework ofrece para trabajar dentro de esta plataforma, junto con XML constituyen un subgrupo específico que estén preparados para manejar datos.
ADO.NET.- Proporciona un acceso coherente a origen de datos como Microsoft SQL Server, así como orígenes de datos expuestos mediante OLE DB (Microsoft Access, Microsoft Visual FoxPro etc.) y XML las aplicaciones para usuarios que comparten datos para utilizar pueden utilizar ADO.NET para conectarse a estos orígenes de datos y recuperar, manipular y actualizar los datos.
ADO.NET.- Ah mejorado notablemente con respecto a su predecesor. La posibilidad de contar con proveedores específicos hace posible no solo la simplificación a nivel de la codificación sino también en el consumo de recursos. Trabajar en entornos conectados como desconectados permite al desarrollador desarrollar las mejores prácticas en función a los requerimientos.
En la actualidad ADO.NET ya es parte del NET. Framework quiere decir que ADO.NET es parte del sistema operativo y no más un redistribuible que se necesita alojar junto al cliente o junto al instalador de un aplicación. Esto simplifica que nosotros, como desarrolladores, estaremos enfocados mas el acceso a datos y a la lógica para manipular estos datos, y no tendremos porque preocuparnos en las librerías del cliente.
Pero como mandamos las instrucciones SQL a la base de datos, la respuesta es mediante los OBJETOS ADO.NET, las cuales proporcionan acceso coherente a orígenes de datos como Microsoft SQL – Server, así como orígenes de datos expuestos mediante OLE DB y XML.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 2/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
A continuación se detallan algunos conceptos básicos:
ADO.NET es una tecnología de acceso a datos que se basa en los objetos ADO (Objetos de datos ActiveX) Anteriores.
Es una manera nueva de acceder a los datos construida sobre ADO, ADO.NET puede existir con ADO.
Además podemos decir que ADO.NET es un conjunto de clases que exponen servicios de acceso a datos del programador.
ADO.NET proporciona un conjunto variado de componentes para crear aplicaciones distribuidas de uso compartido de datos. Forma parte integral de .NET Framework, y proporciona acceso de datos relacionales, datos XML y datos de aplicaciones.
ADO.NET es compatible con diversas necesidades de programación incluida la creación de clientes de bases de datos clientes y objetos empresariales de nivel medio utilizados por aplicaciones, herramientas, lenguajes o exploradores de Internet.
ADO.NET utiliza un modelo de acceso pensando para entornos desconectados. Esto quiere decir que la aplicación se conecta al origen de datos, hace lo que tiene que hacer, por ejemplo seleccionar registros, los carga en memoria y desconecta del origen de datos.
ADO.NET es un conjunto de clases que usted utiliza para acceder y manipular orígenes de datos como por ejemplo, una base de datos en SQL-Server o una planilla de Excel.
ADO.NET utiliza XML como el formato para transmitir datos desde y hacia su base datos y su aplicación WEB.
Hay 3 espacios de nombre que se importara en un formulario WEB o formulario Windows si está usando objetos de ADO.NET.
System.Data System.Data.SqlClient System.Data.OleDb
El modelo de objetos ADO.NET provee una estructura de acceso a distintos orígenes de de dato. Tiene componentes principales: el Dataset y el proveedor de Datos .NET.
Espacios de nombres para datos en el .NET FramworkEntre los espacios de nombres de .NET Framework relativos a datos y XML de incluyen:System.DataConsiste en las clases que constituyen la arquitectura ADO.NET, que es el metodo primario para tener acceso a los datos de las aplicaciones administradas.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 3/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
La arquitectura ADO.NET permite crear componentes que administran eficientemente datos procedentes de múltiples orígenes. ADO.NET también proporciona las herramientas necesarias para solicitar, Actualizar y reconciliar datos en aplicaciones distribuidoras.
System.Data.CommonContiene las clases que comparten los proveedores de datos .NET Framework. Dichos proveedores describen una colección de clases que se utiliza para obtener acceso a un origen de datos, Como una base de datos, en el espacio administrado.
System.XmlClases que proporcionan funcionalidad basad en estándares para procesar código XML .
System.Data.OleDbClases que componen el proveedor de datos de .NET Framework para orígenes de datos compatibles con OLE DB, ejecutar comandos en el origen y leer los resultados.
System.Data.SqlClientClases que conforman el proveedor de datos de .NET framework para SQL Server, que permite conectarse a un origen de datos SQL-Server 7.0, ejecutar Comandos y leer los resultados. El espacio de nombre System.Data.SqlClient es similar al espacio de nombres System.Data.OleDb, pero optimizado para el acceso a SQL Server 7.0 y versiones Posteriores.
System.Data.SqlTypesProporciona clases para tipos de datos nativos de SQL Server. Estas Clases ofrecen una alternativa más segura y más rápida a otros tipos de datos.
System.Data.OdbcClases que componen el proveedor de datos de .NET Framework para OLE DB. Estas Clases permiten el acceso a orígenes de datos ODBC en el espacio administrado.
System.Data.OracleClient Clases que componen el proveedor de datos de .NET Framework para Oracle. Estas clases permiten el acceso a orígenes de datos Oracle en el espacio administrado.
El proveedor de datos .NET FrameWorkEl proveedor de datos .NET provee del enlace entre el origen de datos y el dataset.
Un proveedor de datos de .NET Framework sirve para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente o se colocan en un Dataset de ADO.NET con el fin de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles.
El diseño del proveedor de datos de .NET Framework hace que sea ligero, de manera que cree un nivel mínimo entre el origen de datos y su código, con lo que aumenta el rendimiento sin sacrificar la funcionalidad.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 4/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Un proveedor de datos de .NET Framework sirve para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente o se colocan en un DataSet de ADO.NET con el de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El diseño del proveedor de datos de .NET Framework hace que sea ligero, de manera que cree un nivel mínimo entre orígenes de datos y su código, con lo que aumenta el rendimiento sin sacrificar la funcionalidad.
Proveedor de datos d .NET DescripciónProveedor de datos de .NET para SQL Server
Para Microsoft SQL Server Versión 7.0 o posteriores
Proveedor de datos de .NET para OLEDB Para orígenes de datos que se exponen mediante OLE DB
Proveedor de datos de .NET para ODBC Para orígenes de datos que se exponen mediante ODBC
Proveedor de datos de .NET para Oracle Para orígenes de datos de oracle. El proveedor de datos de .NET Framework para Oracle es compatible con la versión 8.1.7 y posteriores del software del cliente de Oracle.
Objetos provistos por distintos proveedores de datos .NETLos objetos Connection Command, DataReader y DataAdapter son elementos fundamentales del modelo del proveedor de datos .NET Framework. En la tabla siguiente se describen estos objetos.
Objeto Descripción Objeto SQL Server Objeto OleDB
Connection Establece una conexión a unorigen de datos determinado
SqlConnection OleDBConnection
Command Ejecuta un comando en un origen de datos
SqlCommand OleDBCommand
DataReader Lee una secuencia de datos de solo avance y solo lectura desde un origen de datos.
SqlDataReader OleDBDataReader
DataApapter Llena un DataSet y realiza las actualizaciones necesarias en el origen de datos.
SqlDataAdpater OleDBDataApapter
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 5/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
VB.NET ADO.NETEstudiando los Namespace
OleDb y SqlClient
Objetivo:Al término de esta separata el alumno Conocerá:
Que es el objeto OleDb y SqlClient Propiedades del objeto OleDbconection y Sqlconnection
OleDb
Este namespace me permite conectarme a una base de datos de Microsoft ACCESS su espacio entre nombres es:
Imports System.DataImports System.Data.OleDB
Cuando importamos los espacios entre nombres System.Data.OleDb importamos todas las librerías de clases que contiene el espacio entre nombre OleDb y por consecuente las principales clases que me carga ala hora de importación son los siguientes:
OleDbCommandOleDbConnectionOleDbDataAdapterOleDbDataReader
SqlClient
El namespace SqlClient me permite conectarme a una base de dato de SQL Server su espacio entre nombre es:
Imports System.dataImports System.Data.SqlClient
Cuando importamos el espacio de entre nombres System.Data.SqlClient se carga toda las librerias de clases para trabajar con SQL Server sus principales clases son:
SqlConnectionSqlDataAdapterSqlCommandSqlDataReader
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 6/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Propiedades Principales tanto para SqlConnection y OleDbConnection
ConnectionStringObtiene o establece la cadena de conexión Utilizada para abrir una base de datos SQL-Server o Microsoft Access.
DatabaseObtiene el nombre de la base datos actual o de la que se va a utilizar una vez que se abre la conexión.
DataSourceObtiene el nombre de la instacia de SQL Server con la que se va a establecer la conexión.
ChangeDatabaseCambia la base de datos actual de una conexión SqlConnection abierta.
OpenAbre una conexión de base de datos con los valores de propiedad que espesifica el connectionString o mi cadena de conexión.
CloseCierra la cadena de conexión con la base de datos.
CreateCommandCrea y debuelve un objeto Sqlcommand asociado a la conexión.
Estudiando el objeto OleDbConnection:
En este ejemplo utilizaremos la base de datos del profesorEste Objeto representa la conexión de mi BD de Microsoft Access
Ejemplo Con Microsoft Access:
Crear un nuevo Proyecto BDnegocio
1.-Diseñar el Siguiente Formulario:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 7/122Email:[email protected]
BtnAbrir BtnCerrar
frmconecion
I.E.S. CESCA(ADO.NET)
2.- Luego Importar los Namespace:
3.- Debajo de frmconecion declarar una variable como la siguiente luego asigarle la variable al objeto de Connecion en este Caso sería OleDbconeecion
Rem Declaro mi cadena de conexiónDim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Control de Ventas.mdb"
Rem Paso mi variable a mi objeto de conexión es decir a OleDbConnectionDim cn As New OleDbConnection(strcon)
Propiedades de la cadena de conexión o Ruta
Provaider: Hace la referencia que estoy usando una base de datos Microsoft Access
Data Source: Indico la ruta de mi BD (D:\Control de Ventas.mdb)
4.- En el Evento Click del BtnAbrir Ingresar lo siguiente:
cn.Open()messageBox.Show("Conexion Abierta con la base de datos")
5.-En el Evento Click de BtnCerrar Ingresar lo Siguiente:
cn.Close()MessageBox.Show("Conexion cerrada")
6.- Probar la aplicaccion
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 8/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo Con SQL Server:
Estableciendo una conexión con SQL Server 2005
Para esto el Profesor entregara una base de datos creado en SQL Server.
1.-Agregar un nuevo Formulario y diseñar la siguiente interfaz:
2.- Importar el namespace SqlClient
Se debe crear las variables que representan la cadena de conexión y el objeto conexión, en un ámbito general del formulario.
Dim strcon As String = "Initial Catalog=Demo;Data Source=.;Integrated Security=true"Dim cn As New SqlConnection(strcon)
Analizando la Cadena de Conexión:
La cadena de conexión, representa la cadena que sera leida por el proveedor el cual se comunicara con el servidor y la base de datos mencionadas en esta Cadena.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 9/122Email:[email protected]
btncerrar
frmconecion
BtnAbrir
I.E.S. CESCA(ADO.NET)
Initial Catalog: =DemoNombre de la base de datos
Data Source="."Indica el nombre de mi servidor o nombre de mi PC
Nota:El punto que se le asigo en Data Source hace referencia al nombre de mi Servidor
Integrated Security=true"Indica que se usa seguridad integrada
Para conectarce a bases de datos de servidor se recomienda utilizar la autenticacion de Windows es la autenticacion cuando nos logeamos al inicio del sistema operativo conocida comunmente como seguridad integrada para espesificar la autenticaccion de Windows, se puede utilizar cualquiera de los dos siguientes:
Integrated Security=true"Integrated Security=SSPI"
En el boton BtnAbrir en el evento Click
cn.Open()MessageBox.Show("Conexion Abierta")
En el boton btnCerrar en el evento Click
cn.Close()MessageBox.Show("Conexion Cerrada")
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 10/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
VB.NET ADO.NETEstudiando los Namespace
OleDb y SqlClient
Objetivo:Al término de esta separata el alumno Conocerá:
Ejemplo 01:
Diseñar la siguiente interfaz:
En el ámbito de importaciones importar los siguientes namespace:
Imports System.Data.OleDbImports System.IO
En el ámbito a nivel de clase declarar las siguientes variables:
Dim strcon As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=D:\Ventas.mdb"Dim cn As New OleDbConnection()
En el evento “Load” del formulario:
cn.ConnectionString = strcon
En el botón “Abrir” evento Click: cn.Open()
MessageBox.Show("Conexión Establecida", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 11/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el botón “Cerrar” evento Click: cn.Close()
MessageBox.Show("Conexión Cerrad", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)
En el botón “Mostrar” evento Click:
REM si el estado de la conexión es Diferente a open Abrimos la cadena de conexiónIf cn.State <> ConnectionState.Open Then
cn.Open()End IftxtDataSource.Text = cn.DataSource 'Ruta de la Base de datostxtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexiontxtVersion.Text = cn.ServerVersion 'la Version del ServidortxtProvider.Text = cn.Provider 'Solo el ProveedortxtDataBase.Text = Path.GetFileName(cn.DataSource) ' La BDtxtDatabaseSinExtension.Text = Path.GetFileNameWithoutExtension(cn.DataSource) ' Sin extensiontxtDirectorio.Text = Path.GetDirectoryName(cn.DataSource)REM si el estado de la conexión es igual a open la cadena de conexion lo cerramos.If cn.State = ConnectionState.Open Then
cn.Close()End If
En el botón “Limpiar” evento Click:
Eso te lo dejo para ti
Una vez terminado a probar la aplicación:
Para recordar.
El Imports System.IO permite traer la clase Path esta clase me permite visualizar todas las características de la ubicación del archivo.
No solo me permite traer a la clase Path también me permite traer las clases que permiten crear archivos y abrir archivos estas clases son:
StreamReader: permiten leer un archivo de textoStreamWriter: permiten un Archivo de texto
Deseas un ejemplo en un botón ejecuta estas líneas de código:
Dim cadena As String = "Ejemplo de StreamWhiter"Dim sw As New StreamWriter("C:\Ejemplo.txt", False, Encoding.Default)sw.Write(cadena)sw.Close()
Luego de hacer click en el botón ubícate en el disco C y encontraras el archivo creado con el nombre Ejemplo.txt
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 12/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo con Sql-Server 2008
1) Ingresar al Sql:Botón Inicio/Ejecutar/ssms
2) Nos visualizar la siguiente ventana:
Server Type: Tipo de servidorServer name: Nombre del servidor (Nombre de la PC) Authentication: Tipo de autenticación existen dos tipos
1. Autenticación Windows2. Autenticación Sql-Server
Diferencias.
Cuando utilizamos la cuenta Autenticación Windows no es necesario ingresar el usuario ni el password pero si utilizamos la autenticación Sql-Server nos va a pedir obligatoriamente que ingresemos un usuario y password.
Tipo de Servidor = Motor de Base de datosServer Name= “.” Si no te acuerdas el nombre de tu servidor solo pongas un puntoAuthentication= Autenticación Sql-ServerUsuario=saPassword=123
Luego haces click en el botón conectar.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 13/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Se visualizar la siguiente ventana.
Se visualizar la siguiente ventana.
En sección de trabajo codificar lo siguiente:
Use masterGo--Creamos la BD VentasCreate Database VentasGo--Usamos la BD ventasUse VentasGo
Una vez terminado presionar F5Hasta acá hemos creado una BD en Sql Server 2008 de nombre Ventas Ahora a consumirlo.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 14/122Email:[email protected]
Click aquí (New Query = Nueva Consulta)
Sección de Trabajo. )
I.E.S. CESCA(ADO.NET)
Crear un proyecto de tipo Aplicación Windows FormsDiseñar la siguiente interfaz:
En el ámbito de importaciones importar el siguiente NameSpace:
Imports System.Data.SqlClient
En el ámbito a nivel de clase:
Dim cn As New SqlConnection("User id=sa;Server=.;DataBase=Ventas;Password=123")
En el botón “Abrir” evento Click: cn.Open()
MessageBox.Show("Conexión Establecida", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)
En el botón “Cerrar” evento Click: cn.Close()
MessageBox.Show("Conexión Cerrad", "Conexión", MessageBoxButtons.OK, MessageBoxIcon.Information)
En el botón “Mostrar” evento Click:cn.Open()txtDataSource.Text = cn.DataSource 'Nombre ServidortxtConnectionString.Text = cn.ConnectionString 'Toda la cadena de conexiontxtVersion.Text = cn.ServerVersion 'la Version del ServidortxtWorkstationId.Text = cn.WorkstationId 'el cliente quien lo consumetxtDataBase.Text = cn.Database ' La BDREM si el estado de conexiones es igual a open la cadena de conexion lo cerramos.If cn.State = ConnectionState.Open Then
cn.Close()End If
Bueno una vez terminado a ejecutarlo.Recursos...
Ver las cadenas de conexión para cualquier BD.http://www.connectionstrings.com/
Manual de ADO.NET 1http://www.4shared.com/dir/xqEfIPhy/ADONET.html
BaseDatos Ventas http://www.4shared.com/file/AFfP7HUz/Ventas.html
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 15/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
ADO.NETEstudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset
Objetivo:Al término de esta separata el alumno será capas de manejar los objetos:
OleDbdataAdapter SqlDataAdapter Dataset
Estudiando el objeto OleDbDataAdapter y SqlDataAdapterRepresenta un conjunto de comandos de datos y una conexión de base de datos que se utilizan para rellenar un DATASET y actualizar una base de datos SQL Server o Microsoft Access esta clase no se puede heredar.
OleDbDataAdapter y SqlDataAdapter, se utiliza como un puente entre el DATASET y la BD para recuperar o guardar datos. Proporciona este puente mediante la asignación del método FILL, que cambia los datos en el DataSet para que coincidan con los datos del origen de datos; y Update, que cambia los datos en origen de datos para coincidan con los datos en DataSet utilizando las instrucciones de Transact –SQL en el origen de datos adecuado.
Estudiando el método Fill
El método Fill de DataAdapter llena un DataSet sólo con las columnas y filas de un origen de datos.
DataAdapter contiene también las propiedades SelectCommand, InsertCommand, DeleteCommand, UpdateCommand para facilitar la carga y la actualización de los datos.
SelectCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para seleccionar registros en el origen de datos.
InsertCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para insertar nuevos registros en el origen de datos.
DeleteCommand
Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar registros de un conjunto de datos.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 16/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
UpdateCommand
Obtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL Para actualizar los registros del origen de datos.
Otros métodos de DataAdapter
FillSchema (se hereda de DbDataAdapter)Agrega DATATABLE A DATASET y configura el esquema para hacerlo coincidir con el del origen datos.
Update (se hereda de DbDataAdapter)Compatible con .NET compact Framework, sobrecargado. Llama a las instrucciones INSERT, UPDATE o DELETE respectivamente para cada fila insertada, actualizada, o eliminada en DataSet.
Modelo de uso del Objeto DataAdapter
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 17/122Email:[email protected]
Cadena de Conexión
SqlConnection
SqlDataAdapter
Dataset
SqlDataAdapter
Open
Close Fill
I.E.S. CESCA(ADO.NET)
El objeto DATASET
El objeto DATASET es esencial para admitir escenarios de datos distribuidos de ADO.NET sin mantener una conexión. El DataSet es una representación residente en memoria de datos que proporciona un modelo de programación relacional coherente independiente del origen de datos. Se puede utilizar con múltiples y distintos orígenes de datos. Con datos XML o para administrar datos locales de la aplicación. El Dataset representa un conjunto completo de datos entre los que se incluyen tablas relacionadas, restricciones y relacionales en la tabla.
Entonces se podría decir que el DATASET es una pequeña base de datos relacional mantenida en memoria en el cliente. Dispone de las capacidades de crear múltiples tablas, rellenarlas con datos que preceden de diferentes fuentes, imponer relaciones entre pares de tablas, etc.
Modelo esquemático del DataSet
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 18/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
ADO.NET (Lab)Estudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset
Objetivo:Al término de esta separata el alumno será capas de manejar los objetos:
OleDbdataAdapter SqlDataAdapter Dataset
1) Guardar la BD “Control de Ventas” en el Disco “D” Brindada por docente.2) Luego abrir el visual studio crear un nuevo proyecto de tipo aplicación para
Windows y diseñar el siguiente interfaz:
Importar el NameSpace OleDB en el ámbito de importaciones
Imports System.Data.SqlClient
Declarar las siguientes Variables en el ámbito a nivel de clase:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Control de Ventas.mdb") Dim ds As New DataSet
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 19/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el botón “Ver Cliente” codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select * From Clientes", cn)da.Fill(ds, "Cliente")dgdCliente.DataSource = ds.Tables(0)
En el botón “Ver Producto” codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select * From Productos", cn)da.Fill(ds, "Productos")dgdProductos.DataSource = ds.Tables(1)Propuesto:
Diseñar la siguiente interfaz y practicar lo aprendido!!!Nota: hacer uso de un solo DataSet
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 20/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Laboratorio Practico
Usando las funciones Max, Min, AVG, Count desde Access:
Max (Campo): permite traer el máximo valor del conjunto de filas.Min (Campo): permite traer el mínimo valor del conjunto de filas.Avg (Campo): permite traer el promedio del todo conjunto de filas.Count(Campo): permite traer la cantidad de filas.
Ejemplo 01:
Usar la BD Ventas
En el ámbito de importaciones importar el siguiente NameSpace:
Imports System.Data.OleDb
En el ámbito a nivel de clase declarar la siguiente variable:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Ventas.mdb")
Dim ds As New DataSet
En el botón consultar evento click codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select Count(CodigoProducto),Min(PrecioUnidad),Max(PrecioUnidad),AVG(PrecioUnidad) From Productos", cn)
da.Fill(ds, "Producto")txtTotal.Text = CDec(ds.Tables(0).Rows(0)(0))txtPrecioMinimo.Text = CDec(ds.Tables(0).Rows(0)(1)).ToString("n2")txtPrecioMaximo.Text = CDec(ds.Tables(0).Rows(0)(2)).ToString("n2")txtPrecioPromedio.Text = CDec(ds.Tables(0).Rows(0)(3)).ToString("n2")
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 21/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 02:
Diseñar la siguiente interfaz:
Modificar las siguientes propiedades de los DataGridView:
Control Propiedad ValordgdProducto SelectionMode FullRowSelect
ReadOnly TrueRowHeaderVisible FalseAllowUserToDeleteRows FalseAllowUserToAddRows False
Aplicar las mismas propiedades para los DataGridView que falta:
En el ámbito de importaciones importar el siguiente NameSpace:
Imports System.Data.OleDb
En el ámbito a nivel de clase declarar la siguiente variable:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Ventas.mdb")
Dim ds As New DataSet
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 22/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Crear el siguiente procedimiento debajo de un End Sub ojo debajo de un End Sub:
Rem este procedimiento permite que las columnas no permitan ordenarPrivate Sub QuitarOrdenGrid(ByVal dgv As DataGridView) Dim I As Integer For I = 0 To dgv.Columns.Count - 1 dgv.Columns(I).SortMode = DataGridViewColumnSortMode.NotSortable NextEnd Sub
En el evento load del formulario codificar lo siguiente:
Dim da1 As New OleDbDataAdapter("Select CodigoProducto,NombreProducto From Productos Order by CodigoProducto desc", cn)
da1.Fill(ds, "Producto")Dim da2 As New OleDbDataAdapter("Select CodigoCliente,NombreCliente,NombreContacto
From Clientes", cn)
da2.Fill(ds, "Cliente")Dim da3 As New OleDbDataAdapter("Select IdCargo,Cargo From Cargos Order by IdCargo
desc", cn)da3.Fill(ds, "Cargo")
dgdProducto.DataSource = ds.Tables("Producto")QuitarOrdenGrid(dgdProducto)dgdCliente.DataSource = ds.Tables("Cliente")QuitarOrdenGrid(dgdCliente)dgdCargos.DataSource = ds.Tables("Cargo")QuitarOrdenGrid(dgdCargos)
En el evento Click del botón salir codificar lo siguiente:
If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes Then
Application.Exit()
End If
Definir las siguientes propiedades del control DataGridView
Selection Mode=FullRowSelect: …………………………………………………………...ReadOnly: …………………………………………………………………………………...RowHeaderVisible: ………………………………………………………………………….AllowUserToDeleteRows: …………………………………………………………………..AllowUserToAddRows: …………………………………………………………………….AllowUserToResizeColumns: ………………………………………………………………AllowUserToResizeRows: ……………………………………………………………………
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 23/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIDataset
Objetivo:Al término de esta separata el participante conocerá:
Conocer el objeto Dataset Conocer sus propiedades metodos del Dataset
DataSetDataSet, que es una caché de memoria interna de datos recuperados de un origen de datos, representa un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Para obtener información más detallada sobre el trabajo con objetos DataSet.
Los objetos DataTable contienen los datos, mientras que DataRelationCollection permite desplazarse por la jerarquía de la tabla. Las tablas están incluidas en un DataTableCollection al que se obtiene acceso a través de la propiedad Tables. Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina "mydatatable" y otro "Mydatatable", la cadena que se utilice para buscar una de las tablas se considerará que distingue entre mayúsculas y minúsculas. Sin embargo, si existe "mydatatable" pero no existe "Mydatatable", se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas.
Principales Propiedades del objeto Dataset
Tables: Obtiene la colección de tablas incluidas en DataSet.
Relations: Obtiene la colección de relaciones que vincula las tablas y permite el desplazamiento desde las tablas primarias a las secundarias.
Principales Métodos del objeto Dataset
AcceptChanges:
Confirma todos los cambios realizados en este DataSet desde que se ha cargado o desde la última vez que se ha llamado a AcceptChanges.
Clear
Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 24/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
HasChanges: Sobrecargado. Obtiene un valor que indica si DataSet presenta cambios, incluyendo filas nuevas, eliminadas o modificadas.
Load:
Sobrecargado. Rellena un objeto DataSet con valores de un origen de datos utilizando la interfaz IDataReader proporcionada.
ReadXML
Sobrecargado. Lee esquema y datos XML en el objeto DataSet.
ReadXmlSchema
Sobrecargado. Lee un esquema XML en el DataSet.
WriteXML
Sobrecargado. Escribe datos XML y, de forma opcional, el esquema del DataSet.
WhiteXmlSchema
Sobrecargado. Escribe la estructura del DataSet como un esquema XML.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 25/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IITrabajando en Forma desconectada
Objetivo:Al término de esta separata el participante conocerá:
Trabajar en forma desconectada
Diseñar el siguiente Formulario
1) Guardar la base de datos Ventas en el disco D.
2) Modificar algunas propiedades de los controles.
Modificar los controles Button su propiedad Cursor = HandModificar las propiedades del control dgvClientes
SelectionMode=FullRowSelectReadOnly=True
3) En el ámbito a de importaciones importar el NameSpace:
Imports System.Data.OleDb
4) En el ámbito a nivel de clase codificar lo siguiente:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")Dim da As OleDbDataAdapterDim ds As New DataSet
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 26/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
5) En el evento Load del formulario codificar lo siguiente:
Dim strsql As String = "Select CodigoCliente,NombreCliente,NombreContacto,CargoContacto From Clientes"
da = New OleDbDataAdapter(strsql, cn) da.Fill(ds, "Cliente") Dim cmdx As New OleDbCommandBuilder(da) dgvClientes.DataSource = ds.Tables(0)
6) En el evento click del botón Nuevo
txtCod.Text = ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1)(0) + 1txtClie.Clear()txtCargo.Clear()txtConta.Clear()txtClie.Focus()
7) En el evento click del botón Adicionar
Dim dr As DataRow = ds.Tables(0).NewRowdr.BeginEdit()dr(0) = txtCod.Textdr(1) = txtConta.Textdr(2) = txtClie.Textdr(3) = txtCargo.Textdr.EndEdit()ds.Tables(0).Rows.Add(dr)
8) En el evento click del botón Actualizar
Dim fila As DataRow = dst.Tables(0).Rows(dgvEmpleado.CurrentRow.Index)fila.BeginEdit()fila(1) = txtApellido.Textfila(2) = txtNombre.Textfila(3) = dtpFechaNac.Valuefila.EndEdit()
9) En el evento click del botón Eliminar
Dim pos As Integer = dgvClientes.CurrentRow.Indexds.Tables(0).Rows(pos).Delete()MessageBox.Show("Registro Eliminado con Exito", "Eliminado", MessageBoxButtons.OK)
10) En el evento click del botón “Guardar Cambios”
If ds.HasChanges = True Thencn.Open()da.Update(ds, "Cliente")ds.Tables(0).Clear()da.Fill(ds, "Cliente")cn.Close()MessageBox.Show("Registros Actualizados", "Actualizados", MessageBoxButtons.OK)
End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 27/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
11) En el evento click del botón “Mostrar Cambios”
Dim frm As New FormDim dgv As New DataGridViewdgv.DataSource = ds.Tables(0).GetChangesfrm.Text = "Lista de Cambios en la Tabla"dgv.Dock = DockStyle.Fillfrm.Controls.Add(dgv)frm.ShowDialog()
12) En el evento click del botón “Salir”
Dim res As DialogResultres = MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Information)If res = Windows.Forms.DialogResult.Yes ThenApplication.Exit()End If
13) Ah probar la aplicación Propuesto hacer lo mismo pero con la tabla Proveedores con todos sus campos.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 28/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIEstudiando el objeto DataView
Objetivo:
Conocer el objeto DataView
Un dataview me permite crear múltiples vistas de uno o más objetos datatable los objetos daview son los objetos de datos que se vinculan con los controles nos estamos vinculado directamente el dataset sino alguna de vistas que el dataset puede exponer.
La clase Dataview representa una vista personalizada que une datos de un DataTable para clasificar, filtrar, editar y navegar. Un DataView es similar a una vista de un DataTable, que permite a los programadores establecer un orden clasificado y filtrar en una vista de la tabla aparte.
ADO.NET proporciona un número de DataViews para habilitar distintas vistas de la misma tabla y utilizarlas.
Un DatasetView es similar a una vista en la parte superior del DataSet y permite a los programadores establecer un orden predeterminado y filtrar las tablas individuales. Además permite a los Dataviews vincularse y utilizarse para DataBinding. De manera clasifica, la unión de datos se utilizaba dentro de las aplicaciones para aprovechar los datos almacenados en las bases de datos.
La unión de datos de Windows Forms le permite acceder a los datos desde bases de datos, así como a los datos en otras estructuras, como arreglos y colecciones (suponiendo que se han cumplido un mínimo de requerimientos).
Básicamente un dataview posee como propiedades importantes:
ITEM: Obtiene una fila de una tabla determina (ROW)TABLE: Obtiene o asigna el objeto DataTableSORT: Obtiene o asigna la/s Columna/s y el ordenamiento
RowFilter: obtiene o asigna la expresión para filtrar la vista
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 29/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIRealizando Búsquedas de datos
Objetivo:
Conocer el objeto DataView Conocer sus propiedades Uso de la clase BindingSource
Laboratorio PrácticoEjemplo 01:
La guardar la BD ventas en el disco “D”
Diseñar el siguiente formulario:
Ahora lo que más nos gusta codificar:
En al ámbito de importaciones codificar lo siguiente:
Imports System.Data.OleDb
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 30/122Email:[email protected]
RBcodigo RBNombreProducto RBPrecioUnidad
txtBuscar
I.E.S. CESCA(ADO.NET)
En el ámbito ah nivel de clase codificar lo siguiente:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")
Dim bs As New BindingSourceDim dv As DataView
En el evento Load del formulario codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select CodigoProducto,NumeroProveedor,NombreProducto,IdCategoriaProducto,PrecioUnidad,UnidadesExistencia,
UnidadesPedidas From Productos", cn) Dim ds As New DataSet da.Fill(ds, "Productos") 'Creando la vista de Productos dv = ds.Tables(0).DefaultView 'Crear y Enlazar el BindingSource bs.DataSource = dv 'Ordenar la vista por Nombre para hacer busquedas dv.Sort = "CodigoProducto" 'Enlazando el BindingSource al DataGridView dgvProductos.DataSource = bs
En el evento TextChanged del control TxtBuscar codificar lo siguiente:
Dim pos As Integer If txtBuscar.Text <> "" Then Dim dr() As DataRow If RBcodigo.Checked Then dr = dv.Table.Select("CodigoProducto=" & txtBuscar.Text) If dr.Length > 0 Then pos = dv.Find(txtBuscar.Text) End If ElseIf RBNombreProducto.Checked Then dr = dv.Table.Select("NombreProducto Like'" & txtBuscar.Text & "%'") If dr.Length > 0 Then pos = dv.Find(dr(0)("NombreProducto")) End If ElseIf RBPrecioUnidad.Checked Then dr = dv.Table.Select("PrecioUnidad=" & txtBuscar.Text) If dr.Length > 0 Then pos = dv.Find(dr(0)("PrecioUnidad")) End If End If If pos > -1 Then bs.Position = pos End If
En el evento CheckedChanged de RBcodigo
If RBcodigo.Checked Thendv.Sort = "CodigoProducto"
End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 31/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el evento CheckedChanged de RBNombreProducto
If RBcodigo.Checked Thendv.Sort = " NombreProducto desc"
End If
En el evento CheckedChanged de RBPrecioUnidad
If RBPrecioUnidad.Checked Thendv.Sort = "PrecioUnidad asc"
End If
En el evento CellFormatting del control dgvProductos
If e.RowIndex Mod 2 = 0 Then dgvProductos.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.PaleGreenEnd If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 32/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 02:
Diseñar el siguiente formulario:
Ahora lo que más nos gusta codificar:
En el ámbito de importaciones codificar lo siguiente:
Imports System.Data.OleDb
En el ámbito ah nivel de clase codificar lo siguiente:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")
Dim bs As New BindingSourceDim dv As DataViewDim TipoDato as String
Crear los siguientes procedimientos:
Rem Procedimiento para quitar el ordenamientoPrivate Sub QuitarOrdenacion(ByVal dgv As DataGridView)
For i As Integer = 0 To dgv.Columns.Count - 1dgvPedido.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortableNext
End Sub
Rem Procedimiento para llenar el comboboxPrivate Sub ListarCampos()
For i As Integer = 0 To dv.Table.Columns.Count - 1cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)Next
End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 33/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el evento Load del formulario codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select NumeroPedido,CodigoCliente,NumeroEmpleado,FormaEnvio,FechaEnvio,FechaEntrega,ImportePedido,
GastoEnvio From Pedidos", cn)
Dim ds As New DataSetda.Fill(ds, "Pedido")'Llenamos la vistadv = ds.Tables(0).DefaultView'Enlazamos el BindingSource con la vistabs.DataSource = dv'Llenamos la GrilladgvPedido.DataSource = bsListarCampos()QuitarOrdenacion(dgvPedido)
En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:
dv.Sort = cboCriterio.TextTipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name.ToStringtxtBuscar.Clear()
En el evento TextChanged del control txtBuscar codificar lo siguiente:
Dim pos As IntegerIf txtBuscar.Text <> "" ThenDim dr() As DataRow
If TipoDato = "Int16" OrElse TipoDato = "Int32" OrElse TipoDato = "Int64" OrElse TipoDato = "Decimal" Then
dr = dv.Table.Select(cboCriterio.Text & "=" & txtBuscar.Text)If dr.Length > 0 Thenpos = dv.Find(dr(0)(cboCriterio.Text))End If
ElseIf TipoDato = "String" Thendr = dv.Table.Select(cboCriterio.Text & " Like'" & txtBuscar.Text & "%'")If dr.Length > 0 Thenpos = dv.Find(dr(0)(cboCriterio.Text))End If
ElseIf TipoDato = "DateTime" ThenIf txtBuscar.Text.Length = 10 ThenIf IsDate(txtBuscar.Text) Thenpos = dv.Find(txtBuscar.Text)ElseMessageBox.Show("Ingrese Una Fecha Valida")End IfEnd If
ElseIf TipoDato = "Boolean" ThenIf txtBuscar.Text = "1" Or txtBuscar.Text = "0" Thendr = dv.Table.Select(cboCriterio.Text & "=" & txtBuscar.Text)pos = dv.Find(dr(0)(cboCriterio.Text))ElseMessageBox.Show("Ingrese uno o cero")txtBuscar.Clear()End IfEnd IfIf pos > -1 Then bs.Position = pos
End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 34/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el evento DoubleClick del control dgvPedido codificar lo siguiente:
'Creamos un FormularioDim frmDetalle As New Form'Modificamos sus propiedades del frmDetallesfrmDetalle.Text = "Detalles de Pedidos"frmDetalle.Width = 600frmDetalle.Height = 200frmDetalle.StartPosition = FormStartPosition.CenterScreen'Creamos una DataGridViewDim dgv As New DataGridView'Modificamos sus propiedades del dgvdgv.SelectionMode = DataGridViewSelectionMode.FullRowSelectdgv.ReadOnly = Truedgv.Dock = DockStyle.Fill'Declaramos una variable para capturar el codigoDim codigo As Integer = dgvPedido.CurrentRow.Cells(0).Value'Creamos una consulta
Dim da As New OleDbDataAdapter("Select * From [Detalles de Pedidos] Where NumeroPedido=" & codigo, cn)
Dim ds As New DataSet'LLenamos el DataSetda.Fill(ds, "Detalles")'Enlazamos el dataset con el dgvdgv.DataSource = ds.Tables(0)'Agregamos el dgv al Formulario frmDetallefrmDetalle.Controls.Add(dgv)'Mostramos el FormulariofrmDetalle.ShowDialog()
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 35/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIManejo de DataView con MS-Access
ObjetivoAl término de esta separata el alumno tendrá el conocimiento de:
Manejo de filtros con DataView
Filtros con DataView
Ejemplo 01:
Diseñar el siguiente formulario:
Modificar las siguientes propiedades de dgvEmpleados:
SelectionMode=FullRowSelectReadOnly=TrueAnchor = activar todos los bordes
Ahora lo que más nos gusta codificar:
En al ámbito de importaciones codificar lo siguiente:
Imports System.Data.OleDb
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 36/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el ámbito ah nivel de clase codificar lo siguiente:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")
Dim bs As New BindingSourceDim dv As DataView
En el evento Load del formulario codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select NumeroEmpleado,Apellidos,Nombres,IdCargo,Edad,FechaContratacion From Empleados", cn)
Dim ds As New DataSetda.Fill(ds, "Personal")dv = ds.Tables(0).DefaultViewbs.DataSource = dvdgvEmpleados.DataSource = dvLblTot.Text = dv.Table.Rows.Count
En el evento TextChanged del control txtFiltro codificar lo siguiente:
If txtFiltro.Text.Trim <> "" Thendv.RowFilter = "Apellidos Like'" & txtFiltro.Text & "%'"
Elsedv.RowFilter = ""
End IfLblTot.Text = dgvEmpleados.Rows.Count
Ah probar la aplicación.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 37/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 01:
Diseñar el siguiente formulario:
Modificar las siguientes propiedades de dgvProducto:
SelectionMode=FullRowSelectReadOnly=TrueAnchor = activar todos los bordes
Ahora lo que más nos gusta codificar:
En al ámbito de importaciones codificar lo siguiente:
Imports System.Data.OleDb
En el ámbito ah nivel de clase codificar lo siguiente:
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\Ventas.mdb")
Dim bs As New BindingSourceDim dv As DataView
Crear los siguientes procedimientos:
REM procedimiento para quitar la ordenación
Private Sub QuitarOrdenacion(ByVal dgv As DataGridView) For i As Integer = 0 To dgv.Columns.Count - 1 dgvProducto.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable NextEnd Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 38/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
REM procedimiento para listar los campos dentro del combobox cbocriterioPrivate Sub ListarCampos()
For i As Integer = 0 To dv.Table.Columns.Count - 1cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)
NextEnd Sub
En el evento Load del formulario codificar lo siguiente:
Dim da As New OleDbDataAdapter("Select CodigoProducto,NumeroProveedor,NombreProducto,IdCategoriaProducto,PrecioUnidad,UnidadesExistencia,
UnidadesPedidas From Productos", cn)Dim ds As New DataSetda.Fill(ds, "Productos")'Creando la vista de Productosdv = ds.Tables(0).DefaultView'Crear y Enlazar el BindingSourcebs.DataSource = dv'Ordenar la vista por Nombre para hacer busquedasdv.Sort = "CodigoProducto"'Enlazando el BindingSource al DataGridViewdgvProducto.DataSource = bsQuitarOrdenacion(dgvProducto)ListarCampos()
En el evento SelectedIndexChanged del control cbocriterio codificar lo siguiente:
REM ordeno segun el criterio y obtengo el tipo de datodv.Sort = cboCriterio.TextTipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name
En el evento TextChanged del control txtFiltro codificar lo siguiente:
If txtFiltro.Text.Trim <> "" ThenREM si el tipodato es numerico
If TipoDato = "Int32" Or TipoDato = "Int16" Or TipoDato = "Int64" Or TipoDato = "Decimal" Then
dv.RowFilter = cboCriterio.Text & "=" & txtFiltro.Text
ElseIf TipoDato = "String" Then 'si el tipo dato es Cadena
dv.RowFilter = cboCriterio.Text & " Like'" & txtFiltro.Text & "%'"
ElseIf TipoDato = "DateTime" Then 'si el tipo dato es FechaIf txtFiltro.Text > 10 Then
If IsDate(txtFiltro.Text) Thendv.RowFilter = cboCriterio.Text & "='" & txtFiltro.Text & "'"ElseMessageBox.Show("Ingrese una Fecha Valida", "Ingrese")End If
End IfEnd IfElse
dv.RowFilter = ""End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 39/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IITrabajar Forma Administrada
Objetivo:Al término de esta separa el alumno conocera:
Como trabajar en forma administrada
Potenciando nuestro adaptador de datosLa forma mas correcta de trabajar en forma desconectada es que nosotros mismos controlemos nuestros cambios a la base de datos, para esto el DataAdapter se le puede configurar, observemos primero el siguiente ejemplo.
El SqlDataApadter para administrar las modificaciones a la base de datos cuenta con comandos para definir, primero debemos configurar este comando e indicarle que tipo de modificación debe realizar; luego se le asigna al SqlDataAdapter con el comando especificó según la acción del comando.
La configuración del SqlCommand, varia al del interior en este tenemos que indicarle el tipo de dato y además el nombre del campo que se hace referencia.
SqlDataAdapter.SelectCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para seleccionar registros en el origen de datos.
Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.SelectCommand=SqlCommand
SqlDataAdapter.InsertCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para insertar nuevos registros en el origen de datos.
Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.InsertCommand=SqlCommand
SqlDataAdapter.DeletecommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para eliminar registros de un conjunto de datos.
Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.Deletecommand=SqlCommand
SqlDataAdapter.UpdateCommandObtiene o establece un procedimiento almacenado o una instrucción de Transact-SQL para actualizar las registros de la base de datos.
Sqlcommand([Procedimiento para la inserccion],[Conexion])sqlDataAdapter.UpdateCommand=SqlCommand
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 40/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IITrabajando en Forma Administrada
Objetivo:Al término de esta separata el participante conocerá:
Trabajar correctamente con el adaptador de datos en forma desconectado Uso del Dataset
Empecemos a desarrollar:
Abrir el SQL server y codificar lo siguiente:
use master go create database VentasPerugouse VentasPerugoCreate table Productos(CodPro char(8)Primary key,DesPro char(50),StockMin int,StockMax int,StockActual int,PrecVenta decimal(10,5))go
Insert into Productos Values('PR000001','Laptos',10,150,20,12.36)Insert into Productos Values('PR000002','Monitores',10,150,20,150.36)Insert into Productos Values('PR000003','Mouses',10,150,20,10.36)Insert into Productos Values('PR000004','Teclados',10,150,20,7.36)Go
/* Ejecutamos las lineas de codigo bloque por bloque?? */
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 41/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Crear un nuevo proyecto y diseñar la siguiente interfas:
Declarar las siguientes variables en el ámbito a nivel de clase.
Dim cn As New SqlConnection("User id=sa;Server=.;Database=VentasPeru;Integrated security=true")Dim ds As New DataSetDim da As New SqlDataAdapter
En el evento load del formulario colocaremos lo siguiente:
Try
cn.Open() Dim xComand As New SqlCommand("Select * From Productos", cn) With xComand .CommandType = CommandType.Text End With da.SelectCommand = xComand da.Fill(ds, "Productos") REM para la eliminacion xComand = New SqlCommand("Delete From Productos Where CodPro=@CodPro", cn) xComand.CommandType = CommandType.Text xComand.Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro") da.DeleteCommand = xComand
REM para la inserccion xComand = New SqlCommand("Insert into Productos(CodPro,DesPro,StockMin,StockMax,StockActual,PrecVenta)values(@CodPro,@DesPro,@StockMin,@StockMax,@StockActual,@PrecVenta)", cn)
With xComand .CommandType = CommandType.Text .Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro")
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 42/122Email:[email protected]
DgdProductos
I.E.S. CESCA(ADO.NET)
.Parameters.Add("@DesPro", SqlDbType.Char, 50, "DesPro") .Parameters.Add("@StockMin", SqlDbType.Int, 0, "StockMin") .Parameters.Add("@StockMax", SqlDbType.Int, 0, "StockMax") .Parameters.Add("@StockActual", SqlDbType.Int, 0, "StockActual") .Parameters.Add("@PrecVenta", SqlDbType.Decimal, 0.1, "PrecVenta") End With da.InsertCommand = xComand
REM para la Actualizacion xComand = New SqlCommand("Update Productos Set DesPro=@Despro,StockMin=@StockMin,StockMax=@StockMax,StockActual=@StockActual,PrecVenta=@PrecVenta Where CodPro=@CodPro", cn) With xComand .CommandType = CommandType.Text .Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro") .Parameters.Add("@DesPro", SqlDbType.Char, 50, "DesPro") .Parameters.Add("@StockMin", SqlDbType.Int, 0, "StockMin") .Parameters.Add("@StockMax", SqlDbType.Int, 0, "StockMax") .Parameters.Add("@StockActual", SqlDbType.Int, 0, "StockActual") .Parameters.Add("@PrecVenta", SqlDbType.Decimal, 0, "PrecVenta") End With da.UpdateCommand = xComand
dgdProductos.DataSource = ds.Tables(0)
Catch ex As Exception MessageBox.Show(ex.Message) End Try
En el botón modificar colocamos lo siguiente:
If ds.HasChanges Then da.Update(ds, "Productos") MessageBox.Show("Los canbios fueron realizados", _ "Mantenimiento Productos", MessageBoxButtons.OK, _ MessageBoxIcon.Information)End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 43/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo de Vistas AdministradosEjemplo1:Crear la BD y la tabla Productos:use master go create database VentasPerugouse VentasPerugoCreate table Productos(CodPro char(8)Primary key,DesPro char(50),StockMin int,StockMax int,StockActual int,PrecVenta decimal(10,5))goInsert into Productos Values('PR000001','Laptos',10,150,20,12.36)Insert into Productos Values('PR000002','Monitores',10,150,20,150.36)Insert into Productos Values('PR000003','Mouses',10,150,20,10.36)Insert into Productos Values('PR000004','Teclados',10,150,20,7.36)go--Select * From Productos
Crear un proyecto windows y diseñar la siguiente interfaz:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 44/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Recuerda si ves en control TABControl tiene 5 pestañas bien cada pestaña tiene un DataGridView si quieres ver el ejemplo esta junto con este ejemplo y lo chekeas o si no pasas la voz al profesor.
Sigamos:
Codificar lo que más nos gusta:
En el ámbito de importaciones Importar el NameSpace:
Imports System.Data.SqlClient
En el ámbito a nivel de clase declarar la cadena de conexión:
Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=12345678")
Dim da As New SqlDataAdapter("Select CodPro,DesPro,StockMin,StockMax,StockActual,PrecVenta From Productos", cn) Dim ds As New DataSet
En el evento Load del formulario codificar lo siguiente:
Tryda.Fill(ds, "Productos")DgdCliente.DataSource = ds.Tables(0)REM Vista SimpleDim dvVista As New DataViewWith dvVista.Table = ds.Tables(0).AllowDelete = False.AllowEdit = True.AllowNew = True.RowFilter = "".Sort = "CodPro Desc"End WithDgdfiltrado.DataSource = dvVista
REM Vista Original que no han sido ModificadoDim dvVistaOriginal = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.Unchanged)dgdNoModi.DataSource = dvVistaOriginalREM ModificadosDim dvModofi = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.CurrentRows)dgdModi.DataSource = dvModofi
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 45/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
REM Modificados OriginalesDim dvModoOri = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.ModifiedOriginal)dgdOriModi.DataSource = dvModoOriREM EliminadosDim dvEliminados = New DataView(ds.Tables(0), "", "CodPro Desc", DataViewRowState.Deleted)DgdEliminados.DataSource = dvEliminados
Catch ex As ExceptionMessageBox.Show(ex.Message)
End Try
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 46/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIManejo de BindingContext y DataBindings
ObjetivoAl término de esta separata el alumno tendrá el conocimiento de:
Conocer los conceptos de BindingContext y DataBindings Conocer métodos y propiedades
BindingContext
Propiedad de la clase form que representa el contexto de enlace a datos establecido en los controles del formulario, es decir, toda la información de enlaces establecida entre los controles y objetos proveedores de datos. Devuelve un objeto de tipo BindingManagerBase o administrador de base de enlace a datos.
Cada objeto que herede de la clase control puede tener un solo objeto BindingContext. Ese objeto BindingContext administra los objetos de BindingManagerBase para ese control y cualquier control que este incluido. Hay que utilizar BindingContext con el fin de crear o devolver BindingManagerBase para un objeto de datos utilizado por los controles con enlace a datos incluidos. Normalmente, se utiliza el objeto BindingContext de la clase form con el fin de devolver objetos BindingManagerBase para los controles con enlace a datos del formulario.
Si se utiliza un control contenedor, como Groupbox, panel, o tabcontrol, para incluir controles con enlace a datos, se puede crear un objeto BindingContext solo para ese control contenedor y sus controles. De este modo, cada parte de un formulario puede ser administrada por su propio objeto BindingMangerBase.
Ejemplo de cómo usarlo
me.BindingContext(<Dataset>,<nombre tabla>)
Este objeto es el que mantiene la posición actual en la lista de datos. Las dos propiedades mas importantes de los objetos de esta clase son:
Position: Devuelve o establece la fila actual (hay que tener en cuenta que la primera fila tiene indice 0)
Count: Devuelve el numero de filas existentes
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 47/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
DataBinding
Los controles que con regularidad se utilizan en aplicaciones Windows asi como en aplicaciones Web tienen una propiedad DataBinding, es necesario configurar la propiedad de cada control que contenga el enlace a los datos, luego para administrar esta se debe utilizar la propiedad BindingContext de la clase contenedora. Al usar el BindingContext obtiene el BindingManagerBase que mantiene sincronizados todos los controles enlazados al mismo origen de datos, se puede utilizar la propiedad position del BindingManagerBase para especificar el elemento actualmente seleccionado de una lista.
Sintaxis:
Control.DataBindings.Add(<Propiedad a utilizar>,<Origen de Datos tabla o Dataset>,<Campo a enlsar>)
Por ejemplo
Para enlazar una caja de texto con el campo NomDis de la tabla Distrito (DTDistrito) contenida en dataset previamente utilizo la siguiente instrucción.
Me.TxtDistrito.DataBindings.Add("Text", ds.tables(0), "NomDis")
Luego para administrar por ejemplo la posición actual o lo que es lo mismo el registro activo se utiliza la siguiente instrucción.
Me.BindingContext(ds.tables(0)).Position +=0
Note en la instrucción anterior que se utiliza la propiedad BindingContext del formulario, como lo dicho en las líneas de arriba, la propiedad position va a mantener sincronizados los controles enlazados al Dataset
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 48/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IITrabajo con bindingContext y DataBindings
Objetivo:
Implementar BindingContext y DataBinding en los controles del formulario Usar adecuadamente el desplazamiento de registros en un DataSet
Ejercicio:
Utilizar la base de datos almacén y crear el siguiente Store
Create proc Usp_Traer_ClienteasSelect C.CodClie,C.ApeClie,C.NomClie,C.DirClie,D.NomDis,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from Cliente Cinner join Distrito D on C.CodDis=D.CodDis
Crear un proyecto de tipo WindowsForm, con nombre DataBinding
Pasos
1.- Diseñar la siguiente Internas:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 49/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Codificar:
En el general del formulario.Imports System.Data.SqlClient
A nivel de clase:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=true")
Dim da As New SqlDataAdapter("Usp_Traer_Cliente", cn)Dim ds As New DataSet
REM procedimiento para mostrar registro activoPrivate Sub Registro(ByVal posicion As Integer) lblregistro.Text = "Registro " & posicion.ToString & " de " _ & Me.BindingContext.Item(ds.Tables(0)).Count.ToStringEnd Sub
En el load del formulario.
da.Fill(ds, "Cliente") txtCodClie.DataBindings.Add("Text", ds.Tables("Cliente"), "CodClie") txtApeClie.DataBindings.Add("Text", ds.Tables("Cliente"), "ApeClie") txtNomClie.DataBindings.Add("Text", ds.Tables(0), "NomClie") txtDireccion.DataBindings.Add("Text", ds.Tables("Cliente"), "DirClie") txtDistrito.DataBindings.Add("Text", ds.Tables("Cliente"), "NomDis") txtTelefono.DataBindings.Add("Text", ds.Tables("Cliente"), "TelClie") txtDNI.DataBindings.Add("Text", ds.Tables("Cliente"), "DniClie") txtEmail.DataBindings.Add("Text", ds.Tables("Cliente"), "EmaiClie") txtRUC.DataBindings.Add("Text", ds.Tables("Cliente"), "RucClie") dgdcliente.DataSource = ds.Tables(0) Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
En el evento Clic del botón “Primer” Me.BindingContext(Me.ds.Tables(0)).Position = 0 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
En el evento Clic del botón “Anterior” Me.BindingContext(Me.ds.Tables(0)).Position -= 1 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
En el evento Clic del botón “Siguiente” Me.BindingContext(Me.ds.Tables(0)).Position += 1 Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
En el evento clic del botón “Ultimo” Me.BindingContext(ds.Tables(0)).Position = ds.Tables(0).Rows.Count Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 50/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Propiedades principales del controlListBox y Combobox
Objetivo:Al término de esta separata el alumno Conocerá:
Conocer propiedades de enlace a datos. Uso del control ListBox y Combobox con una fuente de datos.
Listbox y ComboboxPropiedades:
DisplaymenverObtiene o establece la propiedad que se va a mostrar desde el origen de Datos
DataSourceObtiene o establece el origen de datos.
ValueMemberObtiene o establece la propiedad que se utilizara como valor real para los elementos del control.
SelectedValue Obtiene o establece el valor del control según la configuracion..
SelectedIndexObtiene o establece el indice que espesifica el elemento seleccionado.Ejemplo 01
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 51/122Email:[email protected]
TxtValor1 TxtValor2
I.E.S. CESCA(ADO.NET)
Usar la BD Almacen osea Restaurarla Ok!!!!
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET
Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds As New DataSet
Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM
En el evento Load Codificar lo siguiente:
TryREM Procedimiento para Listar DistritoREM Consulta a la tabla DistritoDim da As New SqlDataAdapter("Select CodDis,NomDis From Distrito", cn)REM espesifico el tipo de comandoda.SelectCommand.CommandType = CommandType.TextREM LLenado de datosda.Fill(ds, "Dis")REM Enlazando los datos con el ListBox y configurandoListBox1.DataSource = ds.Tables(0)ListBox1.DisplayMember = "NomDis"ListBox1.ValueMember = "CodDis"
Rem Listado del comboboxDim da2 As New SqlDataAdapter("Select CodClie,(Rtrim(ApeClie) + ','+NomClie) as NomCom From Cliente", cn)da2.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda2.Fill(dt)ComboBox1.DataSource = dtComboBox1.DisplayMember = "NomCom"ComboBox1.ValueMember = "CodClie"
Catch ex As ExceptionMessageBox.Show(ex.Message)
End Try
En el evento SelectedIndexChanged del ListBox codificar lo siguiente:
TrytxtValor1.Text = ListBox1.SelectedValue
Catch ex As ExceptionEnd Try
Has lo mismo para el control Combobox Ok
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 52/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Consultas en ambiente desconectado
Objetivo:Al término de esta separata el alumno Conocerá:
Implementar sentencias SQL Uso del objeto Dataset
Ejemplo 01
Diseñar la siguiente interfaz:
Usar la BD Almacen osea Restaurarla Ok!!!!
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET
Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds As New DataSet
Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 53/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Crear los siguientes procedimientos:
Private Sub ListarCliente()Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis,TelClie,DniClie, EmaiClie,RucClie From Cliente", cn)
da.SelectCommand.CommandType = CommandType.Textda.Fill(ds, "Clientes")DataGridView1.DataSource = ds.Tables(0)End Sub
Private Sub ListarClientexCodigo()Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis,TelClie,DniClie, EmaiClie,RucClie From Cliente Where CodClie='" & Me.TextBox1.Text & "'", cn)
da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dt
End Sub
En el evento Load del formulario codificar lo siguiente:
TryListarCliente()
Catch ex As Exception
End Try
En el evento Click del botón Buscar
ListarClientexCodigo()
Por ultimo ejecutar!!!
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 54/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 02
Usar la BD Almacen osea Restaurarla Ok!!!!
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET
Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")
Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM
Crear los siguientes procedimientos:
Rem Procedimiento para Listar Articulos
Private Sub ListarArticulo()Dim da As New SqlDataAdapter("SelectCodArti,DesArti,StockMin,StockMax,StockActual,PrecVenta,CodPer,Eliminado From Articulo", cn)da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSetda.Fill(ds, "Clientes")DataGridView1.DataSource = ds.Tables(0)End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 55/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Rem Procedimiento para Filtrar Los Articulos Utilizando el operador Like
Private Sub ListarArticuloxNombre()Dim da As New SqlDataAdapter("Select CodArti,DesArti,StockMin,StockMax,StockActual,PrecVenta,CodPer,Eliminado From Articulo Where DesArti Like '" & Me.TextBox1.Text & "%'", cn)da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dtEnd Sub
En el evento TextChanged:
If TextBox1.Text.Trim = "" Then ListarArticulo()Else ListarArticuloxNombre()End If
En el evento Click del boton “Buscar” :
ListarArticuloxNombre()
En el evento Load del Formulario:
Try ListarArticulo()Catch ex As Exception MessageBox.Show(ex.Message)End Try
Por ultimo ejecutar!!!
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 56/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 03
Usar la BD Almacen osea Restaurarla Ok!!!!
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase crear la cadena de conexión y declarar un DATASET
Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Almacen;Password=")Dim ds as New DataSet
Nota:Chicos de Ate-Vitarte Cambiar la cadena de conexión de = Manera SJM
Crear los siguientes procedimientos:
Rem metodo para listar los distritos
Private Sub ListarDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as Nom From Distrito", cn)
REM espesifico el tipo de comandoda.SelectCommand.CommandType = CommandType.TextREM LLenado de datosda.Fill(ds, "Dis")REM Enlazando los datos con el ListBox y configurandoComboBox1.DataSource = ds.Tables(0)ComboBox1.DisplayMember = "Nom"ComboBox1.ValueMember = "CodDis"End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 57/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Private Sub GetClientexDistrito()Dim da As New SqlDataAdapter("Select CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie From Cliente Where CodDis='" & ComboBox1.SelectedValue & "'", cn)da.SelectCommand.CommandType = CommandType.TextDim dt As New DataTableda.Fill(dt)DataGridView1.DataSource = dtEnd Sub
En el evento Load del formulario:
Try ListarDistrito()Catch ex As Exception MessageBox.Show(ex.Message)End Try
En el evento SelectedIndexChanged del combobox:
Try GetClientexDistrito()Catch ex As Exception REM Throw exEnd Try
Por ultimo ejecutar!!!
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 58/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Propuesto:
1) Cuando seleccione una opción: por ejemplo si selecciono la opción clase me tendrá que llenar los datos de la tabla clase en el combobox y lo mismo para las otras opciones dependiendo de la tabla.
2) Me permitirá realizar la consulta de la tabla Articulo en la grilla según mi opción seleccionado.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 59/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Consultas en ambiente desconectado
Objetivo:Al término de esta separata el alumno Conocerá:
Implementar sentencias SQL Uso del objeto Dataset
Ejemplo 1:
Crear la la Siguiente BD en SQL:
Create Database VentasGoUse ventasgoCreate table Usuarios(NomUsuario Char(15),Clave Char(15),Nivel Char(30),FechaIngreso datetime,FechaSalida datetime,Activo char(2))Go--Ingresamos datos a la tabla UsuariosInsert into Usuarios(NomUsuario,Clave,Nivel,FechaIngreso,FechaSalida,Activo)values('xD148','1234','Admistrador',getdate(),getdate(),'Si')GoInsert into Usuarios(NomUsuario,Clave,Nivel,FechaIngreso,FechaSalida,Activo)values('Alejandro','killbill','Almacenero',getdate(),getdate(),'Si')Go
Luego en VS.NETCrear la siguiente Interfaz:
Modificar la propiedad: PasswordChar = *
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 60/122Email:[email protected]
txtUsuario
txtPassword
btnIngresar
I.E.S. CESCA(ADO.NET)
En el evento a nivel de clase crear la cadena de conexión:
Dim cn As New SqlConnection("User id=Sa;Server=.;Database=Ventas;Password=1234")
En el evento Load
btningresar.Enabled = False
Nota: Cambiar la cadena de conexión chicos de ATE-Vitarte y San juan de Miraflores.
“No te olvides de importar el namespace”En el evento TextChanged del control txtusuario codificar lo siguiente:btningresar.Enabled = txtUsuario.Text <> "" And txtPassword.Text <> ""
En el evento TextChanged del control txtPassword codificar lo siguiente:btningresar.Enabled = txtUsuario.Text <> "" And txtPassword.Text <> ""
En el evento Click del boton ingresar codificar lo siguiente:
Dim da As New SqlDataAdapter("Select NomUsuario,Clave From Usuarios Where NomUsuario='" & txtUsuario.Text.Trim() & "'" & " and " & _"Clave='" & txtPassword.Text.Trim() & "'", cn)
Dim dt As New DataTableda.Fill(dt)Dim Cantusu As Integer = dt.Rows.Count - 1If Cantusu = 0 ThenMessageBox.Show("Bienvenido al sistema", "Ingreso", MessageBoxButtons.OK, MessageBoxIcon.Information)
ElseMessageBox.Show("Error Usted no es usuario del sistema", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)End IfResultado:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 61/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Propuesto:
Utilizar la BD Ventas o la BD Almacen:
En la BD almacen si haces una consulta a la tabla usuario te daras cuenta que los campos son casi los mismos y tienes algunos registros ahora de ti depende cual BD utilizar.
1) Se listaran en el combobox todos los usuarios.2) Se validara en la tercera opción fallida me cerrara el formulario Login.3) Validar el Login4) Si el usuario es correcto me tendra que llamar a un formulario padre MDI
Resultado:
“Que la fuerza .NET te acompañe”
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 62/122Email:[email protected]
El usuario se mostrara en un StatusStrip
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IILaboratorio del objeto Dataview
Objetivo:Al término de esta separata el participante conocerá:
Manejar filtros a trabes DataView
DataViewPara este ejemplo utilizare la base de datos Almacen.
1.-) Crear los Siguientes Stored Procedure
--USP para traer los distritos
create proc usp_Traer_disasselect CodDis,Rtrim(NomDis) as Distrito from Distritogo--USP para traer los ClientesCreate proc Usp_Traer_ClienteasSelect C.CodClie,C.ApeClie,C.NomClie,C.DirClie,Rtrim(D.NomDis) as Distrito,C.TelClie,C.DniClie,C.EmaiClie,C.RucClie from Cliente Cinner join Distrito D on C.CodDis=D.CodDisgo2.-)
Diseñar el siguiente Formulario
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 63/122Email:[email protected]
cboDistrito dgdClientes
I.E.S. CESCA(ADO.NET)
3.-) importar el namespace SQLClient
Imports System.Data.SqlClient
4.-) En el ámbito a nivel de clase codificar lo siguiente:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=SSPI") Dim da As SqlDataAdapter Dim ds As New DataSet Dim dv As New DataView
5.-) Enel evento load codificar lo siguiente:
REM metodo para traer los Distritos
da = New SqlDataAdapter("usp_Traer_dis", cn)da.SelectCommand.CommandType = CommandType.StoredProcedureda.Fill(ds, "Distrito")cbodistrito.DataSource = ds.Tables(0)cbodistrito.DisplayMember = "Distrito"cbodistrito.ValueMember = "CodDis"REM metodo para traer los clientesda = New SqlDataAdapter("Usp_Traer_Cliente", cn)da.SelectCommand.CommandType = CommandType.StoredProcedureda.Fill(ds, "Clientes")dv = ds.Tables("Clientes").DefaultViewdgdclientes.DataSource = ds.Tables("Clientes")
6.-) en el Evento SelectedIndexChanged codificar lo siguiente:
dv.RowFilter = "Distrito like'" + Me.cboDistrito.Text + "%'"
Por último probar la aplicación F5
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 64/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIUsando el objeto DataView
Usar la base de datos Almacén:
Crear el procedimiento almacenado:
create proc usp_Traer_Articulosasselect a.CodArti,rtrim(a.DesArti)as Articulo,a.StockMin,a.StockMax,a.StockActual,u.DesUnidad,c.DesClase,m.DesModelo,Ma.DesMarca,a.PrecVenta,rtrim(P.ApePer)+ ' ' +(NomPer) as Nombre from Articulo ainner join [Unidad de Medida] u on u.CodUnidad=a.CodUnidadinner join Clase c on c.CodClase=a.CodClaseinner join Modelo m on m.CodModelo=a.CodModeloinner join Marca Ma on Ma.CodMarca=a.CodMarcainner join Personal P on p.CodPer=a.CodPer
2.-) Diseñar la siguiente interfas:
çImportar el namespaceImports System.Data.SqlClient
En el ámbito a nivel da clase codificar lo siguiente:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated security=SSPI")
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 65/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Dim da As SqlDataAdapterDim ds As New DataSetDim dv As New DataView
Crear un procedimiento de tipo sub para llenar el combo
Sub llenarcombo() ComboBox1.Items.Add("Codigo") ComboBox1.Items.Add("Descripcion") ComboBox1.Items.Add("Marca") ComboBox1.Items.Add("Clase") ComboBox1.Items.Add("Modelo") End Sub
En el Evento load del formulario Codificar lo siguiente:
REM llenamos el combo da = New SqlDataAdapter("usp_Traer_Articulos", cn) da.Fill(ds, "Articulos") dv = ds.Tables(0).DefaultView DataGridView1.DataSource = ds.Tables(0) REM llamamos el procedimiento llenarcombo()
En el evento TextChanged de la caja de texto codificar lo siguiente: If ComboBox1.Text = "" Then MessageBox.Show("Seleccione una opcion") TextBox1.Clear() Else If ComboBox1.Text = "Codido" Then dv.RowFilter = "CodArti like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Descripcion" Then dv.RowFilter = "Articulo like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Marca" Then dv.RowFilter = "DesMarca like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Clase" Then dv.RowFilter = "DesClase like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Modelo" Then dv.RowFilter = "DesModelo like'" & Me.TextBox1.Text & "%'" ElseIf ComboBox1.Text = "Codigo" Then dv.RowFilter = "CodArti like'" & Me.TextBox1.Text & "%'" End If End If
En el evento SelectedIndexChanged del control conbobox codificar lo siguiente:
Label3.Text = "Ingrese" & " " & Me.ComboBox1.TextTextBox1.Clear()
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 66/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Visual Basic .NET IIEstudiando el Objeto SqlDataReader
Objetivo:Al término de esta separata el participante conocerá:
El paradigma de la conexión. Uso del objeto DataReader y sus diferencias.
El paradigma de la conexión
Cuando abordamos un proyecto de acceso a fuentes de datos, siempre nos encontramos con una duda existencial.¿Debemos crear una conexión con la base de datos al principio de nuestra aplicación y cerrarla cuando la aplicación se cierre?, ¿o debemos crear una conexión con la base de datos sólo cuando vayamos a trabajar con la fuente de datos?. ¿Y si estamos trabajando continuamente con una fuente de datos?, ¿cómo penalizarían todas estas acciones?.
Es difícil de asumir que acción tomar en cada caso, y es que dependiendo de lo que vayamos a realizar, a veces es más efectiva una acción que otra, y en otras ocasiones, no está del todo claro, ya que no existe en sí una regla clara que especifique qué acción tomar en un momento dado.Lo que sí está claro es que el modelo de datos de ADO.NET que hemos visto, quedaría resumido en cuanto a la conectividad de la manera en la que se representa en la siguiente imagen:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 67/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas y bases de datos de una determinada fuente de datos.
De esta manera, podemos trabajar con las aplicaciones estando desconectados de la fuente de datos.Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a ella.
El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con fuentes de datos conectadas.Por otro lado, el objeto DataReader tiene algunas particularidades que conviene conocer y que veremos a continuación.
Conociendo el objeto DataReader
El objeto DataReader nos permite como hemos indicado anteriormente, establecer una conexión con una fuente de datos y trabajar con esta fuente de datos sin desconectarnos de ella, sin embargo, hay diferentes cualidades y particularidades que conviene conocer. DataReader es de solo lectura
Lo que hemos dicho anteriormente, requiere sin embargo, que esta conexión se establezca en un modo de sólo lectura, al contrario de lo que se puede hacer con el objeto DataSet, con el que podemos interactuar con la fuente de datos en modo lectura y modo escritura. DataReader se maneja en una sola dirección
El objeto DataReader sólo permite que nos desplacemos por los datos en una sola dirección, sin vuelta atrás.Por el contrario, el objeto DataSet nos permite movernos por los registros para adelante y para atrás.Además, sólo podemos utilizar el objeto DataReader con conexiones establecidas en una sentencia SQL por ejemplo, pero no podemos variar esta.Para hacerlo, debemos entonces modificar la conexión con el comando establecido. DataReader es rápido
Debido a su naturaleza y características, este objeto es bastante rápido a la hora de trabajar con datos.Como es lógico, consume además menos memoria y recursos que un objeto DataSet por ejemplo.Sin embargo, dependiendo de las necesidades con las que nos encontremos, puede que este método de acceso y trabajo no sea el más idóneo. Analizando el flujo de trabajo de DataReader
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 68/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Cuando trabajamos con fuentes de datos conectadas, trabajaremos con el objeto DataReader.Para trabajar con este objeto, utilizaremos los objetos siguientes del proveedor de acceso a datos: ● Connection ● Command ● DataReader
Un resumen gráfico de esto es lo que podemos ver en la Imagen.
Usando la Clase SqlDataReaderObjetivo:Conocer el uso fundamental del objeto SqlDataReader
Ejemplo 01:Para este ejemplo utilizaremos la BD almacen:
En el formulario agregar un DataGridView.
Lo que más nos gusta codificar:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 69/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Dar doble click en el formulario:
En el ámbito de importaciones Importar el NameSpace:
Imports System.Data.SqlClient
En el anbito a nivel de clase declarar la cadena de conexión:
Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=1234")
En el evento Load del Formulario Codificar lo siguiente:
REM Creamos las ColumnasDgdCliente.Columns.Add("Codigo", "Codigo")DgdCliente.Columns.Add("Apellido", "Apellido")DgdCliente.Columns.Add("Nombre", "Nombre")DgdCliente.Columns.Add("Direccion", "Direccion")REM Redimencionamos las ColumnasDgdCliente.Columns(0).Width = 80DgdCliente.Columns(1).Width = 130DgdCliente.Columns(2).Width = 140DgdCliente.Columns(3).Width = 230REM Creamos nuestra consultaDim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie From Cliente", cn)
cmd.CommandType = CommandType.TextIf cn.State <> ConnectionState.Open Then cn.Open()End IfREM ejecutamos el comando ExecuteReaderDim dr As SqlDataReader = cmd.ExecuteReaderDim i As Integer = 0REM Si existen datos en el DataReader While dr.Read DgdCliente.Rows.Add() DgdCliente.Rows(i).Cells(0).Value = dr.GetValue(0) DgdCliente.Rows(i).Cells(1).Value = dr.GetValue(1) DgdCliente.Rows(i).Cells(2).Value = dr.GetValue(2) DgdCliente.Rows(i).Cells(3).Value = dr.GetValue(3) i += 1 End While REM cerramos el DR dr.Close() REM Cerramos la conexion cn.Close()Ejemplo 02
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 70/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Utilizar la BD Almacen.
Crear un nuevo proyecto en VS.NET y diseñar la siguiente interfaz:
Haber codificar lo que más nos gusta:
En el ámbito de importaciones Importar el NameSpace:
Imports System.Data.SqlClient
En el anbito a nivel de clase declarar la cadena de conexión:
Dim cn As New SqlConnection("User id=sa;Server=User-PC\Admin;Database=Almacen;Password=1234")
En el ámbito general crear los siguientes procedimientos:
Private Sub ListarDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as Distrito
From Distrito", cn)da.SelectCommand.CommandType = CommandType.Text
Dim dt As New DataTable da.Fill(dt) ComboBox1.DataSource = dt ComboBox1.DisplayMember = "Distrito" ComboBox1.ValueMember = "CodDis" End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 71/122Email:[email protected]
Control:ListView
I.E.S. CESCA(ADO.NET)
Private Sub ListarCliente() Dim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie
From Cliente", cn) cmd.CommandType = CommandType.Text If cn.State <> ConnectionState.Open Then cn.Open() End If Dim dr As SqlDataReader = cmd.ExecuteReader While dr.Read Dim List As New ListViewItem(dr(0).ToString()) List.SubItems.Add(dr(1).ToString()) List.SubItems.Add(dr(2).ToString()) List.SubItems.Add(dr(3).ToString()) LstClientes.Items.Add(List) End While dr.Close() cn.Close() End Sub
En el evento Load del Formulario invocar los métodos creados:
LstClientes.View = View.DetailsLstClientes.GridLines = TrueREM Creamos las Columnas en ListViewLstClientes.Columns.Add("Codigo", "Codigo", 80)LstClientes.Columns.Add("Nombre", "Nombre", 120)LstClientes.Columns.Add("Apellido", "Apellido", 140)LstClientes.Columns.Add("Direccion", "Direccion", 199)ListarDistrito()ListarCliente()
En el evento SelectedIndexChanged del combobox1 codificar lo siguiente:
Dim cmd As New SqlCommand("Select CodClie,ApeClie,NomClie,DirClie From Cliente where CodDis=@CodDis", cn)
cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodDis", ComboBox1.SelectedValue) If cn.State <> ConnectionState.Open Then cn.Open() End If Dim dr As SqlDataReader = cmd.ExecuteReader LstClientes.Items.Clear() While dr.Read Dim List As New ListViewItem(dr(0).ToString())
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 72/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
List.SubItems.Add(dr(1).ToString()) List.SubItems.Add(dr(2).ToString()) List.SubItems.Add(dr(3).ToString()) LstClientes.Items.Add(List) End While dr.Close() cn.Close() Catch ex As Exception
End Try
Propuesto:
Cuando seleccione una opción ejemplo clase me mostrara el combo la lista de clases y al seleccionar un item del combo me permitirá filtrar en la grilla, Lo mismo para marca y modelo.
Nota: Implemente el procedimiento de un entorno conectado para filtrar sobre la grilla.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 73/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Creando Variables dentro de una Instrucción SQLObjetivo:Al término de esta separa el alumno conocerá:
Crear variable dentro de una instrucción sql Funciones de tipo Sub y Function Manejar las sentencias Insert, Update, Delete y Select
Restaurar la BD Almacen
Ejemplo 01:
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase codificar lo siguiente:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")
Crear el siguiente procedimiento:
Private Sub GetDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as NomDis From Distrito", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) CboDistrito.DataSource = dt CboDistrito.DisplayMember = "NomDis" CboDistrito.ValueMember = "CodDis"End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 74/122Email:[email protected]
cboDistrito
dgdCliente
I.E.S. CESCA(ADO.NET)
En el botón buscar codificar lo siguiente:Dim da As New SqlDataAdapter("Select CodClie,ApeClie,NomClie,DirClie,CodDis From Cliente Where CodDis=@CodDis", cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodDis", CboDistrito.SelectedValue) Dim dt As New DataTable da.Fill(dt) dgdCliente.DataSource = dt
Ejemplo 02:
Importar el NameSpace
Imports System.Data.SqlClient
En el anbito a nivel de clase codificar lo siguiente:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")
Crear los siguientes procedimientos:Private Sub GetLLenarCombo()Dim da As New SqlDataAdapter("Select CodClie,(rtrim(ApeClie)+ ','+Rtrim(NomClie)) as NomCom From Cliente", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) cboCliente.DataSource = dt cboCliente.DisplayMember = "NomCom" cboCliente.ValueMember = "CodClie"End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 75/122Email:[email protected]
dgdCliente
I.E.S. CESCA(ADO.NET)
Private Sub GetLlenarCajas(ByVal Codigo As String)Dim da As New SqlDataAdapter("SelectCodClie,Nomclie,ApeClie,DirClie,CodDis,TelClie,RucClie,EmaiClie From Cliente Where CodClie=@CodClie", cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodClie", Codigo) Dim dt As New DataTable da.Fill(dt) txtCodClie.Text = dt.Rows(0)(0) txtNomClie.Text = dt.Rows(0)(1) txtApeClie.Text = dt.Rows(0)(2) txtDirClie.Text = dt.Rows(0)(3) txtCodDis.Text = dt.Rows(0)(4) txtTelClie.Text = dt.Rows(0)(5) txtRucClie.Text = dt.Rows(0)(6) txtemail.Text = dt.Rows(0)(7)End Sub
Donde:
dt.Rows(0)(0) ó dt.Rows(0)(“CodClie”)
En el botón “Buscar” evento click codificar lo siguiente:
Dim codigo As String codigo = InputBox("Ingrese codigo", "INGRESE") GetLlenarCajas(codigo)
En el Combobox evento SelectedIndexChanged:
TryGetLlenarCajas(cboCliente.SelectedValue)Catch ex As Exception
End Try
Terminar el código necesario para los controles de desplazamiento:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 76/122Email:[email protected]
Columna
Fila
Columna
I.E.S. CESCA(ADO.NET)
Ejemplo 03:
Importar el NameSpace
Imports System.Data.SqlClient
En el ámbito a nivel de clase codificar lo siguiente:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")
Crear los siguientes procedimientos:
Rem Listar ClasePrivate Sub GetClase()Dim da As New SqlDataAdapter("Select CodClase,Rtrim(DesClase)as DesClase From Clase", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "DesClase" Cboopcion.ValueMember = "CodClase" End Sub
Rem Listar Marca
Private Sub GetMarca()Dim da As New SqlDataAdapter("Select CodMarca,Rtrim(DesMarca)as DesMarca From Marca", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "DesMarca" Cboopcion.ValueMember = "CodMarca"
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 77/122Email:[email protected]
rbtClase rbtMarca rbtPersonal
dgdArticulos
I.E.S. CESCA(ADO.NET)
End SubRem Listar Personal
Private Sub GetPersonal()Dim da As New SqlDataAdapter("Select CodPer,Rtrim(NomPer)+','+ Rtrim(ApePer)as NomCom From Personal", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) Cboopcion.DataSource = dt Cboopcion.DisplayMember = "NomCom" Cboopcion.ValueMember = "CodPer"End Sub
En el evento CheckedChanged del control rbtClase:
If rbtClase.Checked = True ThenGetClase()
ElseCboopcion.DataSource = Nothing
End If
En el evento CheckedChanged del control rbtMarca:
If RbtMarca.Checked = True ThenGetMarca()
ElseCboopcion.DataSource = Nothing
End If
En el evento CheckedChanged del control rbtPersonal:
If rbtPersonal.Checked = True ThenGetPersonal()
ElseCboopcion.DataSource = Nothing
End If
En el evento SelectedIndexChanged del control Combobox:
TryIf rbtClase.Checked = True ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodClase=@CodClase", cn)
da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClase", Cboopcion.SelectedValue)Dim dt As New DataTableda.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.Count
ElseIf RbtMarca.Checked = True ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodMarca=@CodMArca", cn)
da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodMarca", Cboopcion.SelectedValue)Dim dt As New DataTable
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 78/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
da.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.Count
ElseIf rbtPersonal.Checked ThenDim da As New SqlDataAdapter("Select * From Articulo Where CodPer=@CodPer", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodPer", Cboopcion.SelectedValue)Dim dt As New DataTableda.Fill(dt)dgdArticulos.DataSource = dtlblfilas.Text = dt.Rows.CountEnd If
Catch ex As Exception
End Try
Ejemplo 04:
Diseñar la siguiente interfaz:
Importar el NameSpace
Imports System.Data.SqlClient
En el ámbito a nivel de clase codificar lo siguiente:Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")Dim condi As String
Crear Los siguientes procedimientos:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 79/122Email:[email protected]
BtnEliminar
BtnConsultar BtnCancelar BtnSalirBtnnuevo
BtnGuardar
Btnmodificar
I.E.S. CESCA(ADO.NET)
Rem procedimiento para Limpiar los controles textbox y comboboxPrivate Sub Limpiar() For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If NextEnd Sub
Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis:Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean) btnNuevo.Enabled = nuevo BtnGuardar.Enabled = Guardar btnModificar.Enabled = modificar btnConsultar.Enabled = Consultar btnCancelar.Enabled = Cancelar btnEliminar.Enabled = eliminar btnSalir.Enabled = salir End Sub
Rem procedimiento para habilitar o deshabilitar los controlesPrivate Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Sub
Rem procedimiento para Listar los distritosPrivate Sub GetDistrito()Dim da As New SqlDataAdapter("Select CodDis,Rtrim(NomDis) as NomDis From Distrito", cn) da.SelectCommand.CommandType = CommandType.Text Dim dt As New DataTable da.Fill(dt) CboDistrito.DataSource = dt CboDistrito.DisplayMember = "NomDis" CboDistrito.ValueMember = "CodDis"End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 80/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el evento Load del formulario:Try
GetDistrito()Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)
Catch ex As Exception
End Try
En el botón nuevo evento click:
condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)txtCodClie.ReadOnly = FalsetxtCodClie.Focus()
En el botón Modificar evento click:
condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodClie.ReadOnly = TruetxtNomClie.Focus()
En el botón guardar evento click:
If condi = "N" ThenDim cmd As New SqlCommand("Insert into Cliente(CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie,DniClie,RucClie,EmaiClie)Values(@Codclie,@NomClie,@ApeClie,@DirClie,@CodDis,@TelClie,@Dniclie,@Rucclie,@EmaiClie)", cn)cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text.Trim)cmd.Parameters.AddWithValue("@NomClie", txtNomClie.Text.Trim)cmd.Parameters.AddWithValue("@ApeClie", txtApeClie.Text.Trim)cmd.Parameters.AddWithValue("@DirClie", txtDirClie.Text.Trim)cmd.Parameters.AddWithValue("@CodDis", cboDistrito.SelectedValue)cmd.Parameters.AddWithValue("@TelClie", txtTelClie.Text.Trim)cmd.Parameters.AddWithValue("@DniClie", txtDni.Text.Trim)cmd.Parameters.AddWithValue("@RucClie", txtRucClie.Text.Trim)cmd.Parameters.AddWithValue("@EmaiClie", txtemail.Text.Trim)cn.Open()cmd.ExecuteNonQuery()cn.Close()
MessageBox.Show("Registro Almacenado Correctamente", "Registro Guardado", MessageBoxButtons.OK, MessageBoxIcon.Information)
habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)
ElseIf condi = "M" ThenDim cmd As New SqlCommand("Update Cliente Set NomClie=@NomClie,ApeClie=@ApeClie,DirClie=@DirClie,CodDis=@CodDis,TelClie=@TelClie,DniClie=@DniClie,RucClie=@RucClie,EmaiClie=@Emaiclie Where CodClie=@CodClie", cn)cmd.CommandType = CommandType.Text
cmd.CommandType = CommandType.Text
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 81/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text.Trim)cmd.Parameters.AddWithValue("@NomClie", txtNomClie.Text.Trim)cmd.Parameters.AddWithValue("@ApeClie", txtApeClie.Text.Trim)cmd.Parameters.AddWithValue("@DirClie", txtDirClie.Text.Trim)cmd.Parameters.AddWithValue("@CodDis", cboDistrito.SelectedValue)cmd.Parameters.AddWithValue("@TelClie", txtTelClie.Text.Trim)cmd.Parameters.AddWithValue("@DniClie", txtDni.Text.Trim)cmd.Parameters.AddWithValue("@RucClie", txtRucClie.Text.Trim)cmd.Parameters.AddWithValue("@EmaiClie", txtemail.Text.Trim)cn.Open()cmd.ExecuteNonQuery()cn.Close()
MessageBox.Show("Registro Actualizado Correctamente", "Registro Actualizado", MessageBoxButtons.OK, MessageBoxIcon.Information)
habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)
End If
En el botón Consultar evento click:
TryDim codigo As Stringcodigo = InputBox("Ingrese Codigo Cliente", " Ingrese Codigo a BUSCAR")Dim da As New SqlDataAdapter("Select CodClie,NomClie,ApeClie,DirClie,CodDis,TelClie,DniClie,RucClie,EmaiClie From Cliente Where CodClie=@CodClie", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClie", codigo)Dim dt As New DataTableda.Fill(dt)txtCodClie.Text = dt.Rows(0)(0).ToString.TrimtxtNomClie.Text = dt.Rows(0)(1).ToString.TrimtxtApeClie.Text = dt.Rows(0)(2).ToString.TrimtxtDirClie.Text = dt.Rows(0)(3).ToString.TrimcboDistrito.SelectedValue = dt.Rows(0)(4)txtTelClie.Text = dt.Rows(0)(5).ToString.TrimtxtDni.Text = dt.Rows(0)("DniClie").ToString.TrimtxtRucClie.Text = dt.Rows(0)(7).ToString.Trimtxtemail.Text = dt.Rows(0)(8).ToString.Trimhabilitar(0, 0, 1, 0, 1, 1, 0)HabilitarCajas(False)txtCodClie.ReadOnly = True
Catch ex As ExceptionMessageBox.Show("Error el codigo ingresado no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)End Try
En el botón Eliminar evento click:
TryDim cmd As New SqlCommand("Delete From Cliente Where CodClie=@CodClie", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text)cn.Open()cmd.ExecuteNonQuery()cn.Close()
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 82/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
MessageBox.Show("Registro Eliminado", "Eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)Catch ex As ExceptionEnd Try
En el botón Cancelar evento click:
Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)
En el botón Salir evento click:
If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Close()
End If
Hacer lo mismo pero con la tabla Personal.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 83/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Clase SqlCommandObjetivo:Al término de esta separa el alumno conocerá:
Conocer sus métodos Crear Funciones de tipo Sub y function Diferencias de ExecuteNonQuery y ExecuteScalar
Representa un procedimiento almacenado o una instrucción de Transact-SQL que se ejecuta en una base de datos de SQL Server. Esta clase no se puede heredar.
Sqlcommand proporciona los siguientes Metodos de ejecución de comandos en una base de datos de SQL-Server.
CommandText Obtiene o establece el procedimiento almacenado o la Instrucción
SQL que se ejecutara en el origen de datos de acuerdo a la
conexión establecida.
Connection Obtiene o establece la conexión SqlConnection asociada al
comando, que utiliza esta instancia de SqlCommand.
CommandType Obtiene o Establece el tipo de comando es decir un
procedimiento Almacenado o una instrucción SQL
ExecuteReader Ejecuta comandos que devuelven filas. Para obtener un mayor
rendimiento, ExecuteReader invoca a los comandos mediante el
procedimiento almacenado en el sistema sp_executesql de
Transact-SQL. Por consiguiente, ExecuteReader puede no tener
el efecto deseado si se utiliza para ejecutar comandos como las
instrucciones SET de Transact-SQL.
ExecuteNonQu
ery
Ejecuta comandos como instrucciones INSERT, DELETE, UPDATE y
SET de Transact-SQL.
ExecuteScalar Recupera un único valor (por ejemplo, un valor agregado) de una
base de datos.
Asimismo el objeto Command realiza una tarea simple de ejecución de instrucciones SQL en el lado del servidor, el cual necesita dos parámetros tanto la instrucción SQL como la conexión a donde debe apuntar.
Sintaxis:
Dim cmd as new SqlCommand(“Instrucción SQL Ó Procedimiento Almacenado”,Conexion)
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 84/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Una vez configurado el Command indicándole la instrucción a realizar y la conexión donde apuntar, la ejecución de esta instrucción se realiza con el método.
cmd.ExecuteNonQuery
El cual no me duevelve ningún tipo de resultado. Solo se dedica a realizar la instrucción en la base de datos donde apunta la conexión; para la devolución de resultados podríamos utilizar ExecuteReader, el cual devuelve devuelve la consulta en forma de un DataReader.
Ejemplo de SqlDataReader con el método ExecuteReader.
Public Sub ReadOrderData(ByVal connectionString As String) Dim queryString As String = _ "SELECT CODCLIE,NOMCLIE FROM CLIENTE;" Using connection As New SqlConnection(connectionString) Dim command As New SqlCommand(queryString, connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() Try While reader.Read() Console.WriteLine(String.Format("{0}, {1}", _ reader(0), reader(1))) End While Finally ' Always call Close when done reading. reader.Close() End Try End UsingEnd Sub
Cuando usar ExecuteNonQuery o ExecuteScalar
En este artículo veremos cómo y cuándo usar el método ExecuteNonQuery o ExecuteScalar de un comando (o clase) derivado de la clase abstracta (no instanciable) DbCommand si trabajas con Visual Studio 2008 o de la interfaz IDbCommand si trabajas con cualquier versión de Visual Studio para .NET.
Esto es lo que nos dice la ayuda de Visual Studio sobre el método ExecuteNonQuery:
Ejecuta una instrucción SQL en un objeto de conexión.Se puede utilizar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o para cambiar la información de una base de datos ejecutando las instrucciones UPDATE, INSERT o DELETE.
Aunque ExecuteNonQuery no devuelva ninguna fila, los parámetros de salida o los valores devueltos asignados a los parámetros se rellenan con datos.
Para las instrucciones UPDATE, INSERT y DELETE, el valor devuelto corresponde alnúmero de filas afectadas por el comando. Para los demás tipos de instrucciones, el valor devuelto es -1.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 85/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Y esto otro sobre ExecuteScalar:Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados que devuelve la consulta. Se omiten todas las demás columnas y filas.
Utilice el método ExecuteScalar para recuperar un único valor (por ejemplo, un valor agregado) de una base de datos.
Por tanto, podemos deducir que ExecuteNonQuery lo usaremos para ejecutar la mayoría de las instrucciones de SQL que ejecutará algo en la base de datos, pero que no devolverá un valor.Bueno, en realidad, en algunos casos si que devolverá un valor, pero será para indicarnos, por ejemplo, si eliminamos varias filas de la tabla, devolverá el número de filas eliminadas.
Por otro lado, ExecuteScalar lo usaremos cuando tengamos que ejecutar un código de SQL del que queremos recuperar la primera columna de la primera fila.Este método devuelve un valor de tipo Object que tendremos que convertir según el valor devuelto. Por ejemplo, si queremos saber el número de registros (filas) de una tabla que cumple cierto criterio, podemos usar un comando SQL como este:
Select Count(CodClie) From Cliente Where CodDis=@CodDisEn este caso, el valor devuelto será del tipo Int32 y será el número de filas que hay en la tabla Almacen de la base de datos indicada en el objeto Connection que previamente habremos indicado que nos muestre la cantidad de códigos que pertenezcan a dicho parámetro indicado. Si no hay ninguna fila que cumpla ese criterio, devolverá cero.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 86/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 01
Diseñar la siguiente interfaz:
Restaurar la BD Almacen:
Importar el NameSpace:
Imports System.Data.SqlClient
Crear la cadena de conexión en el ámbito a nivel de clase:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")
En el botón “Nuevo Codigo” evento Click codificar lo siguiente:
REM Declaro mis variablesDim Codigo, Cod, NuevoCodigo As StringDim Max As IntegerREM Creo mi instruccion SqlDim cmd As New SqlCommand("Select CodClie From Cliente Order By CodClie desc",
cn)cmd.CommandType = CommandType.Textcn.Open()Codigo = cmd.ExecuteScalarcn.Close()
If Codigo Is Nothing ThenREM si me devuelde un valor nuloTextBox1.Text = "CL000001"
ElseREM capturo el dato correlativoCod = Val(Strings.Right(Codigo, 6)) + 1REM cuanto la longitud de la variable CodMax = Len(Cod)REM uno las variables para generar el codigoNuevoCodigo = Strings.Mid(Codigo, 1, 8 - Max) & CodTextBox1.Text = NuevoCodigo
End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 87/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ejemplo 02Restaurar la BD almacen y diseñar la siguiente interfaz:
Importar el NameSpace
Imports System.Data.SqlClient
En el ámbito a nivel de clase codificar lo siguiente:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Password=1234")Dim condi As String
Crear Los siguientes procedimientos:
Rem procedimiento para Limpiar los controles textbox y comboboxPrivate Sub Limpiar() For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If NextEnd Sub
Rem procedimiento para habilitar todo seguido hasta el cierre del paréntesis:Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean)
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 88/122Email:[email protected]
BtnEliminar
BtnConsultar BtnCancelar BtnSalirBtnnuevo
BtnGuardar
Btnmodificar
GroupBox1
I.E.S. CESCA(ADO.NET)
btnNuevo.Enabled = nuevo BtnGuardar.Enabled = Guardar btnModificar.Enabled = modificar btnConsultar.Enabled = Consultar btnCancelar.Enabled = Cancelar btnEliminar.Enabled = eliminar btnSalir.Enabled = salir End Sub
Rem procedimiento para habilitar o deshabilitar los controlesPrivate Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Su
Rem procedimiento para Insertar
Private Sub SetInsert(ByVal CodEmpresa As String, ByVal DesEmpresa As String, ByVal DirEmpresa As String, ByVal TelEmpresa As String, ByVal Rucempresa As String)
TryDim cmd As New SqlCommand("Insert into Empresa(CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa)Values(@CodEmpresa,@DesEmpresa,@DirEmpresa,@TelEmpresa,@RucEmpresa)", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodEmpresa", CodEmpresa)cmd.Parameters.AddWithValue("@DesEmpresa", DesEmpresa)cmd.Parameters.AddWithValue("@DirEmpresa", DirEmpresa)cmd.Parameters.AddWithValue("@TelEmpresa", TelEmpresa)cmd.Parameters.AddWithValue("@RucEmpresa", Rucempresa)cn.Open()cmd.ExecuteNonQuery()cn.Close()
Catch ex As ExceptionMessageBox.Show("Error Ocurrio un Error en " & ex.Message)
End TryEnd Sub
Rem procedimiento para Actualizar
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 89/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Private Sub SetUpdate(ByVal CodEmpresa As String, ByVal DesEmpresa As String, ByVal DirEmpresa As String, ByVal TelEmpresa As String, ByVal Rucempresa As String)TryDim cmd As New SqlCommand("Update Empresa Set DesEmpresa=@DesEmpresa,DirEmpresa=@DirEmpresa,TelEmpresa=@TelEmpresa,Rucempresa=@RucEmpresa Where CodEmpresa=@CodEmpresa", cn)cmd.CommandType = CommandType.Textcmd.Parameters.AddWithValue("@CodEmpresa", CodEmpresa)cmd.Parameters.AddWithValue("@DesEmpresa", DesEmpresa)cmd.Parameters.AddWithValue("@DirEmpresa", DirEmpresa)cmd.Parameters.AddWithValue("@TelEmpresa", TelEmpresa)cmd.Parameters.AddWithValue("@RucEmpresa", Rucempresa)cn.Open()cmd.ExecuteNonQuery()cn.Close()Catch ex As ExceptionMessageBox.Show("Error Ocurrio un Error en " & ex.Message)End TryEnd Sub
Rem procedimiento para Consultar Datos y devolverlos en un DataTable:
Private Function GetConsultar(ByVal codigo As String) As DataTableTryDim da As New SqlDataAdapter("Select CodEmpresa,DesEmpresa,DirEmpresa,TelEmpresa,RucEmpresa From Empresa Where CodEmpresa=@CodEmpresa", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodEmpresa", codigo)Dim dt As New DataTableda.Fill(dt)Return dtCatch ex As Exception
MessageBox.Show("Error Ocurrio un Error en " & ex.Message)End TryEnd Function
Rem procedimiento para Eliminar
Private Function setEliminar(ByVal codigo As String) As Integer Try Dim cmd As New SqlCommand("Delete From Empresa Where CodEmpresa=@CodEmpresa", cn) cmd.CommandType = CommandType.Text cmd.Parameters.AddWithValue("@CodEmpresa", codigo) cn.Open() Dim i As Integer i = cmd.ExecuteNonQuery cn.Close() Return i Catch ex As Exception MessageBox.Show("Error Ocurrio un Error en " & ex.Message) End Try End Function
En el evento Load del formulario:Try
Limpiar()
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 90/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)
Catch ex As Exception
End Try
En el botón nuevo evento click:
condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)Dim Codigo, Cod, NuevoCodigo As StringDim Max As Integer
Dim cmd As New SqlCommand("Select CodEmpresa From Empresa Order By CodEmpresa desc", cn)
cmd.CommandType = CommandType.Textcn.Open()Codigo = cmd.ExecuteScalarcn.Close()If Codigo Is Nothing ThentxtCodEmp.Text = "E00001"ElseCod = Val(Strings.Right(Codigo, 5)) + 1Max = Len(Cod)NuevoCodigo = Strings.Mid(Codigo, 1, 6 - Max) & CodtxtCodEmp.Text = NuevoCodigoEnd If : txtCodEmp.ReadOnly = True : txtDesEmp.Focus()
En el botón Modificar evento click:
condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodEmp.ReadOnly = TruetxtDesEmp.Focus()
En el botón Guardar evento click:
If condi = "N" ThenSetInsert(txtCodEmp.Text.Trim, txtDesEmp.Text.Trim, txtDirEmp.Text.Trim, txtTelEmp.Text.Trim, txtRuc.Text.Trim)MessageBox.Show("Registro Almacenado", "Guardado")habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)ElseIf condi = "M" ThenSetUpdate(txtCodEmp.Text.Trim, txtDesEmp.Text.Trim, txtDirEmp.Text.Trim, txtTelEmp.Text.Trim, txtRuc.Text.Trim)MessageBox.Show("Registro Actualizado Correctamente", "Registro Actualizado", MessageBoxButtons.OK, MessageBoxIcon.Information)habilitar(1, 0, 0, 1, 0, 0, 1)Limpiar()HabilitarCajas(False)End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 91/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el botón Consultar evento click:TryDim codigo As Stringcodigo = InputBox("Ingrese Codigo", "Codigo")Dim dt As New DataTabledt = GetConsultar(codigo)txtCodEmp.Text = dt.Rows(0)(0)txtDesEmp.Text = dt.Rows(0)(1)txtDirEmp.Text = dt.Rows(0)(2)txtTelEmp.Text = dt.Rows(0)(3)txtRuc.Text = dt.Rows(0)(4)habilitar(0, 0, 1, 0, 1, 1, 0)HabilitarCajas(False)txtCodEmp.ReadOnly = TrueCatch ex As ExceptionMessageBox.Show("El codigo ingresado no existe")End Try
En el botón Eliminar evento click:
TryDim cant As Integercant = setEliminar(txtCodEmp.Text.Trim)MessageBox.Show("Registro Eliminado", "Eliminado " & CStr(cant), MessageBoxButtons.OK, MessageBoxIcon.Information)Limpiar()habilitar(1, 0, 0, 1, 0, 0, 1)Catch ex As Exception
End Try
En el botón Salir evento click:
If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Close()
End If
Propuesto:
Hacer lo mismo pero con la tabla MARCA.
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 92/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Uso del DataTableObjetivo:Al término de esta separa el alumno conocerá:
Que es un DataTable Configurar el Datatable Trabajar con Clases
Ejemplo 01
Restaurar la BD Almacen luego diseñar la siguiente interfaz:
Una vez diseñado la siguiente interfaz agregar una clase: Como?:Vea la siguiente imagen:
Menu Proyecto/Agregar Clase:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 93/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
La cual nos pedirá un nombre la llamaremos Operaciones:
Una vez ingresado el nombre lo agregamos:Lo cual nuestro proyecto quedara de la siguiente forma:
Empecemos a trabajar:
1.- vamos a trabajar en la clase agregada:
Primero en el ámbito de importaciones importar el namespace:
Imports System.Data.SqlClient
2.- En el ámbito a nivel de clase crear la cadena de conexión:
Private cn As New SqlConnection("Server=.;DataBase=Almacen;Integrated security=true")
Nuestra clase operaciones quedaría de la siguiente forma:
Debajo de la conexión crear los siguientes métodos:
Rem Listado de todos los Articulos.Public Function getArticulos() As DataSetTry
Dim da As New SqlDataAdapter("Select CodArti,Rtrim(DesArti) as DesArti From Articulo", cn)
da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSet()da.Fill(ds, "Articulos")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 94/122Email:[email protected]
Clase Agregada
Clase Operaciones
I.E.S. CESCA(ADO.NET)
Rem Listado de todos los articulos segun el codigoPublic Function getArticulos(ByVal CodArti As String) As DataSet Try Dim sql As String = "Select CodArti,DesArti,StockActual,PrecVenta From Articulo Where CodArti=@CodArti" Dim da As New SqlDataAdapter(sql, cn) da.SelectCommand.CommandType = CommandType.Text da.SelectCommand.Parameters.AddWithValue("@CodArti", CodArti) Dim ds As New DataSet() da.Fill(ds, "DatosArticulo") Return ds Catch ex As Exception Throw ex End Try End Function
Rem Listado de todos los clientes concatenado el nombre mas el apellidoPublic Function getCliente() As DataSetTryDim da As New SqlDataAdapter("Select CodClie,(Rtrim(NomClie) + ','+ RTrim(ApeClie)) as NomCom From Cliente", cn)da.SelectCommand.CommandType = CommandType.TextDim ds As New DataSet()da.Fill(ds, "Cliente")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function
Rem consultatando la direccion, telefono y ruc del cliente segun el codigo:Public Function getCliente(ByVal CodClie As String) As DataSetTryDim da As New SqlDataAdapter("Select DirClie,TelClie,RucClie From Cliente Where CodClie=@CodClie", cn)da.SelectCommand.CommandType = CommandType.Textda.SelectCommand.Parameters.AddWithValue("@CodClie", CodClie)Dim ds As New DataSet()da.Fill(ds, "Cliente")Return dsCatch ex As ExceptionThrow exEnd TryEnd Function
Ahora una vez creado los métodos nos dirigimos al formulario para trabajar:En el ámbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim objOper As New OperacionesDim dt As New DataTable()Dim drw As DataRowDim total As DecimalDim fila As Integer
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 95/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Crear el siguiente Metodo:
Private Sub ConfigurarTabla() dt.Columns.Add("Codigo", GetType(String)) dt.Columns.Add("Descripcion", GetType(String)) dt.Columns.Add("Precio", GetType(Decimal)) dt.Columns.Add("Cantidad", GetType(Int32)) dt.Columns.Add("Importe", GetType(Decimal)) dgdDetalle.DataSource = dt dgdDetalle.Columns(0).Width = 60 dgdDetalle.Columns(1).Width = 100 dgdDetalle.Columns(2).Width = 60 dgdDetalle.Columns(3).Width = 60End Sub
En el evento Load del Formulario codificar lo siguiente:
TryCboArticulo.DataSource = objOper.getArticulos().Tables(0)CboArticulo.DisplayMember = "DesArti"CboArticulo.ValueMember = "CodArti"CboCliente.DataSource = objOper.getCliente().Tables(0)CboCliente.DisplayMember = "NomCom"CboCliente.ValueMember = "CodClie"ConfigurarTabla()
Catch ex As ExceptionMessageBox.Show(ex.Message)
End Try
En el evento SelectedIndexChanged del combobox cboCliente codificar lo siguiente:
Try Dim dtArti As New DataTable() dtArti = objOper.getCliente(CboCliente.SelectedValue.ToString()).Tables(0) txtDirClie.Text = dtArti.Rows(0)(0).ToString() txtTel.Text = dtArti.Rows(0)(1).ToString() txtRuc.Text = dtArti.Rows(0)(2).ToString()Catch ex As Exception
End Try
En el evento SelectedIndexChanged del combobox cboArticulo codificar lo siguiente:Try Dim dtArti As New DataTable() dtArti = objOper.getArticulos(CboArticulo.SelectedValue.ToString()).Tables(0) txtPrecio.Text = dtArti.Rows(0)(3).ToString() txtCod.Text = dtArti.Rows(0)(0).ToString() txtCant.Select()Catch ex As Exception
End Try
En el control TxtCant evento TextChanged codficar lo siguiente:
If txtCant.Text.Trim() <> "" ThentxtPtot.Text = Convert.ToString(Decimal.Parse(txtCant.Text) * Decimal.Parse(txtPrecio.Text))
Else
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 96/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
txtPtot.Text = (0).ToString() txtCant.Clear()End If
En el botón agregar evento click codificar lo siguiente:
If CboArticulo.SelectedIndex > -1 And txtCant.Text <> "" Then drw = dt.NewRow() drw(0) = CboArticulo.SelectedValue.ToString() drw(1) = CboArticulo.Text drw(2) = Decimal.Parse(txtPrecio.Text) drw(3) = Decimal.Parse(txtCant.Text) drw(4) = Decimal.Parse(txtPtot.Text) 'Agregamos la fila a la coleccion Rows de la Tabla dt.Rows.Add(drw) total += Decimal.Parse(txtPtot.Text) txtTot.Text = total.ToString() txtPrecio.Clear() txtCant.Clear() txtCod.Clear() txtPrecio.Clear() Else MessageBox.Show("Falta Ingresar Datos en Detalle", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1)
End If
En el botón eliminar evento click codificar lo siguiente:Try fila = dgdDetalle.CurrentRow.Index If fila > -1 And dt.Rows.Count > 0 Then total -= Decimal.Parse(dt.Rows(fila)(4).ToString()) txtTot.Text = total.ToString() dt.Rows.RemoveAt(fila) End IfCatch ex As Exception MessageBox.Show("Seleccione una Fila")End Try
En el botón Modificar evento click codificar lo siguiente:Try fila = dgdDetalle.CurrentRow.Index If fila > -1 And dt.Rows.Count > 0 Then txtCod.Text = dt.Rows(fila)(0).ToString() CboArticulo.Text = dt.Rows(fila)(1).ToString() txtPrecio.Text = dt.Rows(fila)(2).ToString() txtCant.Text = dt.Rows(fila)(3).ToString() total -= Decimal.Parse(dt.Rows(fila)(4).ToString()) txtTot.Text = total.ToString() dt.Rows.RemoveAt(fila) End If Catch ex As Exception MessageBox.Show("Seleccione una Fila") End Try
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 97/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Manejo de Clases en .NETObjetivo:Al término de esta separa el alumno conocerá:
Manejar los objetos de tipo Clase. Crear Procedimientos Almacenados con parámetros de salida.
Restaurar la BD Almacen y crear los siguientes procedimientos almacenados:
Create Proc [usp_Listar_Personal]ASSelect CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal];GO
Create Proc [usp_Consultar_Personal]@CodPer char(6)ASSelect CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado From [Personal] Where CodPer = @CodPer;GoCreate Proc [usp_Guardar_Personal]@CodPer Char(6)Output, @ApePer Char(35), @NomPer Char(35), @DirPer Char(40), @TelPer Char(8), @Dni Char(8), @CodCargo Char(3), @Retirado Char(2)ASdeclare @Cod Char(6),@max int,@Codigo Char(6)Select @Cod=Max(right(CodPer,3))+1 From PersonalSet @Max=Len(@Cod)Select @Codigo=substring(CodPer,1,6-@Max)+@Cod From PersonalInsert Into [Personal] (CodPer, ApePer, NomPer, DirPer, TelPer, Dni, CodCargo, Retirado) Values(@Codigo, @ApePer, @NomPer, @DirPer, @TelPer, @Dni, @CodCargo, @Retirado);set @CodPer=@CodigoGOCreate Proc [usp_Actualizar_Personal]@CodPer Char(6), @ApePer Char(35), @NomPer Char(35), @DirPer Char(40), @TelPer Char(8), @Dni Char(8), @CodCargo Char(3), @Retirado Char(2)ASUpdate [Personal] Set CodPer = @CodPer, ApePer = @ApePer, NomPer = @NomPer, DirPer = @DirPer, TelPer = @TelPer, Dni = @Dni, CodCargo = @CodCargo, Retirado = @Retirado Where CodPer = @CodPer;GO
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 98/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Create Proc [usp_Eliminar_Personal]@CodPer char(6)ASDelete [Personal] Where CodPer = @CodPer;Go
Create Proc Usp_Listar_CargoAsselect CodCargo,Rtrim(DesCargo) Cargo from Cargo
Abrir el Visual Studio 2008 y crear un proyecto de tipo aplicación para Windows, y diseñar la siguiente interna:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 99/122Email:[email protected]
BtnSalir
GroupBox1
I.E.S. CESCA(ADO.NET)
Una vez diseñado la siguiente interfaz agregar una clase: Como ¿?:Vea la siguiente imagen: Menu Proyecto/Agregar Clase:
La cual nos pedirá un nombre la llamaremos Operaciones:
Una ves ingresado el nombre lo agregamos:Lo cual nuestro proyecto quedara de la siguiente forma:
Empecemos a trabajar:
1.- vamos a trabajar en la clase agregada:
Primero en el ámbito de importaciones importar el namespace:
Imports System.Data.SqlClient
2.- En el ámbito a nivel de clase crear la cadena de conexión:
Private cn As New SqlConnection("Server=.;DataBase=Almacen;Integrated security=true")
Nuestra clase operaciones quedaría de la siguiente forma:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 100/122Email:[email protected]
Clase Agregada
Clase Operaciones
BtnEliminar
BtnConsultar
BtnCancelar
Btnnuevo
BtnGuardar
Btnmodificar
I.E.S. CESCA(ADO.NET)
Debajo de la conexión crear los siguientes métodos:
REM metodo para Listar los Cargos Public Function GetCargo() As DataTable Try Dim da As New SqlDataAdapter("Usp_Listar_Cargo", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure Dim ds As New DataSet da.Fill(ds, "Cargo") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 101/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
REM metodo para Guardar Personal Public Function SetGurdar(ByVal CodPer As String, ByVal NomPer As String, ByVal ApEper As String, _ ByVal TelPer As String, ByVal DirPer As String, _ ByVal Dni As String, ByVal CodCargo As String, _ ByVal Retirado As String) As String Dim cmd As New SqlCommand("[usp_Guardar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New SqlParameter("@CodPer", SqlDbType.Char, 6)).Direction = ParameterDirection.Output cmd.Parameters.AddWithValue("@NomPer", NomPer) cmd.Parameters.AddWithValue("@ApePer", ApEper) cmd.Parameters.AddWithValue("@DirPer", DirPer) cmd.Parameters.AddWithValue("@TelPer", TelPer) cmd.Parameters.AddWithValue("@Dni", Dni) cmd.Parameters.AddWithValue("@CodCargo", CodCargo) cmd.Parameters.AddWithValue("@Retirado", Retirado) Try Dim codigo As String cn.Open() cmd.ExecuteNonQuery() cn.Close() codigo = cmd.Parameters("@CodPer").Value Return codigo Catch ex As Exception Throw ex End Try End Function
REM metodo para Actualizar PersonalPublic Sub SetActualizar(ByVal CodPer As String, ByVal NomPer As String, ByVal ApEper As String, _ ByVal TelPer As String, ByVal DirPer As String, _ ByVal Dni As String, ByVal CodCargo As String, _ ByVal Retirado As String) Dim cmd As New SqlCommand("[usp_Actualizar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New SqlParameter("@CodPer", SqlDbType.Char, 6)).Value = CodPer cmd.Parameters.AddWithValue("@NomPer", NomPer) cmd.Parameters.AddWithValue("@ApePer", ApEper) cmd.Parameters.AddWithValue("@DirPer", DirPer) cmd.Parameters.AddWithValue("@TelPer", TelPer) cmd.Parameters.AddWithValue("@Dni", Dni) cmd.Parameters.AddWithValue("@CodCargo", CodCargo) cmd.Parameters.AddWithValue("@Retirado", Retirado) Try cn.Open() cmd.ExecuteNonQuery() cn.Close() Catch ex As Exception Throw ex End Try End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 102/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
REM metodo para Consultar PersonalPublic Function GetPersona(ByVal codigo As String) As DataTable Try Dim da As New SqlDataAdapter("[usp_Consultar_Personal]", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure da.SelectCommand.Parameters.AddWithValue("@CodPer", codigo) Dim ds As New DataSet da.Fill(ds, "Persona") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function
REM metodo para Elimanar Personal Public Sub SetEliminar(ByVal Codigo As String) Dim cmd As New SqlCommand("[usp_Eliminar_Personal]", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.AddWithValue("@CodPer", Codigo) Try cn.Open() cmd.ExecuteNonQuery() cn.Close() Catch ex As Exception Throw ex End Try End Sub
Ahora una ves creado los métodos nos dirigimos al formulario para trabajar:En el ámbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim obj As New Operacionesdim condi as String=""
Crear los siguientes procedimientos a nivel general:Private Sub LimpiarCajas() For Each Item As Object In Me.GroupBox1.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Clear() End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).SelectedIndex = -1 End If Next End Sub Private Sub HabilitarCajas(ByVal valor As Boolean) For Each Item As Object In Me.GroupBox1.Controls If TypeOf Item Is TextBox Then CType(Item, TextBox).Enabled = valor End If If TypeOf Item Is CheckBox Then CType(Item, CheckBox).Enabled = valor End If If TypeOf Item Is ComboBox Then CType(Item, ComboBox).Enabled = valor End If Next End Sub
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 103/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As Boolean, ByVal salir As Boolean) btnnuevo.Enabled = nuevo btnguardar.Enabled = Guardar btnModificar.Enabled = modificar btnconsultar.Enabled = Consultar btncancelar.Enabled = Cancelar btneliminar.Enabled = eliminar btnsalir.Enabled = salirEnd Sub
Ahora en el evento Load del formulario codificar lo siguiente:
cbocargo.DataSource = obj.GetCargocbocargo.DisplayMember = "Cargo"cbocargo.ValueMember = "CodCargo"LimpiarCajas()Habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)
Ahora en el evento Clic del botón “Nuevo”
condi = "N"HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 0)txtApePer.Focus()txtCodPer.ReadOnly = True
Ahora en el evento Clic del botón “Modificar”
condi = "M"Me.HabilitarCajas(True)habilitar(0, 1, 0, 0, 1, 0, 1)txtCodPer.ReadOnly = TruetxtApePer.Focus()
Ahora en el evento Clic del botón “Guardar”
If condi = "N" Then txtCodPer.Text = obj.SetGurdar(txtCodPer.Text, Me.txtNomPer.Text, Me.txtApePer.Text, Me.txtTelPer.Text, Me.txtDirPer.Text, Me.txtDNI.Text, Me.cbocargo.SelectedValue, Me.txtRetirado.Text) MessageBox.Show("Registro Guardado") habilitar(1, 0, 0, 1, 0, 0, 1) LimpiarCajas() HabilitarCajas(False)ElseIf condi = "M" Then obj.SetActualizar(txtCodPer.Text, Me.txtNomPer.Text, Me.txtApePer.Text, Me.txtTelPer.Text, Me.txtDirPer.Text, Me.txtDNI.Text, Me.cbocargo.SelectedValue, Me.txtRetirado.Text) MessageBox.Show("Registro Actualizado") habilitar(1, 0, 0, 1, 0, 0, 1) LimpiarCajas() HabilitarCajas(False)End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 104/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Ahora en el evento Clic del botón “Eliminar”
obj.SetEliminar(Me.txtCodPer.Text)MessageBox.Show("Registro Eliminado")LimpiarCajas()habilitar(1, 0, 0, 1, 0, 0, 1)
Ahora en el evento Clic del botón “Consultar”
Try Dim codigo As String codigo = InputBox("Ingrese Codigo", "Ingrese") Dim dt As New DataTable dt = obj.GetPersona(codigo) Me.txtCodPer.Text = dt.Rows(0)(0).ToString.Trim Me.txtApePer.Text = dt.Rows(0)(1).ToString.Trim Me.txtNomPer.Text = dt.Rows(0)(2).ToString.Trim Me.txtDirPer.Text = dt.Rows(0)(3).ToString.Trim Me.txtTelPer.Text = dt.Rows(0)(4).ToString.Trim Me.txtDNI.Text = dt.Rows(0)(5).ToString.Trim Me.cbocargo.SelectedValue = dt.Rows(0)(6) Me.txtRetirado.Text = dt.Rows(0)(7).ToString.Trim habilitar(0, 0, 1, 0, 1, 1, 0) HabilitarCajas(False) txtCodPer.ReadOnly = TrueCatch ex As Exception MessageBox.Show("Error el codigo ingresado no existe")End Try
Ahora en el evento Clic del botón “Cancelar”
LimpiarCajas()habilitar(1, 0, 0, 1, 0, 0, 1)HabilitarCajas(False)
Ahora en el evento Clic del botón “Salir”
If MessageBox.Show("Desea Salir", "Salir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then Close() End If
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 105/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Usando del parámetro de salida OutPutObjetivo:Al término de esta separata el alumno tendrá el conocimiento de:
Utilizar el parámetro OutPut Uso del metodo AddWithValue de la propiedad Parameters
Ejercicio:Antes de desarrollar este ejercicio deberemos de crear los stores proceduresDesde el analizador de consultas (SQL Server) codificar:
Use AlmacenGo--Creamos la table FacturaCreate Table Factura(NumFact Char(8)Not null,CodClie Char(8)not null,FechaEmi DateTime,CodPer Char(6),Total Decimal(10,2),Anula Char(1),Emitido Char(1)Primary key(NumFact)Foreign key(CodPer) References [Personal])Go--Creamos la Tabla Detalle_FacturaCreate Table Detalle_Factura(NumFact Char(8)not null,CodArti Char(7)not null,CantArti Int,PreUnit Decimal(10,2),Importe Decimal(10,2)Primary key(NumFact,CodArti)Foreign key(NumFact)References Factura,Foreign key(CodArti)References Articulo)Go
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 106/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Aquí los SPSp para Guardar Factura
Create Proc Usp_Guardar_Factura_x@NumFact Char(8)OutPut,@CodClie Char(8),@FechaEmi DateTime,@CodPer Char(6),@Total Decimal(10,2),@Anula Char(1),@Emitido Char(1)AsDeclare @NumFactura char(8), @max int, @Cod Char(8)Select @Cod=Max(NumFact)+ 1 From FacturaSet @max=Len(@Cod)Select @NumFactura=Substring(NumFact,1,8-@max)+@Cod From Factura--Se condiciona en el caso de q la table este baciaIf @NumFactura is nullBegin Set @NumFactura='00000001'EndInsert into Factura(NumFact,CodClie,FechaEmi,CodPer,Total,Anula,Emitido)Values(@NumFactura,@CodClie,@FechaEmi,@CodPer,@Total,@Anula,@Emitido)Set @NumFact=@NumFacturaGo--Provar el SPDeclare @NumFact Char(8)exec Usp_Guardar_Factura_x @NumFact output,'CL000001','23/06/2009','PER001',30.00,'N','S'print @NumFactGo--Sp para Guardar Detalle FacturaCreate Proc Usp_Guardar_Detalle_x@NumFact char(8),@CodArti Char(7),@CantArti Int,@PreUnit Decimal(10,2),@Importe Decimal(10,2)AsInsert Into Detalle_Factura(NumFact,CodArti,CantArti,PreUnit,Importe)Values(@NumFact,@CodArti,@CantArti,@PreUnit,@Importe)Go
--Sp para Consultas
Create Proc Usp_Clientes_TodosAsSelect CodClie,Rtrim(Rtrim(ApeClie) +','+ NomClie) as [Cliente] From ClienteGo
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 107/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
---Sp para traer todos los productosCreate Proc Usp_Productos_todosAsSelect CodArti,RTrim(DesArti) as [DesArti],PrecVenta From ArticuloGo--Sp para traer todos los ClientesCreate Proc Usp_Traer_Cliente_x_Cod@CodClie Char(8)AsSelect DirClie,RucClie,TelClie From ClienteWhere CodClie=@CodClieGo
Crear un proyecto de tipo WindowsForm, con el nombre “Facturacion”
Diseñar la siguiente interfase:
Agregar una clase al proyecto de nombre “Operaciones” y codificar
En el ámbito de importaciones importar los namespace:
Imports System.DataImports System.Data.SqlClient
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 108/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
A nivel de clase:
Dim cn As New SqlConnection("User id=sa;Server=.;DataBase=Almacen;Integrated security=true")
'Metodo para traer datos(todos los cliente y Articulos) Public Function GetDatosFac() As DataSet Try Dim da As New SqlDataAdapter("Usp_Clientes_Todos", cn) da.SelectCommand.CommandType = CommandType.Text Dim ds As New DataSet() da.Fill(ds, "Cliente") da.SelectCommand.CommandText = "Usp_Productos_todos" da.Fill(ds, "Producto") Return ds Catch ex As Exception Throw ex End Try End Function
'Metodo para traer datos del cliente Public Function getCliente(ByVal CodClie As String) As DataTable Try Dim da As New SqlDataAdapter("Usp_Traer_Cliente_x_Cod", cn) da.SelectCommand.CommandType = CommandType.StoredProcedure Dim ds As New DataSet() da.SelectCommand.Parameters.Add(New SqlParameter("@CodClie", SqlDbType.Char, 8)).Value = CodClie da.Fill(ds, "Clientes") Return ds.Tables(0) Catch ex As Exception Throw ex End Try End Function
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 109/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
'Metodo para Guardar los Datos de la Factura(Cabecera y Detalle)Public Function SetFactura(ByVal CodClie As String, ByVal FechaEmi As DateTime, ByVal CodPer As String, ByVal total As Decimal, ByVal anula As String, ByVal Emitido As String, ByVal detalle As DataTable) As Stringcn.Open()Dim trans As SqlTransaction = cn.BeginTransaction()Dim cmdCabe As New SqlCommand("Usp_Guardar_Factura_x", cn)cmdCabe.CommandType = CommandType.StoredProcedurecmdCabe.Transaction = transDim cmdDeta As New SqlCommand("Usp_Guardar_Detalle_x", cn)cmdDeta.CommandType = CommandType.StoredProcedurecmdDeta.Transaction = transcmdCabe.Parameters.Add(New SqlParameter("@NumFact", SqlDbType.Char, 8)).Direction = ParameterDirection.OutputcmdCabe.Parameters.AddWithValue("@CodClie", CodClie)cmdCabe.Parameters.AddWithValue("@FechaEmi", FechaEmi)cmdCabe.Parameters.AddWithValue("@CodPer", CodPer)cmdCabe.Parameters.AddWithValue("@Total", total)cmdCabe.Parameters.AddWithValue("@Anula", anula)cmdCabe.Parameters.AddWithValue("@Emitido", Emitido)Dim Codigo As StringcmdCabe.ExecuteNonQuery()Codigo = cmdCabe.Parameters("@NumFact").Value.ToString()
For Each Fila As DataRow In detalle.Rows
cmdDeta.Parameters.Add(New SqlParameter("@NumFact", SqlDbType.Char, 8)).Value = Codigo
cmdDeta.Parameters.AddWithValue("@CodArti", Fila("Codigo"))cmdDeta.Parameters.AddWithValue("@CantArti", Fila("Cant"))cmdDeta.Parameters.AddWithValue("@PreUnit", Fila("Precio"))cmdDeta.Parameters.AddWithValue("@Importe", Fila("Importe"))cmdDeta.ExecuteNonQuery()cmdDeta.Parameters.Clear()
NextTrytrans.Commit()Return Codigo
Catch ex As Exceptiontrans.Rollback()Throw exFinallyIf cn.State <> ConnectionState.Closed Thencn.Close()End IfEnd Try
End Function
Codificar en el Formulario:
Dim Obj As New Operaciones()Dim CodPro As StringDim dtProd, dtDet As New DataTable()Dim dr As DataRowDim SubTotal As Decimal
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 110/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
//Creamos 1 Metodo para crear la tabla q se enlaza con la grilla
Private Sub CrearTabla() dtDet.Columns.Add("Codigo", GetType(String)) dtDet.Columns.Add("Descripcion", GetType(String)) dtDet.Columns.Add("Precio", GetType(Decimal)) dtDet.Columns.Add("Cant", GetType(Integer)) dtDet.Columns.Add("Importe", GetType(Decimal)) dgdDetalle.DataSource = dtDet dgdDetalle.Columns(0).Width = 60 dgdDetalle.Columns(1).Width = 150 dgdDetalle.Columns(2).Width = 60 dgdDetalle.Columns(3).Width = 60 dgdDetalle.Columns(4).Width = 60
End Sub
En el Load del Formulario:
Try CboCliente.DataSource = Obj.GetDatosFac().Tables(0) CboCliente.DisplayMember = "Cliente" CboCliente.ValueMember = "CodClie" CboCliente.Text = "" dtProd = Obj.GetDatosFac().Tables(1) cboProducto.DataSource = dtProd cboProducto.DisplayMember = "DesArti" cboProducto.ValueMember = "PrecVenta" cboProducto.Text = "" Me.txtPrecio.Text = "" lblFecha.Text = DateTime.Now.ToLongDateString() CrearTabla()
Catch ex As Exception
End Try
En el evento SelectedIndex_Ghanged del combo “cboCliente”Try
Dim dt As New DataTable()dt = Obj.getCliente(CboCliente.SelectedValue.ToString())txtDirClie.Text = dt.Rows(0)(0).ToString()txtRuc.Text = dt.Rows(0)(1).ToString()txtTelClie.Text = dt.Rows(0)(2).ToString()
Catch ex As Exception
End Try
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 111/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
En el evento SelectedIndex_Ghanged del combo “cboProducto”:
TryCodPro = dtProd.Rows(cboProducto.SelectedIndex)(0).ToString()Me.txtPrecio.Text = cboProducto.SelectedValue.ToString()
Catch ex As Exception
End TryEn el evento Clic del boton “Adicionar”
dr = dtDet.NewRow()dr(0) = CodProdr(1) = cboProducto.Textdr(2) = txtPrecio.Textdr(3) = txtCant.Textdr(4) = Decimal.Parse(txtCant.Text) * Decimal.Parse(txtPrecio.Text)dtDet.Rows.Add(dr)SubTotal += Decimal.Parse(txtPrecio.Text) * Decimal.Parse(txtCant.Text)txtSubTotal.Text = SubTotal.ToString()txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")txtTotal.Text = (SubTotal + Decimal.Parse(txtIGV.Text)).ToString()txtCant.Clear()
En el evento Clic del boton “Eliminar”
SubTotal -= Decimal.Parse(dtDet.Rows(dgdDetalle.CurrentCell.RowIndex)(4).ToString())txtSubTotal.Text = SubTotal.ToString()txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")txtTotal.Text = (SubTotal * Decimal.Parse(txtIGV.Text)).ToString("N2")dtDet.Rows.RemoveAt(dgdDetalle.CurrentCell.RowIndex)
En el evento Clic del boton “Grabar”
txtFactura.Text = Obj.SetFactura(CboCliente.SelectedValue, Now.Date, "PER001", Convert.ToDecimal(txtTotal.Text), "N", "S", dtDet).ToString
MessageBox.Show("Registro Almacenado con exito")
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 112/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Manejo de reportes:Paso 1 Crear un nuevo proyecto:
Paso 2En el explorador de soluciones clic derecho / agregar / agregar nuevo elemento
Paso 3Ubicar el icono CrystalReport y cambiar de nombre Rptcliente clien en Agregar:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 113/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Paso 4Nos mostrara la siguiente ventana / Aceptamos la licencia damos click en el boton Ok
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 114/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Paso 5:Nos muestra la siguiente imagen como deseamos crear el informe asi q seleccionamos el del medio el informe en blanco y luego click en el boton OK.
Paso 6:Describiendo el entorno:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 115/122Email:[email protected]
1) CLICK 2) yluego pulsa el
boton OK
Origen de Datos
Cabezera del reporte
Titulo de la columna
Columna de enlace
Pie de pagina.
Vista Prelimnar.
Vista Diseño
I.E.S. CESCA(ADO.NET)
Paso 7:Click derecho sobre Campos de base de datos:
8) Nos apertura la siguiente ventana:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 116/122Email:[email protected]
Darle Click Aqui
Darle Click
I.E.S. CESCA(ADO.NET)
9)Nos despliega el siguiente arbol:
Nos despliega la siguiente Ventana:
Seleccionamos Microsoft OLEDB Provider for SQL ServerLuego hacemos click en el botón siguiente:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 117/122Email:[email protected]
Darle Click
Darle Click
I.E.S. CESCA(ADO.NET)
10) Nos despliega un venta para conectarnos al origen de datos:
En Servidor indicamos el nombre de tu servidor: ojo de tu servidor ;)
En Id del usuario indicamos el usuario en este caso q es SA cierto ;)
En contraseña indicamos el password en este caso también creo q es 123 ;)
Base datos seleccionamos Almacen
11) Luego siguiente y finalizar ;)Bueno por defecto ya tenemos una conexión establecida más o menos como la siguiente imagen:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 118/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Seleccionamos la Ficha almacen y nos despliega dbo, information, sys.En dbo encontramos nuestras tablas procedimientos almacenados, vistas de la BD.
Seleccionamos la ficha tablas y seleccionamos la tabla Cliente:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 119/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Luego de seleccionar lo pasamos:
Aceptamos
Luego nos ubicamos en Campos de base de datos:
Nos percatamos de q la tabla cliente se ah añadido junto con los campos:
Arrastrar los campos que deseas mostrar en la seccion 3 asi:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 120/122Email:[email protected]
PASAR
I.E.S. CESCA(ADO.NET)
Le damos una vista Preliminar para ver cómo va quedando:
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 121/122Email:[email protected]
I.E.S. CESCA(ADO.NET)
Listo una vez creado el reporte empezamos a consumir desde un formulario:EL primer ejemplo seria con el formulario 1:Dentro del formulario vamos a agregar un control llamado CrystalReportViewer
Una vez agregado el control codificamos en el evento Load del formulario Ojo evento LOAD:
Dim report As New RptClientereport.SetDatabaseLogon("sa", "1234")CRVCliente.ReportSource = report
Y por ultimo probamos la aplicación con un F5
Prof. Alejandro Yauyo Barrientos / Specialist Developer .NET Pagina 122/122Email:[email protected]
ControlCrystalReportViewr
Lo llamaremos Name=CRVCliente