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

cerrar conexiones

Estas en el tema de cerrar conexiones en el foro de ASP Clásico en Foros del Web. Salú a la barra He estado mirando en las FAQ (excelente trabajo ) y además he usado el buscador. Si bien no encontre exactamente lo ...
  #1 (permalink)  
Antiguo 22/12/2002, 14:04
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 8 meses
Puntos: 381
cerrar conexiones

Salú a la barra

He estado mirando en las FAQ (excelente trabajo ) y además he usado el buscador. Si bien no encontre exactamente lo que busco he podido deducir la respuesta, aún y así para no meter la pata prefiero preguntar.

Es referente a cerrar conexiones a bases de datos.

Si tengo esto:

set my_Conn = Server.CreateObject("ADODB.Connection")
my_Conn.Open strConnString

y luego en algún lugar....

set rs = my_conn.execute (strSql)

Para cerrar bien basta con poner....

rs.close
set rs = nothing

???

...o debería además añadirse...

my_Conn.close
set my_Conn = nothing

??



Gracias y un saludo

Helena
  #2 (permalink)  
Antiguo 22/12/2002, 16:27
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
yo siempre utilizo los dos a la vez aunqu eno sé con certeza cuál es el que llega para cerrar.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #3 (permalink)  
Antiguo 22/12/2002, 17:19
Avatar de Gurrutello  
Fecha de Ingreso: enero-2002
Ubicación: Ontario,Toronto [Canada]
Mensajes: 2.017
Antigüedad: 23 años, 3 meses
Puntos: 6
hola
rs.close
set rs = nothing 'cierras el recordset o la tabla de la bd abierta

???

...o debería además añadirse...

my_Conn.close
set my_Conn = nothing ' cierras la conexion a la base de datos

siempre es conveniente emplear las 2.
saludos
  #4 (permalink)  
Antiguo 22/12/2002, 17:47
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 8 meses
Puntos: 381
gracias a ambos por contestar.

Uf... pero no me deja me dice

Cita:
Microsoft VBScript runtime error '800a01a8'

Object required
y eso que lo cierro en la última línea (debajo no hay nada más).

El caso es que desde que instalé hace un mes la última versión de los foros Snitz añadiendo un par de funcionalidades extra (tal y como los tenía en la versión antigua) me encuentro con que el servidor termina por caerse.

Todos los días he de estar llamando al server para que me reinicien el tema del asp.
Arranca todo bien pero se va sobrecargando y cada vez tarda más en generar las páginas hasta llegar al punto de que salta el archiconocido "Se excedió el tiempo máximo de espera para una secuencia de comandos. Para cambiar este límite especifique un nuevo valor para la propiedad Server.ScriptTimeOut o cambie el valor en las herramientas de administración de IIS."

En el servidor me dicen que el server no tiene problemas y que debe de ser alguna conexión que no se cierra y que finalmente hay tantas creadas que el servidor peta (se cae).

En el foro de soporte de snitz forums tampoco se explican lo que sucede. Me comenta un moderador que es la primera vez que lee un caso como el mio (pa variar, que me pasan unas cosas raras siempre... :-p )

Hoy he descubierto que principalmente ocurre cuando estoy logeada como moderador o como administrador. En cuanto deslogeo y ando sin logear o me logeo con un user normal (no moderador ni admin) funciona correctamente.

Pero si estoy como moderador se va sobrecargando el servidor y esta tarde habiendo dos moderadores paseando por los foros finalmente se caía ...

Cita:
Provider error '80004005'

Error no especificado

/foro/inc_header.asp, line 117

dando error precisamente en una linea que decia
set my_Conn = Server.CreateObject("ADODB.Connection")
my_Conn.Open strConnString

Y entonces nadie podía estar en el foro y tumbaba a todos fuera.
A los pocos minutos permitía de nuevo cargar páginas pero si seguía como moderador fallaba de nuevo.

por esto, revisando el código he visto que lo que no se cierra en ningún sitio es el my_conn pero al cerrarlo me da error, a pesar de cerrarlo en la última línea de las páginas.

Será cuestión de dejar los foros sin moderación?

Alguna sugerencia?

Alguien a quien le haya ocurrido algo similar??

Algún otro usuario de snitz?

Gracias
  #5 (permalink)  
Antiguo 22/12/2002, 18:49
Avatar de Gurrutello  
Fecha de Ingreso: enero-2002
Ubicación: Ontario,Toronto [Canada]
Mensajes: 2.017
Antigüedad: 23 años, 3 meses
Puntos: 6
mas bien puede ser debido a un fallo del servidor
pero si pusieras el codigo de la pagina que te da el error podria servir de mas ayuda.
Posiblemente no quepa en este mensaje, puesto que cada pagina de los foros de snitz son bastantes extensas.
puedes poner el codigo donde te da el error en un archivo de texto, subirlo a tu servidor y poner aqui el enlace??
creo que viendo el codigo exacto sera mas facil arreglarlo, aunque los fonros de snitz de default no suele dar ningun fallo.
por cierto que servidor, sistema operativo, utilizas.
saludos
  #6 (permalink)  
Antiguo 22/12/2002, 19:02
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 8 meses
Puntos: 381
Claro, prepararé para colgar en el server el código, aunque éste incluye includes con lo que el fallo también puede estar en uno de los includes.

De todas formas una vez dejo de pasear por los foros como moderador al rato se restablece. De hecho se cayó el servidor mientras andabamos dos users como moderadores. Ahí fue donde se sobrecargó y se vino abajo (estabamos precisamente testeando el comportamiento de los foros y los tiempos). Una vez vuelan los moderadores parece que deja de sobrecargarse, lo que me hizo mirar los condicionales en donde se contempla si eres un user de level 1, 2 o 3. Pero no encontré nada fuera de sitio. Veo todos los recordset cerrados y anulados.

Fuera de eso los foros no dan error alguno. Sólo se enlentecen, generando las páginas a veces en más de 80 segundos cuando lo habitual es que se generen en 0.03 segundos.

Prepararé el código para que pueda ser visto.... y que le sea leve a quien se enfrente a él

saludos
  #7 (permalink)  
Antiguo 22/12/2002, 19:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
Tomado del help de ADO :
Cita:
object.Close

Comentarios

Utilice el método Close para cerrar un objeto Connection o un objeto Recordset y liberar los recursos del sistema asociados. El cierre de un objeto no lo elimina de la memoria; puede modificar los valores de sus propiedades y volver a abrirlo más tarde. Para eliminar completamente un objeto de la memoria, establezca la variable de objeto a Nothing.
Dado tu problema, intenta setear a Nothing a los Recordsets abiertos antes de cerrar la conexion para q no queden huerfanos.
( Los RS no tienen Close )

nocq+
  #8 (permalink)  
Antiguo 22/12/2002, 19:17
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 8 meses
Puntos: 381
Ops, omití contestarte a esto:

Cita:
por cierto que servidor, sistema operativo, utilizas
El sitio está alojado en arsys.es. Tienen un WinNT con IIS 5.0.
Conecto a través de DSN a una BD de Access2000.
(Me han sugerido migrar a SQLServer pero después de contemplarlo creo que no es necesario. Tengo muy pocos users conectados simultaneamente.)



Nochero:
Cita:
( Los RS no tienen Close )
¿Ves? eso es lo que me extraña en el código.

set rs=my_conn.execute(cadena) y encuentro que depués en el código lo cierran y le asignan un Nothing. Pero como he aprendido (y sigo aprendiendo) ASP de oido, pues creí que era algo que no sabía.

Insisto en que lo que me extraña es que al resto de usuarios de los estos foros no les suceda (sucedió en la versión 3.3 pero dicen que esto en la 3.4 está corregido)

Gracias por la info, Nochero

saludos
  #9 (permalink)  
Antiguo 22/12/2002, 21:12
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Cita:
(Los RS no tienen Close)
Entonces por qué no da un error al hacer

Rs.Close
Set Rs = Nothing



???


No es que desconfíe de lo que decís, solamente quiero saber por qué si no tienen "close" no da error al hacerles un ".close"
  #10 (permalink)  
Antiguo 22/12/2002, 21:52
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
Rectifico : Si tienen Close los Recordset ...

Es q me fije en el manual y no sale como metodo del RS ...

a cerrar todo entonces ! jj
  #11 (permalink)  
Antiguo 22/12/2002, 22:18
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
en realidad me refería a que si un objeto no acepta determinado método o propiedad te lo hace saber mediante un mensaje de error.

Pero si al ponerle un ".close" el script no se queja, entonces es válido. No digo que sea necesario, pero si válido para ese objeto.
__________________
...___...
  #12 (permalink)  
Antiguo 22/12/2002, 23:12
 
Fecha de Ingreso: julio-2002
Mensajes: 447
Antigüedad: 22 años, 9 meses
Puntos: 0
Opinión

Doy mi humilde opinión con respecto a migrar a SQL Server... tenía en general un sitio con pocas visitas concurrentes con access 2000, pero la verdad que iba demasiado lento y a veces se hacía imposible navegar. Di tantas vueltas con la gente del servidor (echandoles la culpa, los volví locos), hasta que decidí migrar a SQL Server, y te digo que es increíble como cambió la velocidad. Muchísimo más rápido. Y considero no sólo el hecho de la velocidad, mi principal problema era que muchas veces no se podía acceder al sitio, vaya uno a saber por qué...
Eso sí, llevó tiempo cambiar en cada página la conexión del SQL Server y las consultas (algunas pequeñas cosas cambian). Como nunca pensé que iba a moverme de Access, no se me dio por usar Server Side Includes. Ahora si, solo insertando un archivo Conexion.asp cambio la conexión en todas las páginas.
saludos.
  #13 (permalink)  
Antiguo 23/12/2002, 11:59
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 8 meses
Puntos: 381
Saludos,

muchas gracias por vuestros comentarios, poco a poco voy viendo algo más de luz aunque continúe mi problema.

DeLaVega, estoy de acuerdo contigo en que desde luego migrar a SQLServer sería mejorarlo todo enormemente y en lo que a programación se refiere no habría problema alguno pues los foros de snitz yá vienen programados contemplando la posibilidad de que tu BD sea access, SQLServer o mySQL.
El tema está en que cuando me estaba documentando para hacer la migración descubrí que mi servidor te ofrece SQLServer incluído en el precio pero sólo hasta 20 Mb y lo que exceda hay que pagarlo. Como no es mi intención sacarle rentabilidad a mi sitio (tanpoco creo que se la sacara si lo intentara) y yá me sale a un dineral no quiero arriesgarme a no poderlo mantener y terminar por cerrarlo del todo así que de momento me quedo con access2000.

De todas formas todo funcionaba excelente hasta que cambié la programación por los nuevos foros. Es cuestión de lograr que regresen a su velocidad habitual, pero claro, hay que encontrar dónde narices se quedan las conexiones abiertas que terminan por tumbar el server.

Me comentaron en el foro de sintz que las conexiones no cerradas se cierran automáticamente al finalizarse la página ¿esto es así?
¿o lo entendí mal?

Cita:
Anyway AFAIK the recordsets should be closed automatically when the page is concluded by the server.
saludos
  #14 (permalink)  
Antiguo 23/12/2002, 12:27
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
Cita:
Me comentaron en el foro de sintz que las conexiones no cerradas se cierran automáticamente al finalizarse la página
las conexiones no se cierran automaticamente despues que se carga la pagina...lo que asi sucede es que despues de tpo las conexion se liberan automaticamente...

pero ten claro que cuando se estan abriendo 5 conexiones recien se esta liberando una. Por eso es recomendable cada vez que uses un objeto cerrarlo y liberarlo para que no te produzca un colapso en tu sitio.

nunca he trabajado con los foros snitz, asi que no se cual es su metodologia de trabajo..pero no es mala alternativa migrar a Mysql...no gastas dinero y los cambios no son muchos.
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 13:03.