Foros del Web » Programando para Internet » ASP Clásico »

Duda de programación....cerrar conexiones

Estas en el tema de Duda de programación....cerrar conexiones en el foro de ASP Clásico en Foros del Web. Hola amigos, tengo una pequeña duda, creo que es bastante logica pero ya estoy empezandome a rallarme... a si que la voy a preguntar por ...
  #1 (permalink)  
Antiguo 26/04/2007, 04:26
Avatar de cokete  
Fecha de Ingreso: noviembre-2004
Mensajes: 224
Antigüedad: 20 años, 5 meses
Puntos: 0
Duda de programación....cerrar conexiones

Hola amigos, tengo una pequeña duda, creo que es bastante logica pero ya estoy empezandome a rallarme... a si que la voy a preguntar por si las moscas..

Sigo teniendo nuemrosos problemas con mis conexiones a bases de datos, el server me dice que TOO many client tasks... intento cerrar todas las conexiones que abro...

Tengo una serie de paginas con el siguiente problema...

En el principio del codigo abro la conexion a la base de datos..... y al final de la pagina la cierro...

el problema es que en el medio de la pagina, en mi codigo tengo varios Response.Redirect.... por lo que hay se produce un salto y imagino que nunca llegara a ejecutarse ese cierre de conexion que hago al fuinal de la pagina....

os pongo el codigo de ejemplo:

Código:
<!--#include file="logon.inc"-->
<%

' Proceso la entrada de información en función del tipo de operación
Select Case Request.Form("tipo")
	Case "insert"
		strTipoInfo="0"
		stremail=Replace(Request.Form("email"),"'", """")
		strnombre=Replace(Request.Form("nombre"),"'", """")
		If Not ISEMAIL(stremail) then
				advertencia="La direccion de email introducida es erronea"
				Response.Redirect("admin.email.asp?senal=" & advertencia &"&tipo=insert&nom="&strnombre&"&mail="&stremail&"")
		End If
		If EMAILREPETIDO (stremail) then
				advertencia="Ya hay un destinatario en la base de datos con ese E-mail"
				Response.Redirect("admin.email.asp?senal=" & advertencia &"&tipo=insert&nom="&strnombre&"&mail="&stremail&"")
		End If
		
		SQL="INSERT INTO emails (email, nombre) VALUES"
		SQL=SQL &" ('" & stremail &"', '"  & strnombre &"');"
		Conn.Execute SQL
		
		' Recupero el ultimo valor establecido en el PK
		Dim lngUltimo
		SQL="SELECT MAX(codemail) AS Ultimo FROM emails;"
		Set Snap=Server.CreateObject("ADODB.Recordset")
		Snap.Open SQL, Conn
			If Not(Snap.EOF And Snap.BOF) Then
				If Not(Isnull(Snap.Fields("Ultimo"))) Then
					lngUltimo=Snap.Fields("Ultimo")
				End If
			End If
		' Redirijo a la página
		Response.Redirect("admin.emails.asp")

	Case "update"

		stremail=Replace(Request.Form("email"),"'", """")
		strnombre=Replace(Request.Form("nombre"),"'", """")
		stremail=Replace(Request.Form("email"),"'", """")
		
		If Not ISEMAIL(stremail) then
				advertencia="La direccion de email introducida es erronea"
				Response.Redirect("admin.email.asp?senal=" & advertencia &"&tipo=insert&nom="&strnombre&"&mail="&stremail&"")
		End If
		
		If EMAILREPETIDO (stremail) then
				advertencia="Ya hay un destinatario en la base de datos con ese E-mail"
				Response.Redirect("admin.email.asp?senal=" & advertencia &"&tipo=insert&nom="&strnombre&"&mail="&stremail&"")
		End If
		
		SQL="UPDATE emails SET email='" & stremail &"', nombre='" & strnombre &"'"
		SQL=SQL & " WHERE codemail=" & Request.Form("codemail") & ";"
		Conn.Execute SQL
		' Redirijo a la página
		Response.Redirect("admin.emails.asp")
End Select

' Operación de Borrado
If Request.QueryString("tipo")="delete" Then
	SQL="DELETE FROM emails WHERE codemail=" & Request.QueryString("codemail") & ";"
	Conn.Execute SQL
	
	' Redirijo a la página
	Response.Redirect("admin.emails.asp")
End If

%>
<!--#include file="close.inc"-->

En el archivo de inclusion logon abro la conexion, y la cierro en el close.inc...como veis entre medias hay varios response.redirect... mi duda es si realemnte no se esta ejecutnado el close.inc nunca...

Muchas gracias.
  #2 (permalink)  
Antiguo 26/04/2007, 04:45
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Duda de programación....cerrar conexiones

Yo como siempre digo no tengo apenas ideade ASP, pero creo que si se ejecuta el redirect y va a otra página no tendría por qué leer el resto del código, osea que no llegaría al final, teniendo en cuenta que cada Redirect se ejecuta dentro de un if, si necesitas cerrar la conexión yo lo pondría justo antes del Redirect

if sentencia=true then
cierro conexion
hago el redirect
endif

Con lo que el resto del codigo seguiria con la conexión abierta y sólo se cerraría al salir de esta página.

Weno, espero no liarte en caso de que no tenga razón, pero esto todo es probar no?
  #3 (permalink)  
Antiguo 26/04/2007, 05:34
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Duda de programación....cerrar conexiones

Tanto el redirect como la finalización de la página cierran las conexiones y/o objetos que se hubieran abierto durante el proceso de la pagina. De todas formas, es una buena idea ir cerrando recordset y conexiones que no se vayan a usar mas.

El Too many users tasks me suena mas a la configuración de IIS. Mira a ver en las propiedades del sitio --> Directorio Particular --> Configuracion si tienes algun indicador de depuracion habilitado, el tiempo de espera, el almacenimiento en la caché, etc. Seria tambien interesante ver quien envia el error, si el server o el controlador odbc.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #4 (permalink)  
Antiguo 26/04/2007, 21:21
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Re: Duda de programación....cerrar conexiones

buen post, entonces quieres decir que si redireccionas no lee el final del codigo,???
bueno.... no lo se... que les paresca esta idea.... se que un poco descabellada pero....

en un post hice la siguiente pregunta
como saber si la conexion a BD sigue abierta??

rescatando un poco del codigo final
Código:
if isObject(conn) then
    Select Case conn.Status
       case 1
            ' Esta abierto
       case 2
            ' Se esta abriendo
       case 4
            ' Se esta ejecutando un comando
       case 8
            ' El objeto se esta cargando
       case Else
            ' El objeto esta cerrado
    end Select
end if
no seria un poco factible el hecho de entrar a la pagina y saber si no quedo "ABIERTA", y cerrarla???

bueno solo es una idea

suerte
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:45.