18 messaggi dal 18 settembre 2001
Salve a tutti!
Mi chiedevo se fosse conveniente aprire la connessione ad un DB nell'evento Application_OnStart del file Global.asa (ad esempio Application("cn")) piuttosto che aprire e chiudere la connessione in ogni pagina. E la chiusura andrebbe nell'evento Application_OnEnd?
Vi sarei grato se qualcuno di voi potesse rispondermi ed eventualmente inviarmi il codice per fare tutto ciò.
Grazie!

635 messaggi dal 06 settembre 2002
Anche se praticamente è fattibile (riesci ad aprire la connessione ald database con Application_OnStart) la soluzione non è assolutamente consigliabile per 2 motivi:
- Riduzione delle performance del sito
- Errori di script timeout o peggio ancora Catastrofic Error in tutte quelle procedure che fanno una lettura totale (dal primo all'ultimo record di una o più tabelle del database)

Inoltre, utilizzando Access (database mono utente), potrebbero generarsi errori nel momento in cui 3 o più utenti accedono ad una tabella.

in qualsiasi caso, prova a leggere questo articolo
http://www.aspitalia.com/articoli/ottimizza.asp

ciao

 JD

OJD
18 messaggi dal 18 settembre 2001
Anzitutto grazie per la risposta.
Mi chiedevo allora se la stessa cosa vale per l'oggetto Session...
Il problema è che mi genera un errore alla riga "cn.Open openstr" ogni volta che la pagina ASP richiama se stessa con un diverso parametro. Come posso fare?


635 messaggi dal 06 settembre 2002
Ciao,
a rigor di logica con la session gli effetti dovrebbero essere ancor di più deleteri (mentre con application condividi delle informazioni per tutti gli utenti, con la session occupi area di memoria per ogni utente connesso al tuo sito).

Cosa intendi con "la pagina richiama se stessa" e "con un diverso parametro"?

Non sono sicuro ma credo che l'errore dipenda dalla duplicazione della connessione (la connessione viene aperta una prima volta e, quando ritorni sulla pagina provi ad aprirla una seconda volta, senza averla chiusa (cn.close e set cn=Nothing); infatti la session è ancora attiva)

Anche se più laborioso ti consiglio di aprire e chiudere la connessione su ogni pagina oppure ti crei 2 pagine con:

pagina1.asp
Set conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("database.mdb")&";"

pagina2.asp
Conn.Close
Set Conn=nothing


e con il comando include le richiami dove ti servono

pagina.asp
<%
codice
%>
<!--#INCLUDE FILE="pagina1.asp"-->
<%
sQL="tua query"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open SQL, Conn

codice

rs.Close
Set rs=Nothing
%>
<!--#INCLUDE FILE="pagina2.asp"-->
<%
codice

fine pagina.asp %>

attenzione però alla posizione del database; deve restare sempre nella stessa path logica per ogni pagina asp...

es.
<DIR DATABASE>
<DIR FUNZIONI> dove ai pagina1.asp e pagina2.asp
<DIR CLIENTI>
<DIR UTENTI>
tutte le pagine contenute dentro <DIR xx> possono accedere al database se su pagina1.asp la connessione è:
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("..\DIR DATABASE\database.mdb")&";"

Se le pagine sono al di fuori di questa struttura, il database non viene identificato.

Spero di essere stato chiaro.
Ciao



 JD

OJD
18 messaggi dal 18 settembre 2001
Mi spiace doverti rubare altro tempo però...

>Cosa intendi con "la pagina richiama se stessa" e "con un diverso parametro"?

Intendo che la pagina1.asp una volta viene chiamata da un form sulla pagina index.htm con dei parametri request.form("campo"). Poi sulla stessa pagina pagina1.asp c'è un elenco alfabetico per richiamare i dati in base alla lettera iniziale tramite un parametro di tipo request.querystring("PAR").

>Anche se più laborioso ti consiglio di aprire e chiudere la connessione su ogni pagina

In effetti io adesso apro e chiudo la connessione su ogni pagina quindi il problema deve essere un altro...

Non può essere che la pagina venendo memorizzata nella cache non viene ricaricata?

635 messaggi dal 06 settembre 2002
Vediamo se ho capito:
Index.htm passa dei dati a pagina.asp

pagina.asp
campo=request.form("campo")
apri connessione
fai una quey
apri recordset e estrapoli dei dati che richiamano pagina.asp con una istruzione del tipo:

<a href="pagina.asp?par=<%=par%>"<%=valore%></a>

chiudi recordset
rs.close
set rs=nothing

chiudi connessione
Conn.Close
Set Conn=Nothing

Ma come fai a stabilire da dove arriva la chiamata e, di conseguenza, che tipo di SQL utilizzare?

Che tipo di errore ti da la pagina?

 JD

OJD
18 messaggi dal 18 settembre 2001
>Ma come fai a stabilire da dove arriva la chiamata e, di conseguenza, che tipo di SQL utilizzare?

Diciamo che in pratica la pagina può essere chiamata o tramite i dati di un form o tramite un parametro nella querystring... io faccio un if: se qualcuno dei campi del form è valorizzato allora cerco in base a quello, altrimenti cerco in base al parametro nella querystring.


>Che tipo di errore ti da la pagina?
Ovviamente
Tipo di errore:
Provider (0x80004005)
Errore non specificato.


635 messaggi dal 06 settembre 2002
Scusa ma, mi sfugge qualcosa...

su index.htm te dai la possibilità di chiamare pagina1.asp o da un form o da una stringa?


Mi puoi mandare un estratto della pagina.asp che va in errore?

Ciao.

 JD

OJD

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.