Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROGRAMACION IV ASP.NET
ASPECTOS TECNICOS
ASP.NET: Es una tecnologa que permite desarrollar ambiente Web. Esta tecnologa es desarrollada por Microsoft y trae incluido una serie de lenguajes de programacin tales como VB.net VBScript, C# entre otros. Estos lenguajes interactan entre s permitiendo desarrollar aplicaciones totalmente dinmicas orientadas a la Web.
SQL SERVER: Es un sistema de gestor de bases de datos, este nos permite guardar informacin y poder realizar pginas ms dinmicas, por ejemplo podemos guardar contraseas, direcciones de correo, realizar foros de discusin, contadores, aparte de guardar cualquier tipo de informacin que nos sea de inters, para poder manejarnos con el deberemos tener unos conocimientos mnimos del lenguaje SQL.
IIS: Servicios de software que admiten la creacin, configuracin y administracin de sitios Web, adems de otras funciones de Internet. Entre los Servicios de Internet Informacin Server se incluyen el Protocolo de transferencia de noticias a travs de la red (NNTP), el Protocolo de transferencia de archivos (FTP) y el Protocolo simple de transferencia de correo (SMTP). Para poder correr pginas ASPX (lenguaje propuesto en esta alternativa) es necesario tener instalado este servicio, el cual est incluido en el sistema operativo Microsoft Windows Server 2003, el cual sera el sistema operativo propuesto para esta alternativa, ya que proporcionara mayor seguridad al montar el servidor Web.
FRAMEWORK: Este es un conjunto de biblioteca que contiene toda la plataforma de .NET, es decir, para poder correr pginas ASPX en nuestro sistema operativo es indispensable la instalacin y uso de esta herramienta.
PROPSITO DE LA GUA
Esa gua ha sido desarrollada como material de apoyo al Fase IV Anlisis y Diseo de Sistemas con Tecnologa .NET con el objetivo de proveer a los alumnos de una herramienta que le permite la prctica para el desarrollo de formularios de registros, formularios de consultas y manipulacin de datos con una base de datos a travs del desarrollo de un sitio web.
OBJETIVOS ESPECFICOS
1. 2. 3. 4. 5. 6. 7. Creacin y uso de conexiones a base de datos Desarrollo pginas de Formularios Registros Desarrollo pginas de Formularios Consulta Utilizacin de clases para reutilizar cdigo Utilizacin de controles que permiten la vinculacin de datos Actualizacin, Ingreso y Eliminacin de datos Utilizacin de procedimientos almacenados
FUNCIONALIDADES PROPUESTAS
1. 2. 3. 4. 5. Consulta de Contactos Consulta de Profesiones Mantenimiento al catlogo de Contactos Mantenimiento al catlogo de Profesiones Envo de correo electrnico
Crear las siguiente bases de datos con el nombre de: CONTACTOS CREATE TABLE [dbo].[CONTACTOS] ( [COD_CONTACTO] [char] (5) COLLATE Modern_Spanish_CI_AS NOT NULL , [NOM_CONTACTO] [char] (50) COLLATE Modern_Spanish_CI_AS NOT NULL , [APE_CONTACTO] [char] (50) COLLATE Modern_Spanish_CI_AS NOT NULL , [COD_PROF] [char] (5) COLLATE Modern_Spanish_CI_AS NULL , [TIPO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL , [DIRECCION1] [char] (100) COLLATE Modern_Spanish_CI_AS NULL , [DIRECCION2] [char] (100) COLLATE Modern_Spanish_CI_AS NULL ,
[E_MAIL] [char] (50) COLLATE Modern_Spanish_CI_AS NULL , [FECHA_NACIMIENTO] [datetime] NULL , [LUGAR_TRABAJO] [char] (50) COLLATE Modern_Spanish_CI_AS NULL , [DIRECCION_TRABAJO] [char] (100) COLLATE Modern_Spanish_CI_AS NULL , [TEL_TRABAJO] [char] (8) COLLATE Modern_Spanish_CI_AS NULL , [TEL_PERSONAL] [char] (8) COLLATE Modern_Spanish_CI_AS NULL , [TEL_CASA] [char] (8) COLLATE Modern_Spanish_CI_AS NULL ) ON [PRIMARY] GO
CREATE TABLE [dbo].[PROFESIONES] ( [COD_PROF] [char] (5) COLLATE Modern_Spanish_CI_AS NOT NULL , [DESCRIPCION] [char] (25) COLLATE Modern_Spanish_CI_AS NULL ) ON [PRIMARY] GO
Estos se digitara como procedimientos almacenados. En las bases de datos EJEMPLOS PROCEDIMIENTOS ALMACENADOS
ALTER TABLE [dbo].[CONTACTOS] ADD CONSTRAINT [PK_CONTACTOS] PRIMARY KEY CLUSTERED ( [COD_CONTACTO] ) ON [PRIMARY] , CONSTRAINT [CK_CONTACTOS] CHECK ([TIPO] = 'O' or ([TIPO] = 'L' or [TIPO] = 'P')) GO
ALTER TABLE [dbo].[CONTACTOS] ADD CONSTRAINT [FK_CONTACTOS_PROFESIONES] FOREIGN KEY ( [COD_PROF] ) REFERENCES [dbo].[PROFESIONES] ( [COD_PROF] ) GO 1. La base datos ser guardada en una subcarpeta de su proyecto Contacto pero esta subcarpeta es creada desde Visual Asp.Net
3. Tenemos el entorno de SQL 2008 para iniciar a crear nuestra base datos
4. Dar un doble clic base datos luego un clic nueva base de datos
5. En el nombre de la base de datos digitamos un Contactos y damos un clic en aceptar. 6. Nos posicionamos en nuestra base de datos de contactos y damos un clic en (+) para desplegar el contenido; luego damos un clic derecho en Tablas y nos posicionamos en nueva tabla para crear nuestra primera tabla.
10. Para crear nuestro ndice o llave primaria damos un clic en el icono
11. Para crear nuestra relacin entre nuestras tablas realizamos lo siguiente a. Damos un clic en base datos Contactos y nos posicionamos en Diagrama de bases datos damos un clic derecho para crear nuestra relaciones entre nuestras tablas
12. Agregamos nuestras tablas para relacionarlas y luego damos un clic en cerrar
13. Despus de haber agregado nuestras tablas relacionamos los ndices o llaves de cada uno de las tablas. Arrastramos el ndice hacia la otra tabla y automticamente nos dar los parmetros de uno a uno o de uno a muchos, como lo muestra la siguiente tabla.
uno a uno
uno a muchos
actualizarcontacto
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[Actualizarcontacto] @COD_CONTACTO AS char(5), @NOM_CONTACTO AS char(50), @APE_CONTACTO AS char(50), @ID_PROF AS bigint,
PROGRAMACION III
ELIMINAR CONTACTO
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[Eliminarcontacto] @COD_CONTACTO AS CHAR(5) as begin begin transaction Eliminar delete from DBO.CONTACTOS where COD_CONTACTO=@COD_CONTACTO if @@error=0 commit transaction Eliminar else rollback transaction Eliminar end
ELIMINAR PROFESION
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER Procedure [dbo].[Eliminarprofesion] @COD_PROF AS CHAR(5) as begin
PROGRAMACION III
INSERTAR CONTACTO
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[Insertarcontacto] @COD_CONTACTO AS char(5), @NOM_CONTACTO AS char(50), @APE_CONTACTO AS char(50), @ID_PROF AS bigint, @DIRECCION1 AS CHAR(10), @DIRECCION2 AS CHAR(100), @E_MAIL AS CHAR(50), @FECHA_NACIMIENTO AS datetime, @LUGAR_TRABAJO AS CHAR(50), @TEL_TRABAJO AS CHAR(8), @TEL_PERSONAL AS CHAR(8), @TEL_CASA AS CHAR(8) AS BEGIN
PROGRAMACION III
INSERTAR PROFESION
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[Insertarprofesion] @COD_PROF AS char(5), @DESCRIPCION as char(25)
as begin begin transaction insertar insert into DBO.PROFESIONES(COD_PROF, DESCRIPCION) VALUES (@COD_PROF, @DESCRIPCION) if @@error=0
PROGRAMACION III
LISTAR CONTACTOS
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[ListadoContactos] as begin SELECT C.COD_CONTACTO as Codigo, C.NOM_CONTACTO as Nombre, C.APE_CONTACTO as Apellido, P.DESCRIPCION as Profesin, LTRIM(RTRIM(C.DIRECCION1)) + ' ' + LTRIM(RTRIM(C.DIRECCION2)) AS Direccin, C.E_MAIL as Email, C.TEL_TRABAJO as Telefono FROM CONTACTOS C LEFT OUTER JOIN PROFESIONES P ON C.ID_PROF = P.ID_PROF end
LISTADO DE PROFESIONES
PROGRAMACION III
Quitar la direccin copia de seguridad y guardar en la carpeta de c:\CONTACTOS\BASEDATOS. VER LA PRACTICA DE REALIZAR BACKUP Y RESTAURAR BASES DE DATOS EN SQL 2008
1. Creamos nuestro proyecto de esta forma seleccionamos Crear Proyecto/ Sitio Web a. Seleccionamos Visual Basic b. Seleccionamos Web c. Seleccionamos Aplicaciones Web. ASP.NET d. Nombre: digitamos el nombre del proyecto CONTACTOS e. Ubicacin: digitamos el nombre de la carpeta donde la vamos a guardar nuestro proyecto. C:\CONTACTOS f. Nombre de la solucin es automticamente luego damos un clic en Aceptar
1. Donde a. rea de herramientas de controles que son los que se utilizan para crear nuestro formularios b. rea para disear nuestro formularios
c. Explorador de soluciones hay dos funciones una donde muestra todo el listado de nuestros formularios y el Explorador de servidores donde muestra la base datos con sus respectivas tablas d. rea de propiedades donde se configuran algunas opciones del formulario segn convenga el caso e. rea donde se ven los errores cuando se ejecuta el proyecto
4 5
2. Despus de haber creado el proyecto vamos a crear nuestra subcarpeta de base datos dentro de nuestro proyecto para que podamos guardar nuestra base datos y seguimos los siguientes pasos.
PARA RECUPERAR LA BASE DATOS ORIGINAL Realizamos lo siguiente buscar en esta ruta y copiamos los siguientes archivos a nuestro proyecto base datos c:\contactos\appdata C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data
3. Y nos en Agregar carpeta ASP.NET y luego nos posicionamos en App_Data en eta subcarpeta colocaremos nuestra base datos creada en SQL2005
Para crear nuestra base datos lo hacemos desde sql2005 y para conectar nuestra base datos lo hacemos de la siguiente manera
5.
7.
Luego nos mostrara una pantalla donde seleccionaremos Agregar Conexin daremos un clic.
8. Dar un clic en Cambiar para cambiar el servidor de sql 9. Para poder conectar la base datos.
Seleccionar examinar para buscar la ruta de la base datos donde la tenemos creada
10. Seleccionamos Archivo de base datos de Micrsoft SQL Server y luego un clic en Aceptar
11. Nos mostrara la siguiente pantalla donde digitaremos el nombre de la base datos o damos un clic en botn Examinar para buscar nuestra base datos
12. Buscamos donde creamos nuestra base datos con la ruta donde la guardramos cuando la creamos en SQL pero lo ms recomendables es guardar la base datos en la misma carpeta donde se encuentra nuestro proyecto
13. Seleccionamos la carpeta App_Data donde tenemos guardada la base datos y luego damos un clic
14. Luego de obtener nuestra base datos damos un clic en Probar Conexin
15. Nos mostrara una pantalla de conexin de prueba se realizo correctamente luego damos un clic en Aceptar
16. Nos mostrara en Explorador de Servidores la conexin de nuestra base datos con el proyecto adems mostrara tambin todas las tablas creadas en nuestra base datos.
17. Tambin podemos adicionar una nueva tabla a nuestra base datos desde asp.net
20. Ya creada nuestra base datos realizamos lo siguiente verificamos en cuadro de herramientas en la opcin Datos si esta Sql Data Adapter para conectar nuestra base datos con el formulario si no se encuentra realizamos los siguientes pasos.
21. Damos un clic derecho en el icono de puntero y seleccionamos la opcin elegir elementos esperamos unos segundos.
22. Luego nos mostrara una pantalla donde seleccionaremos cuatro elementos bsicos para poder conectar nuestra base datos con el formulario.
24. Donde en el cuadro de herramientas nos mostrara los comandos agregados a la opcin de Datos
25. Estamos listo para conectar nuestra base datos con el formulario y realizamos lo siguiente. Seleccionamos SqlDatasource y lo arrastramos hacia nuestro formulario
26. Damos un clic en siguiente seleccionando la primera opcin siempre y cuando en nuestro proyecto no estemos manejando procedimientos almacenados de lo contrario tenemos que seleccionar la segunda opcin o tercera segn convenga el caso. 27. Esta funcin nos ayudar mucho para crear nuestros formularios de consulta donde automticamente el SQL nos ayuda a crear nuestra consulta y el query que nos muestra en pantalla lo copiamos hacia el botn de consulta de nuestro formulario para que esta consulta se genere solo programaremos los botones de consulta para que muestre la informacin creada en el query de SQL. Como los muestran las siguientes pantallas.
28. Seleccionamos la tablas o tablas para realizar la consulta a travs del query que genera automticamente SQL
29. Luego seleccionadas la tabla o tablas SQL nos crea automticamente el query lo nico que tenemos que realizar es seleccionar los campos de la tabla o tablas para que genere la consulta
30.
31. Conectamos los servicios de SQL 2005 de la siguiente forma nos posicionamos en cada uno de las opciones deshabilitado.
32. Damos un clic derecho y nos posicionamos en Habilitar para poder habilitar el servicio
33. Luego de Haber habilitado los servicios damos un clic en aceptar y cerramos la pantalla de servicios de SQL2005
34. Despus de haber conectado nuestra base datos estamos listo para disear nuestro proyecto web se puede utilizar diferentes programas (Software) para disear una base datos. Hoy en da existen una infinidad de software para desarrollar pginas web entre ellos tenemos ASP.NET como integracin de formularios y base datos. Tambin tenemos Drenweaber que se integra muy fcil con la plataforma .NET. y para diseo de HTML puede utilizar el que ms les guste. A continuacin se publican unas direcciones de sitios web donde pueden bajar software para su diseo. a. www.taringa.net b. www.luchoedu.org este es un blog a lado derecho hay una opcin de Diseo dar un clic y muestra solo software para disear paginas web.
MAPA PROPUESTO
Pgina Principal
Manejo de Contactos
Manejo de Profesiones
Adicin/Modificacin de contactos
Adicin/Modificacin de Profesiones
Objetivos
Crear una clase que maneje las conexiones Utilizar el archivo web.config para parametrizar configuraciones especiales
PARA CREAR UNA CLASE REALIZAMOS LO SIGUIENTE NOS POSICIONAMOS EN EXPLORADOR DEDE SOLUCIONES LUEGO EN LA CARPETA APP_CODE CLIC DERECHO NUEVO ELEMENTO SELECCIONAMOS LA OPCION CLASE DIGITAMOS EL NOMBRE DE LA CLASE LUEGO DIGITAMOS EL CODIGO ANTERIOR EN LA NUEVA CLASE CON EL NOMBRE DE CLASEBD
PROGRAMACION III
Objetivo
Crear una pgina que verifique la conexin del usuario a la base de datos Utilizacin de las variables de Sesin para guardar el usuario y la clave 1. Crear un formulario llamado frmBienvenida, este formulario debe mostrar el men del sitio, adems de los controles necesarios para validar la conexin a la base de datos. 2. Si la conexin es exitosa debe ser mostrada la pgina de consulta de los contactos (crear un formulario llamado frmContactos en blanco)
Donde menuSitio1 es un control de usuario que permite la navegacin entre las pginas del sitio. Cada pgina del sitio debe validar que las variable de session del usuario no este vaca, en caso de estarlo debe re-dirigir a la pgina de bienvenida. Programacin del botn conectar Este botn debe tomar los valores ingresados para usuario y clave y validar la conexin, el cdigo propuesto es el siguiente: Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click Dim Conexion As SqlConnection Try Conexion = Miclase.ConexionBD(txtUsuario.Text, txtClave.Text) Conexion.Open() Session("Usuario") = txtUsuario.Text Session("Clave") = txtClave.Text Conexion.Close() Response.Redirect("frmContactos.aspx") Catch ex As Exception lblError.Text = ex.Message End Try End Sub
MICLASE
As
New
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub
Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click Dim Conexion As SqlConnection Try Conexion = Miclase.ConexionBD(txtUsuario.Text, txtClave.Text) Conexion.Open() Session("Usuario") = txtUsuario.Text Session("Clave") = txtClave.Text Conexion.Close() Response.Redirect("frmContactos.aspx") Catch ex As Exception lblError.Text = ex.Message
3. Esta clase permitir recuperar los datos de una tabla para luego vincularlos a algn control 4. Adicionalmente mostrar en una etiqueta la cantidad de registros encontrados 5. El diseo del formulario es como sigue : a. Disear una datagrid
Public Class frmContactos Inherits System.Web.UI.Page Protected WithEvents dgDatos As System.Web.UI.WebControls.DataGrid Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents lblRegistros As System.Web.UI.WebControls.Label Protected WithEvents LinkPrincipal As System.Web.UI.WebControls.HyperLink Protected WithEvents lblError As System.Web.UI.WebControls.Label Protected MICLASE As New CONTACTOS.ClasesAdicionales.ClaseBD() #Region " Web Form Designer Generated Code " 'Esta llamada es requerida por el Diseador de Web Forms. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: llamada al mtodo es requerida por el Diseador de Web Forms 'No lo modifique con el editor de cdigo. InitializeComponent() End Sub #End Region 6. En el evento load de la pagina debe ser como sigue :
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Poner el cdigo de usuario para inicializar la pgina aqu Dim Dts As DataSet Dim Tabla As DataTable If Not Page.IsPostBack Then If Session("Usuario") = Nothing Then Response.Redirect("frmBienvenida.aspx") Else ' recuperar las tablas de contactos y profesiones Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") Session("MiTabla") = Tabla dgDatos.DataSource = Tabla dgDatos.DataBind() lblRegistros.Text = Tabla.Compute("count(COD_CONTACTO)", Nothing) End If End If End Sub
Sub Paginar(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs) dgDatos.CurrentPageIndex = e.NewPageIndex ' recuperar los datos 'Dim tabla As DataTable 'tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") dgDatos.DataSource = Session("MiTabla") dgDatos.DataBind() End Sub
Sub OnDelete(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim Tabla As DataTable Dim xIdentificador As String ' para recuperar el identificador del usuarios Dim Parametros(0) As Object ' parametros del procedimiento a ejecutar en la base de datos Dim NParametros(0) As Object Dim Resultado As String ' para recuperar el indntificador xIdentificador = dgDatos.DataKeys.Item(e.Item.ItemIndex) ' para los parametros del procedimiento almacenado Parametros(0) = xIdentificador NParametros(0) = "@COD_CONTACTO" ' ejecucion del procedimiento lblError.Text = MICLASE.EliminaContactos(xIdentificador, Session("USUARIO"), Session("clave")) ' refrescar el grid dgDatos.EditItemIndex = -1
7. Examinar el cdigo anterior y luego correr el proyecto 8. Que ventaja hay sobre el uso de una clase para manejar la conexin y la recuperacin de datos? 9. Repasar el control DataGrid y la forma como cambiar aspecto y aadir columnas
2. Correr el proyecto y observar el resultado 3. Adicionalmente escribir una rutina para manejar que cada vez que haya un cambio de pagina sean refrescado el grid :
Sub Paginar(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs) dgDatos.CurrentPageIndex = e.NewPageIndex ' recuperar los datos Dim tabla As DataTable tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") dgDatos.DataSource = tabla dgDatos.DataBind() End Sub
4. Adicionalmente aadir en el html del grid que para el OnPageIndexChanged efecte el cdigo definido como "paginar" 5. Correr y probar el proyecto
6. Qu sucede cada vez que el usuario cambia de pgina? 7. Qu recomendacin puede darse para evitar que cada vez que haya cambio de pgina haya una conexin a la base de datos?
Diseo de la pgina
Crear una pagina llamada frmAgregarContactos, con el siguiente diseo: Adicionalmente aadir un link desde la pgina de contactos a esta nueva pgina. Correr el proyecto y verificar que el link funciona. Luego examinar los controles colocados en esta nueva pagina.
Campos Utilizados OBJETO ETIQUETA ETIQUETA ETIQUETA ETIQUETA ETIQUETA ETIQUETA ETIQUETA ETIQUETA PROPIEDAD Lbl Lbl Lbl Lbl Lbl Lbl Lbl LblAccion (label) Uso Codigo Asignado Profesion Nombres Apellidos Fecha de Nacimiento Correo Electronico Telefono de contacto Relacion Mostrar la operacin Laboral, personal u otro Ingresar el cdigo x asignar Ingresar el nombre del contacto n/a Validacin
CAJA DE TEXTO
txtCodigo
Requerido
CAJA DE TEXTO
txtNombre
Requerido
CAJA DE TEXTO
txtFechaNacimiento Ingresar la fecha de nacimiento txtCorreo Ingresar el correo electrnico Botn que permite grabar el registro Botn que permite cancelar la opcin
CAJA DE TEXTO
BOTONES
btnGrabar
BOTONES
btnCancelar
ddlProfesion
lblError
1. Crear un procedimiento almacenado que inserte o modifique registros a la tabla de contactos. GUARDARLO CON EL NOMBRE DE
sp_InsertaModifica_CONTACTOS
CREATE PROCEDURE [dbo].[sp_InsertaModifica_CONTACTOS] @COD_CONTACTO CHAR(5), @NOM_CONTACTO CHAR(50), @APE_CONTACTO CHAR(50), @COD_PROF CHAR(5) , @TIPO CHAR(1), @E_MAIL CHAR(50), @TEL_PERSONAL CHAR(8), @FECHA_NACIMIENTO DATETIME,@ACCION CHAR(1) AS BEGIN IF @ACCION = 'A'
INSERT INTO CONTACTOS (COD_CONTACTO,NOM_CONTACTO,APE_CONTACTO,COD_PROF,TIPO,E_MAIL,TEL_PERSO NAL, FECHA_NACIMIENTO) VALUES(@COD_CONTACTO,@NOM_CONTACTO,@APE_CONTACTO,@COD_PROF,@TIPO, @E_MAIL,@TEL_PERSONAL, @FECHA_NACIMIENTO) ELSE UPDATE CONTACTOS SET NOM_CONTACTO = @NOM_CONTACTO, APE_CONTACTO = @APE_CONTACTO, COD_PROF = @COD_PROF, TIPO = @TIPO, E_MAIL = @E_MAIL, TEL_PERSONAL = @TEL_PERSONAL, FECHA_NACIMIENTO = @FECHA_NACIMIENTO WHERE COD_CONTACTO = @COD_CONTACTO END GO
2. Crear una funcin que permita crear el registro Public Function InsertaModificaContactos(ByVal Accion As String, ByVal cod_contacto As String, ByVal nom_contacto As String, ByVal ape_contacto As String, ByVal cod_prof As String, ByVal tipo As String, ByVal e_mail As String, ByVal tel_personal As String, ByVal fecha_nacimiento As String, ByVal usuario As String, ByVal clave As String) As String Dim Conexion As SqlConnection Dim Comando As SqlCommand Dim Parametros As SqlParameter Dim resultado As String Try
Conexion = ConexionBD(usuario, clave) Comando = New SqlCommand("sp_InsertaModifica_CONTACTOS", Conexion) Comando.CommandType = CommandType.StoredProcedure Comando.Parameters.Add("@cod_contacto", cod_contacto) Comando.Parameters.Add("@nom_contacto", nom_contacto) Comando.Parameters.Add("@ape_contacto", ape_contacto) Comando.Parameters.Add("@cod_prof", cod_prof) Comando.Parameters.Add("@tipo", tipo) Comando.Parameters.Add("@e_mail", e_mail) Comando.Parameters.Add("@tel_personal", tel_personal) Comando.Parameters.Add("@fecha_nacimiento", CDate(fecha_nacimiento)) Comando.Parameters.Add("@accion", Accion) Conexion.Open() Comando.ExecuteNonQuery() Conexion.Close() resultado = "Registro Grabado" Return resultado Catch ex As Exception resultado = ex.Message Return resultado End Try End Function
3. Programar el botn de grabar para ejecutar el procedimiento de insercin y mostrar el resultado Private Sub btnCrear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrear.Click lblError.Text = MICLASE.InsertaModificaContactos(IIf(Trim(lblAccion.Text) =
"Aadir un nuevo Contacto", "A", "M"), txtCodigo.Text, txtNombre.Text, txtApellido.Text, ddlProfesion.SelectedItem.Value, rblRelacion.SelectedItem.Value, txtCorreo.Text, txtTelefono.Text, txtFechaNacimiento.Text, Session("USUARIO"), Session("clave")) End Sub 4. Correr y verificar el resultado 5. Que tenemos hasta ahora? a. Utilizacin de funciones para manejar conexin y otros b. Utilizacin de funciones para recuperar Datables c. Manejo de Errores d. Utilizacin de funciones para ejecutar procedimientos e insertar registros
Cmo se ha logrado la insercin de un registro? A travs de la ejecucin de un procedimiento en la base de datos con los parmetros del caso, adicionalmente se envi el tipo de accion (A indica si es adicin y M servir para la modificacin)
La nueva columna permitir navegar hasta la pagina de AgregarContactos, adems de indicar el codigo del contacto que ha sido seleccionado (FrmAgregarContactos.aspx?COD_CONTACTO={0}) 2. Correr y verificar el resultado
En el load aadimos (antes de poblar la tabla de profesiones) ' evaluar si se trata de una modificacion If Request.QueryString("COD_CONTACTO") <> "" Then lblAccion.Text = "Modificar contacto existente" End If
3. Correr y verificar el resultado 4. Adicionalmente debemos recuperar los datos del contacto seleccionado y mostrar en cada control del formulario los datos segn aplique. 5. El control de profesiones debe mostrar la profesin del contacto, adicionalmente debe permitir elegir otra profesin 6. La propuesta del evento Load es como sigue : Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then Dim tabla As DataTable ' evaluar si se trata de una modificacion If Request.QueryString("COD_CONTACTO") <> "" Then lblAccion.Text = "Modificar contacto existente" ' recuperar los datos del contacto Dim xCodigoProfesion tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS WHERE COD_CONTACTO= " & "'" & Request.QueryString("COD_CONTACTO") & "'") txtCodigo.Text = trim(tabla.Rows(0).Item("cod_contacto"))
txtCodigo.Enabled = False txtApellido.Text = trim(tabla.Rows(0).Item("ape_contacto")) txtNombre.Text = trim(tabla.Rows(0).Item("nom_contacto")) txtFechaNacimiento.Text = trim(tabla.Rows(0).Item("fecha_nacimiento")) txtCorreo.Text = trim(tabla.Rows(0).Item("e_mail")) txtTelefono.Text = trim(tabla.Rows(0).Item("tel_personal")) xCodigoProfesion = trim(tabla.Rows(0).Item("cod_prof")) tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES where cod_prof=" & "'" & xCodigoProfesion & "'") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = tabla ddlProfesion.DataBind() ' incluir una opcion para elegir ddlProfesion.Items.Add("*SELECCIONAR OTROS") Else ' poblar la tabla de profesiones tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = tabla ddlProfesion.DataBind()
7. Adicionalmente debe programarse que al momento de elegir otra profesion, se desplieguen en el cuadro de lista las otras profesiones : a. Asegurar que el AutoPostback del cuadro de lista este en true b. Programar el evento Private Sub ddlProfesion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlProfesion.SelectedIndexChanged If ddlProfesion.SelectedItem.Text = "*SELECCIONAR OTROS" Then Dim Tabla As DataTable Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = Tabla ddlProfesion.DataBind() End If End Sub 8. Revisar y discutir el nuevo cdigo que permite la modificacin del registro 9. Probar y verificar el proyecto
Presentacin de Resultados
PROGRAMACION III
Por el momento estn implantadas las siguientes funcionalidades: Agregar un registro Modificar un registro
Ahora propondremos la siguiente solucin para permitir al usuario eliminar un contacto: Aadir un celda para Eliminar Al presionar esta celda en un registro determinado, se ejecuta un procedimiento de eliminacin del registro El grid de consulta de contactos se actualiza para mostrar los existentes
CREATE PROCEDURE [dbo].[sp_Elimina_CONTACTOS] @COD_CONTACTO CHAR(5) AS BEGIN DELETE CONTACTOS WHERE COD_CONTACTO = @COD_CONTACTO END
Modificaciones en el formulario
2. Aadir el cdigo necesario en la clase ClaseBD para manejar la ejecucin del anterior procedimiento : Public Function EliminaContactos(ByVal cod_contacto As String, ByVal usuario As String, ByVal clave As String) As String Dim Conexion As SqlConnection Dim Comando As SqlCommand Dim Parametros As SqlParameter Dim resultado As String
End Function
Esta funcin retornara un valor string en el caso de que se produzca un error, por lo tanto tambin es necesario agregar a la forma de contactos una etiqueta de error (lblerror). 3. Sobre el formulario frmContactos.aspx para el grid dgDatos aadir una columna tipo ButtonColumn y el Texto del botn debe indicar Eliminar. 4. Indicar en la propiedad DataKeyField (del grid) el campo llave de la tabla vinculada (COD_CONTACTO) 5. Correr el proyecto y verificar que la columna aparezca. 6. Aadir un procedimiento en el codigo que se encargue de la ejecucin del registro seleccionado :
Sub OnDelete(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim Tabla As DataTable Dim xIdentificador As String ' para recuperar el identificador del usuarios Dim Parametros(0) As Object ' parametros del procedimiento a ejecutar en la base de datos Dim NParametros(0) As Object Dim Resultado As String ' para recuperar el indntificador xIdentificador = dgDatos.DataKeys.Item(e.Item.ItemIndex) ' para los parametros del procedimiento almacenado Parametros(0) = xIdentificador NParametros(0) = "@COD_CONTACTO" ' ejecucion del procedimiento lblError.Text = MICLASE.EliminaContactos(xIdentificador, Session("USUARIO"), Session("clave")) ' refrescar el grid dgDatos.EditItemIndex = -1 dgDatos.CurrentPageIndex = 0 Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") Session("MiTabla") = Tabla dgDatos.DataSource = Tabla dgDatos.DataBind() lblRegistros.Text = Tabla.Compute("count(COD_CONTACTO)", Nothing) End Sub
7. Correr y verificar el resultado, pudo eliminarse un registro? 8. Asociar el proc OnDelete con el grid dgDatos en vista HTML ubicar la definicin del grid y agregar OnDeleteCommand ="OnDelete" 9. Correr y verificar el resultado 10. Al correr la pagina debe lucir de la siguiente forma :
PROGRAMACION III
Ahora implantaremos el envo de correo electrnico para un contacto, disponiendo de dos puntos para el envo: Pgina de modificacin del contacto Men Principal del sistema
3. Aadir en el web.config un valor para indicar la ip del servidor de correo a utilizar ( <add key = "ServidorCorreoOtro" value = "200.12.229.147"/>) 4. Aadir la programacin necesaria para efectuar el envo, para esto se utiliza la clase web.mail, la referencia a esta clase debe ir al principio del cdigo escondido del formulario.
Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click Dim resultado As Integer
Dim objMM As New MailMessage() objMM.To = txtPara.Text objMM.From = txtDe.Text objMM.BodyFormat = MailFormat.Text objMM.Priority = MailPriority.Normal objMM.Subject = txtAsunto.Text objMM.Body = txtContenido.Text SmtpMail.SmtpServer = ConfigurationSettings.AppSettings("ServidorCorreo") SmtpMail.Send(objMM) End Sub
5. Aadir en la pgina de modificar formulario un link que permita llegar a la pagina de envo de formulario, este link debe estar visible nicamente si se trata de una modificacin, adicionalmente al cargar el formulario de envo de correo debe aparecer el correo del destinatario. Cambiar la propiedad visible del link a false, de esta forma cuando se evala si es una modificacin ah nuevamente cambiar a true : ' para enviar un correo linkEnviarCorreo.Visible = True linkEnviarCorreo.NavigateUrl= "frmEnviarCorreo.aspx?CorreoDestino=" & txtCorreo.Text
6. Al cargar la pagina del envo de correo debe leerse la variable CorreoDestino, si esta definida mostrarse en el cuadro de texto utilizado para el destino del correo, adicionalmente cada cuadro de texto debe tener los controles de validacin suficientes y necesarios. 7. Correr el proyecto y verificar el resultado 8. Examinar el objeto y cdigo que es utilizado para el envo de correo 9. Que es imprescindible para lograr el envo de un correo con xito?
PROGRAMACION III
Esta funcionalidad requiere que desde el men el usuario pueda cargar la pagina de envo de correos, nicamente es necesario aadir un link al control de usuario responsable del men para acceder a la pgina de envo de correos.
Para finalizar
Identificar puntos de mejora en la propuesta, Que cdigo puede ser convertido en clase? Qu manejos de errores no estn considerados? Qu validaciones por formulario estn pendientes?
Investigar la rutina necesaria para cargar una imagen por contacto, adicionalmente el cdigo necesario para que al cargar la pgina de modificacin del contacto se despliegue la imagen asociada.
Investigar los cambios necesarios para permitir desde el grid hacer una modificacin uso de una columna select para modificar.
Anexo 1 - Formulario de agregar antes de hacer los cambios para poder modificar un registro
Public Class frmAgregarContactos Inherits System.Web.UI.Page Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents Label3 As System.Web.UI.WebControls.Label Protected WithEvents Label4 As System.Web.UI.WebControls.Label Protected WithEvents Label5 As System.Web.UI.WebControls.Label Protected WithEvents Label6 As System.Web.UI.WebControls.Label Protected WithEvents txtCodigo As System.Web.UI.WebControls.TextBox Protected WithEvents txtNombre As System.Web.UI.WebControls.TextBox Protected WithEvents txtFechaNacimiento As System.Web.UI.WebControls.TextBox Protected WithEvents txtCorreo As System.Web.UI.WebControls.TextBox Protected WithEvents txtTelefono As System.Web.UI.WebControls.TextBox Protected WithEvents rblRelacion As System.Web.UI.WebControls.RadioButtonList Protected WithEvents btnCrear As System.Web.UI.WebControls.Button Protected WithEvents btnCancelar As System.Web.UI.WebControls.Button Protected WithEvents txtApellido As System.Web.UI.WebControls.TextBox
Protected WithEvents RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator2 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator3 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator4 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator5 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator6 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents CompareValidator1 As System.Web.UI.WebControls.CompareValidator Protected WithEvents RegularExpressionValidator1 As System.Web.UI.WebControls.RegularExpressionValidator Protected WithEvents ddlProfesion As System.Web.UI.WebControls.DropDownList Protected WithEvents Label7 As System.Web.UI.WebControls.Label Protected WithEvents lblError As System.Web.UI.WebControls.Label Protected WithEvents lblAccion As System.Web.UI.WebControls.Label Protected MICLASE As New CONTACTOS.ClasesAdicionales.ClaseBD()
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then Dim tabla As DataTable ' poblar la tabla de profesiones tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = tabla ddlProfesion.DataBind() End If End Sub
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click Response.Redirect("frmContactos.aspx")
lblError.Text = MICLASE.InsertaModificaContactos(IIf(Trim(lblAccion.Text) = "Aadir un nuevo Contacto", "A", "M"), txtCodigo.Text, txtNombre.Text, txtApellido.Text, ddlProfesion.SelectedItem.Value, rblRelacion.SelectedItem.Value, txtCorreo.Text, txtTelefono.Text, txtFechaNacimiento.Text, Session("USUARIO"), Session("clave"))
Public Class frmAgregarContactos Inherits System.Web.UI.Page Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents Label3 As System.Web.UI.WebControls.Label Protected WithEvents Label4 As System.Web.UI.WebControls.Label Protected WithEvents Label5 As System.Web.UI.WebControls.Label Protected WithEvents Label6 As System.Web.UI.WebControls.Label Protected WithEvents txtCodigo As System.Web.UI.WebControls.TextBox Protected WithEvents txtNombre As System.Web.UI.WebControls.TextBox Protected WithEvents txtFechaNacimiento As System.Web.UI.WebControls.TextBox Protected WithEvents txtCorreo As System.Web.UI.WebControls.TextBox Protected WithEvents txtTelefono As System.Web.UI.WebControls.TextBox Protected WithEvents rblRelacion As System.Web.UI.WebControls.RadioButtonList Protected WithEvents btnCrear As System.Web.UI.WebControls.Button Protected WithEvents btnCancelar As System.Web.UI.WebControls.Button Protected WithEvents txtApellido As System.Web.UI.WebControls.TextBox
Protected WithEvents RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator2 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator3 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator4 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator5 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator6 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents CompareValidator1 As System.Web.UI.WebControls.CompareValidator Protected WithEvents RegularExpressionValidator1 As System.Web.UI.WebControls.RegularExpressionValidator Protected WithEvents ddlProfesion As System.Web.UI.WebControls.DropDownList Protected WithEvents Label7 As System.Web.UI.WebControls.Label Protected WithEvents lblError As System.Web.UI.WebControls.Label Protected WithEvents lblAccion As System.Web.UI.WebControls.Label Protected WithEvents linkEnviarCorreo As System.Web.UI.WebControls.HyperLink Protected MICLASE As New CONTACTOS.ClasesAdicionales.ClaseBD()
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then Dim tabla As DataTable ' evaluar si se trata de una modificacion If Request.QueryString("COD_CONTACTO") <> "" Then lblAccion.Text = "Modificar contacto existente" ' recuperar los datos del contacto Dim xCodigoProfesion As String Dim xRelacion As String tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS WHERE COD_CONTACTO= " & "'" & Request.QueryString("COD_CONTACTO") & "'") txtCodigo.Text = tabla.Rows(0).Item("cod_contacto") txtCodigo.Enabled = False
txtApellido.Text = Trim(tabla.Rows(0).Item("ape_contacto")) txtNombre.Text = Trim(tabla.Rows(0).Item("nom_contacto")) txtFechaNacimiento.Text = Trim(tabla.Rows(0).Item("fecha_nacimiento")) txtCorreo.Text = Trim(tabla.Rows(0).Item("e_mail")) txtTelefono.Text = Trim(tabla.Rows(0).Item("tel_personal")) xCodigoProfesion = Trim(tabla.Rows(0).Item("cod_prof")) xRelacion = Trim(tabla.Rows(0).Item("tipo")) If xRelacion = "P" Then rblRelacion.Items(0).Selected = False rblRelacion.Items(1).Selected = True ElseIf xRelacion = "O" Then rblRelacion.Items(0).Selected = False rblRelacion.Items(2).Selected = True End If
tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES where cod_prof=" & "'" & xCodigoProfesion & "'") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = tabla ddlProfesion.DataBind() ' incluir una opcion para elegir ddlProfesion.Items.Add("*SELECCIONAR OTROS") ' para enviar un correo
linkEnviarCorreo.Visible = True linkEnviarCorreo.NavigateUrl = "frmEnviarCorreo.aspx?CorreoDestino=" & txtCorreo.Text Else ' poblar la tabla de profesiones tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = tabla ddlProfesion.DataBind() End If End If End Sub
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click Response.Redirect("frmContactos.aspx") End Sub
lblError.Text = MICLASE.InsertaModificaContactos(IIf(Trim(lblAccion.Text) = "Aadir un nuevo Contacto", "A", "M"), txtCodigo.Text, txtNombre.Text, txtApellido.Text, ddlProfesion.SelectedItem.Value, rblRelacion.SelectedItem.Value, txtCorreo.Text, txtTelefono.Text, txtFechaNacimiento.Text, Session("USUARIO"), Session("clave"))
Private Sub ddlProfesion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlProfesion.SelectedIndexChanged If ddlProfesion.SelectedItem.Text = "*SELECCIONAR OTROS" Then Dim Tabla As DataTable Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from PROFESIONES") ddlProfesion.DataTextField = "DESCRIPCION" ddlProfesion.DataValueField = "COD_PROF" ddlProfesion.DataSource = Tabla ddlProfesion.DataBind() End If End Sub End Class
Public Class frmContactos Inherits System.Web.UI.Page Protected WithEvents dgDatos As System.Web.UI.WebControls.DataGrid Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents lblRegistros As System.Web.UI.WebControls.Label Protected WithEvents LinkPrincipal As System.Web.UI.WebControls.HyperLink Protected WithEvents lblError As System.Web.UI.WebControls.Label Protected MICLASE As New CONTACTOS.ClasesAdicionales.ClaseBD() #Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here Dim Dts As DataSet Dim Tabla As DataTable If Not Page.IsPostBack Then If Session("Usuario") = Nothing Then Response.Redirect("frmBienvenida.aspx") Else ' recuperar las tablas de contactos y profesiones
Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") Session("MiTabla") = Tabla dgDatos.DataSource = Tabla dgDatos.DataBind() lblRegistros.Text = Tabla.Compute("count(COD_CONTACTO)", Nothing)
End Sub
Sub OnDelete(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim Tabla As DataTable Dim xIdentificador As String ' para recuperar el identificador del usuarios Dim Parametros(0) As Object ' parametros del procedimiento a ejecutar en la base de datos Dim NParametros(0) As Object Dim Resultado As String ' para recuperar el indntificador xIdentificador = dgDatos.DataKeys.Item(e.Item.ItemIndex) ' para los parametros del procedimiento almacenado Parametros(0) = xIdentificador NParametros(0) = "@COD_CONTACTO" ' ejecucion del procedimiento lblError.Text = MICLASE.EliminaContactos(xIdentificador, Session("USUARIO"), Session("clave")) ' refrescar el grid dgDatos.EditItemIndex = -1 dgDatos.CurrentPageIndex = 0
Tabla = MICLASE.RecuperarTabla(MICLASE.ConexionBD(Session("USUARIO"), Session("CLAVE")), "select * from CONTACTOS") Session("MiTabla") = Tabla dgDatos.DataSource = Tabla dgDatos.DataBind() lblRegistros.Text = Tabla.Compute("count(COD_CONTACTO)", Nothing)
End Sub
End Class
Imports System.Web.Mail
Public Class frmEnviarCorreo Inherits System.Web.UI.Page Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents txtDe As System.Web.UI.WebControls.TextBox Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents Label3 As System.Web.UI.WebControls.Label Protected WithEvents txtPara As System.Web.UI.WebControls.TextBox Protected WithEvents txtAsunto As System.Web.UI.WebControls.TextBox Protected WithEvents Label4 As System.Web.UI.WebControls.Label Protected WithEvents Label5 As System.Web.UI.WebControls.Label Protected WithEvents btnEnviar As System.Web.UI.WebControls.Button Protected WithEvents RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator2 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator3 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents RequiredFieldValidator4 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents txtContenido As System.Web.UI.WebControls.TextBox
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not Page.IsPostBack Then txtPara.Text = Request.QueryString("CorreoDestino")
Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click Dim resultado As Integer Dim objMM As New MailMessage() objMM.To = txtPara.Text objMM.From = txtDe.Text objMM.BodyFormat = MailFormat.Text objMM.Priority = MailPriority.Normal objMM.Subject = txtAsunto.Text objMM.Body = txtContenido.Text SmtpMail.SmtpServer = ConfigurationSettings.AppSettings("ServidorCorreo") SmtpMail.Send(objMM) txtAsunto.Text = "" txtContenido.Text = "" End Sub End Class