Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Descripción de la aplicación
El sitio debe permitir efectuar ventas por internet y la vez permitir al administrador
hacer un mantenimiento de la base de datos y actualizar la lista de productos.
<appSettings/>
<connectionStrings>
<add name="cn" connectionString="data source =.;database=carrito2007;user
id=sa;password=;integrated security=true;"
providerName="System.Data.SqlClient=" />
</connectionStrings>
Esta cadena de conexión dentro del archivo web.config, permite modificar de una
forma mas sencilla la conexión de la base de datos ya que es mucho mas sencillo al
momento de llevar al servidor y ejecutar las aplicación ya que el archivo web
config es un archivo XML.
Para ello crearemos la pagina principal es decir la pagina index.aspx, esta pagina
esta diseñada en DreamWeaver.
Solución.
Propiedad
Asp:label lblmensaje
Asp:Textbox Txtnombre
Asp:Textbox Txtempresa
Asp:Textbox Txtpais
Asp:Textbox txtciudad
Asp:Textbox Txtemail
Txtnombre
Txtpais
txtciudad
Txtemail
Txtclave
txtrclave
Asp: revemail
RegularExpressionValida ControlToValidat
tor e
Txtemail
ValidationExpres
sion
Dirección de correo
Electrónico de
Internet
ErrorMessage
Ingrese un correo
Valido
Las contraseñas no
coinciden
ControlToCompar
e
txtClave
ControlToValidat
e
txtrclave
ShowMessagebox
: True
@idcliente nvarchar(5),
@nomcliente nvarchar(30),
@email nvarchar(24),
@empresa nvarchar(40),
@pais nvarchar(15),
@ciudad nvarchar(15),
@clave nvarchar(24)
as
insert into
clientes(idcliente,nomcliente,email,empresa,pais,ciudad,clave)values
(@idcliente,@nomcliente,@email,@empresa,@pais,@ciudad,@clave)
GO
GO
SET ANSI_NULLS ON
GO
Imports System.Data.SqlClient
Imports System.Data
6. Una vez que se allá establecido la cadena de conexión hacer doble clic en el
botón aceptar y codificar lo siguiente.
Try
Dim nom, email, clave As String
email = Me.txtemail.Text.Trim.ToCharArray(0, 2)
nom = Me.txtnombre.Text.Trim.ToCharArray(0, 2)
clave = Me.txtclave.Text.Trim.ToCharArray(0, 2)
Me.txtid.Text = clave + nom + email
Dim cmd As New SqlCommand("select * from clientes where email='" &
Me.txtemail.Text & "'", carritocn)
Dim dr As SqlDataReader
carritocn.Open()
dr = cmd.ExecuteReader()
If dr.Read Then
If dr("email") = txtemail.Text Then
lblmensaje.Text = "E-mail Registrado "
carritocn.Close()
End If
Else
carritocn.Close()
Dim ocmd As New SqlCommand
ocmd.Connection = carritocn
ocmd.CommandType = Data.CommandType.StoredProcedure
ocmd.CommandText = "insertarcliente"
Dim prm1 As New SqlParameter("@idcliente",
Data.SqlDbType.NVarChar, 5)
prm1.Direction = Data.ParameterDirection.Input
prm1.Value = Me.txtid.Text
ocmd.Parameters.Add(prm1)
Dim prm2 As New SqlParameter("@nomcliente",
Data.SqlDbType.NVarChar, 30)
prm2.Direction = Data.ParameterDirection.Input
prm2.Value = Me.txtnombre.Text
ocmd.Parameters.Add(prm2)
Dim prm3 As New SqlParameter("@email", Data.SqlDbType.NVarChar,
100)
prm3.Direction = Data.ParameterDirection.Input
prm3.Value = Me.txtemail.Text
ocmd.Parameters.Add(prm3)
Dim prm4 As New SqlParameter("@empresa",
Data.SqlDbType.NVarChar, 40)
prm4.Direction = Data.ParameterDirection.Input
prm4.Value = Me.txtempresa.Text
ocmd.Parameters.Add(prm4)
Dim prm5 As New SqlParameter("@pais", Data.SqlDbType.NVarChar,
15)
prm5.Direction = Data.ParameterDirection.Input
prm5.Value = Me.txtpais.Text
ocmd.Parameters.Add(prm5)
Dim prm6 As New SqlParameter("@ciudad", Data.SqlDbType.NVarChar,
15)
prm6.Direction = Data.ParameterDirection.Input
prm6.Value = Me.txtciudad.Text
ocmd.Parameters.Add(prm6)
Como hemos visto a un bloque try le deben corresponder uno o más bloques catch,
y hay veces en las que también le puede corresponder un bloque finally, aunque no
de forma obligatoria.
En un bloque finally escribiremos todo el código de limpieza (liberar objetos,
ficheros, etc.) en el caso de que se produzca una excepción, finally nos asegura que
todas las sentencias de su bloque se ejecutarán cuando se produzca la excepción,
una vez tratada por el bloque catch correspondiente. Se debe tener en cuenta que
el bloque finally siempre se ejecutará, aunque no se haya producido una excepción.
Ofrecemos un esquema de código que relaciona estos tres tipos de bloques, así un
bloque try tendrá uno o más bloques catch y uno o ningún bloques finally.
try {
...
} catch (ClaseExcepción nombreVariable) {
...
} [catch (ClaseExcepción nombreVariable) {
...
}
[....]
[finally{
.....
}]
Para lanzar una excepción desde nuestro código utilizaremos la palabra reservada
throw, su sintaxis es muy sencilla únicamente debe ir seguida de un objeto que
representa la excepción que se ha producido, que será un objeto que hereda de la
clase System.Exception.
Una vez comentada la teoría sobre el tratamiento de excepciones con los bloques
try/catch, vamos a ver un ejemplo muy sencillo de utilización de estos bloques
dentro de una página ASP .NET.
En los bloques catch aparece un código muy similar en todos los casos, que
consiste en mostrar el mensaje de error correspondiente, en ocultar la caja de
texto que contiene le texto del fichero y en eliminar su contenido.
En el bloque finally únicamente se muestra un texto para demostrar que este
bloque siempre se va ejecutar.
Código Autogenerado
nom = Me.txtnombre.Text.Trim.ToCharArray(0, 2)
Seguidamente se declara la segunda variable y toma el valor del
siguuiente textbox.
email = Me.txtemail.Text.Trim.ToCharArray(0, 2)
clave = Me.txtclave.Text.Trim.ToCharArray(0, 2)
Dim dr As SqlDataReader
carritocn.Open()
dr = cmd.ExecuteReader()
If dr.Read Then
Else
carritocn.Close()
ocmd.Connection = carritocn
ocmd.CommandType = Data.CommandType.StoredProcedure
ocmd.CommandText = "insertarcliente"
prm1.Value = Me.txtid.Text
ocmd.Parameters.Add(prm1)
20. De la misma forma crear parametros para cada uno de los procedimientos
almacenados.
prm4.Direction = Data.ParameterDirection.Input
prm4.Value = Me.txtempresa.Text
ocmd.Parameters.Add(prm4)
Dim prm5 As New SqlParameter("@pais", Data.SqlDbType.NVarChar,
15)
prm5.Direction = Data.ParameterDirection.Input
prm5.Value = Me.txtpais.Text
ocmd.Parameters.Add(prm5)
Dim prm6 As New SqlParameter("@ciudad", Data.SqlDbType.NVarChar,
15)
prm6.Direction = Data.ParameterDirection.Input
prm6.Value = Me.txtciudad.Text
ocmd.Parameters.Add(prm6)
Dim prm7 As New SqlParameter("@clave", Data.SqlDbType.NVarChar,
24)
prm7.Direction = Data.ParameterDirection.Input
prm7.Value = Me.txtclave.Text
ocmd.Parameters.Add(prm7)
carritocn.Open()
ocmd.ExecuteNonQuery()
Me.Response.Redirect("seguridad.aspx")
carritocn.Close()
End If
Catch ex As Exception
lblmensaje.Text = ex.Message
Finally
cn.close ()
End Try
Control Propiedad
ID Text Propiedades
As
GO
prm8.Direction = ParameterDirection.Input
Me.FileUpload1.SaveAs("C:\Inetpub\wwwroot\proyecto\imagenesclientes\" &
Me.FileUpload1.FileName)
ocmd.Parameters.Add(prm8)
Directivas
De forma similar a las directivas vistas para las páginas ASP .NET, el fichero
GLOBAL.ASAX posee sus propias directivas que indican a ASP .NET como se debe
compilar este fichero.
El fichero GLOBAL.ASAX presenta tres directivas distintas: Application, Import y
Assembly, cada una de ellas tiene sus respectivos atributos. Vamos a comentar
estas directivas:
GLOBAL.ASAX. Por defecto la clase padre del fichero GLOBAL.ASAX va a ser la clase
System.Web.HttpApplication, esta clase representa una aplicación ASP .NET.
• Assembly: al igual que sucedía con la directiva anterior, esta otra directiva del
fichero GLOBAL.ASAX tiene el mismo significado que la directiva Assembly de las
páginas ASP.NET. .Esta directiva nos va a permitir utilizar un assembly
directamente en el fichero GLOBAL:ASAX. Para indicar el assembly que deseamos
utilizar, esto implica instanciar objetos de las clases contenidas en el assembly y
utilizar sus propiedades y métodos como los de cualquier clase del .NET
Framework, disponemos de los siguientes atributos excluyentes entre sí:
o Src: en este caso se debe indicar el camino al fichero de código fuente que define
el assembly, en este caso si se debe indicar la extensión correspondiente.
Declaración de código
Normalmente estos bloques de código van a contener los métodos que van a tratar
los eventos a nivel de aplicación.
El resultado del código anterior, al ejecutar por primera vez un usuario una página
ASP .NET de la aplicación correspondiente.
<!--#include Virtual|File="nombrearchivo"-->
Virtual y File indican el tipo de ruta de acceso que se utiliza para incluir el archivo,
virtual y relativa respectivamente. Por ejemplo, si el archivo a incluir, llamado
incluido.inc, se encuentra en el directorio virtual /miWeb se debería escribir el
Código fuente .
<!--#include Virtual="/miWeb/incluido.inc"-->
<!--#INCLUDE FILE="subdirectorio/incluido.inc"-->
Los archivos incluidos no requieren una extensión especial. Los ficheros incluidos
puede ser muy útiles, sobre todo aquellos que se incluyen utilizando la opción
Virtual, ya qu enos permite acceder a un fichero que puede localizarse en un
directorio común que puede ser compartido por diversas aplicaciones ASP .NET.
Para realizar esta declaración de objetos dentro del fichero GLOBAL.ASAX se debe
hacer uso de la etiqueta <object>. Esta forma de crear objetos ya se encontraba
disponible en ASP para el fichero GLOBAL.ASA de las aplicaciones.
El objeto no será instanciado hasta que no sea utilizado por primera vez dentro de
la aplicación ASP.NET correspondiente. Una vez descritos los distintos elementos
que podemos encontrar en el fichero GLOBAL.ASAX de una aplicación ASP .NET,
vamos a ocuparnos de las funcionalidades que ofrece este fichero global de la
aplicación. En primer lugar vamos a comentar los distintos eventos de la aplicación
que podemos tratar dentro del fichero GLOBAL.ASAX, y en segundo lugar se
detallarán las distintas alternativas que nos ofrece la aplicación ASP .NET para
mantener los objetos o valores de variables a través de la vida de la aplicación.
Eventos de la aplicación
Los eventos de la aplicación son una serie de eventos que se lanzan de forma
global a la aplicación y que van a ser tratados en los métodos correspondientes
dentro del fichero GLOBAL.ASAX. Estos eventos tienen el mismo significado que los
eventos que eran atrapados en el fichero GLOBAL.ASA de las aplicaciones ASP, pero
en ASP .NET se ha ampliado el número de eventos, de cuatro eventos disponibles
en ASP se han pasado a dieciocho eventos.
Los métodos encargados de tratar estos eventos tienen todos un prototipo común,
es decir, todos ellos presentan los mismos tipos de parámetros. El primer
parámetro es un objeto de la clase Object que va a contener el objeto que ha
se puede observar el prototipo que poseen los métodos del fichero GLOBAL.ASAX
que nos van a permitir tratar los eventos de la aplicación.
También es posible utilizar una versión reducida de estos prototipos (Código fuente
263), en este caso se suprimen los parámetros de los métodos. Se considera una
buena práctica hacer uso de la primera alternativa.
void MétodoQueTrataEvento() {
}
Los eventos por petición de la aplicación (per-request) son aquellos eventos que se
lanzan durante cada petición realizada a una aplicación ASP .NET. Vamos a
describir brevemente los distintos eventos que se encuentran dentro de este grupo,
el orden en el que comentan los distintos evento es el orden en el que se ejecutan:
En este esquema se muestra que el servidor Web IIS recibe una petición que es
pasada automáticamente al entorno de ejecución de ASP .NET. Los eventos de la
aplicación ASP .NET se lanzan comenzando con el evento
Application_OnBeginRequest. Inmediatamente antes de que sea tratada la petición
por se lanza el evento Application_OnPreRequestHandlerExecute. Inmediatamente
después de procesar la página se ejecuta lanza el evento
Application_OnPostRequestHandlerExecute. Y finalmente antes de que la respuesta
sea devuelta por el servidor IIS se lanzará el evento Application_OnEndRequest.
El fichero GLOBAL.ASAX que aparece en el Código fuente 264 nos muestra el orden
de ejecución de estos eventos que se producen por cada petición realizada.
En la siguiente Figura se puede ver el resultado de ejecutar una página ASP .NET, si
volvemos a ejecutar la página se ejecutarán de nuevo todos los eventos.
Dentro del grupo de los eventos de aplicación que se producen por cada solicitud,
hemos extraído dos de ellos, ya que estos no se lanzan en un orden determinado,
sino que se lanzan en el momento en que es posible devolver datos al cliente.
Por defecto ASP .NET activa el mecanismo de búfer a la hora de enviar la respuesta
al cliente, es decir la respuesta no se envía inmediatamente al cliente sino que
ASP .NET procesará la página en el servidor antes de enviar algo al usuario. El
contenido del búfer no es enviado al navegador hasta que no se haya terminado de
procesar la página o hasta que los métodos End o Flush del objeto Response no son
invocados. Una vez que ya se ha enviado contenido al navegador del cliente, no se
puede modificar su valor.
Eventos condicionales
Los eventos del grupo anterior eran fijos para cada solicitud, es decir, siempre se
producían, pero este otro grupo de eventos se producen cuando se cumple una
condición determinada en cada caso, vamos a pasar a comentar estos otros
eventos, muchos de ellos ya existían en el fichero GLOBAL.ASA de ASP:
Para que se ejecuten todos los presentes en nuestro fichero GLOBAL.ASAX tenemos
que seguir los siguientes pasos: nos aseguramos que la aplicación no se esté
ejecutando, a continuación cargamos una página ASP .NET, en ese momento se
ejecutará primero el evento Application_OnStart y a continuación el evento
Sesson_OnStart; para forzar los tres eventos que nos quedan podemos modificar el
código fuente del fichero GLOBAL.ASAX, al modificar su código se fuerza a la
compilación de dicho fichero de la aplicación, lo que supone antes finalizar la
ejecución de la aplicación, lanzar los eventos Session_OnEnd,
Application_OnDisposed y Application_OnEnd, en este mismo orden. Si abrimos el
fichero EventosAplicacion.txt (que se encontrará en el directorio
c:\winnt\system32, ya que no hemos indicado ninguna ruta determinada)
podremos observar que presenta el contenido.
Evento Application_OnStart
Evento Session_OnStart
Evento Session_OnEnd
Evento Application_OnDisposed
Evento Application_OnEnd
System.Type.GetType("System.Decimal"))
End Sub
En la parte de
Programación
<appSettings/>
<connectionStrings>
<add name="cn" connectionString="data source
=.;database=carrito2007;user id=sa;password=;integrated
security=true;"
providerName="System.Data.SqlClient=" />
</connectionStrings>
Imports System.Data.SqlClient
Imports System.Data
End If
sqlda.Fill(dt)
Me.ddlcategorias.DataSource = dt
Me.ddlcategorias.DataTextField = "NombreCategoría"
Me.ddlcategorias.DataValueField = "IdCategoría"
Me.ddlcategorias.DataBind()
Expluicacion delcodigo
Se utiliza un avariablke de tipo SQLdataadapter para establecer la
consulta para luego ser visualizada en la grilla