65 messaggi dal 08 aprile 2003
Salve,
Ho il seguente problema che si presenta sporadicamente e dunque non riesco a capire dacosa possa dipendere.

Quando vado a fare una qualsiasi operazione su database access (dentro una cartella in wwwroot) mi dice "file è aperto in accesso esclusivo da un altro utente o non si dispone delle autorizzazioni necessarie per aprire il file" ora tutto funziona bene fino a quando una qualche operazione non va ad agiornare il database.

Ho provato ad dare tutte le autorizzazioni a tutti gli utenti ma non va compreso IUSR_

Dunque qualche cosa mi fa pensare che forse ho lasciato aperta qualche connesisone ma non cambia nulla anche riavvinado IIS o il pc.

L'unica cosa che sono riuscito a fare è prendere un database vecchio dalla macchina con la quale sviluppo l'applicazione e ricopiarci dentro le tabelle con i dati, allora tutto ricomincia a funzionare.
ciscos wrote:
Dunque qualche cosa mi fa pensare che forse ho lasciato aperta qualche connesisone ma non cambia nulla anche riavvinado IIS o il pc.

probabilmente. ad esempio, se lo apri usando Access, è possibilissimo che te lo blocchi e l'applicazione web non riesca ad accederci.
se poi lasci aperta la connessione o il datareader senza chiuderlo, questa può essere un'altra possibile causa.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
65 messaggi dal 08 aprile 2003
Penso di aver capito cosa sia successo, un utente mi ha riferito che l'applicazione si era bloccata su un inserimento di record e da lì in poi non ha più funzionato.

Esiste un modo per sapere se ci sono ancora connessioni aperte o se un database è stato chiuso in maniera non corretta? Ho notato che access crea un file temporaneo fino a che non si chiude l'applicazione.

Ricordo inoltre che il mio problema persiste anche riavviando IIS o il PC.
Modificato da ciscos il 18 febbraio 2008 18.00 -
ciscos wrote:
Esiste un modo per sapere se ci sono ancora connessioni aperte o se un database è stato chiuso in maniera non corretta? Ho notato che access crea un file temporaneo fino a che non si chiude l'applicazione.

sì, usare il blocco using:
http://www.aspitalia.com/script/605/Using-Dispose-Automatico-CSharp.aspx http://blogs.aspitalia.com/ricciolo/post2177/Usate-Statement-Using.aspx
in VB è Using... End Using, ma c'è bisogno quanto meno del .NET Framework 2.0.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
65 messaggi dal 08 aprile 2003
ciscos wrote:
Esiste un modo per sapere se ci sono ancora connessioni aperte o se un database è stato chiuso in maniera non corretta? Ho notato che access crea un file temporaneo fino a che non si chiude l'applicazione.


Daniele Bochicchio ha scritto:
sì, usare il blocco using:
in VB è Using... End Using, ma c'è bisogno quanto meno del .NET Framework 2.0.


Ok ma io ho uso asp 1.1, non è possibile fare qualche cosa ad esempio dagli strumenti di amministrazione di IIS?
ciscos wrote:
Ok ma io ho uso asp 1.1, non è possibile fare qualche cosa ad esempio dagli strumenti di amministrazione di IIS?

come fa IIS a sapere cosa scrivi tu nel codice? è compito tuo di sviluppatore scrivere codice che verifichi come vengono gestite le risorse, non del server web.
se usi la 1.1 e VB, la soluzione è mettere tutto in un blocco try...catch, con un finally dove fai il Dispose/Close di tutti gli oggetti che utilizzi e che implementano l'interfaccia IDisposable, come Connection, Command e DataReader.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
65 messaggi dal 08 aprile 2003
ok, proverò a chiudere tutti gli oggetti e vediamo. Per il momento grazie.
65 messaggi dal 08 aprile 2003
Scusate se riprongo questo post, ma ancora non sono riuscito ad eliminare il problema.

In questi giorni mi sto accingendo a rivisitare tutto il codice per aggiungere, dove mancano, i blocchi Try catch.

Quando chiamo i metodi Delete, update e fill di un dataadapter le connessioni vengono chiuse dai metodi o devo chiuderle a mano anche lì?

Poco fa ho trovato un articolo di Riccardo Golia scritto nel 2004: http://blogs.aspitalia.com/rickyvr/post694/DataAdapter-Connessioni.aspx

Riporto la parte che mi ha fatto pensare che forse il Poller non elimini la connessione rimasta aperta. E' una possibilità? e come è possibile resettare il poller "a mano"? o non è il mio caso?

-------------
...pool di connessioni. Un oggetto Connection viene rimosso dal pool se è scaduto il suo ciclo di vita oppure se si viene a verificare una anomalia. In ogni caso il pooler ispeziona periodicamente i vari pool e rimuove qullo che c'è da rimuovere (ovvero le connessioni scadute o non valide).

Nel caso di connessioni OLEDB è il componente OLEDB service a gestire il pooling. Il lancio del metodo Close o Dispose per una connessione OLEDB esegue il metodo Marshal.ReleaseComObject: questo sta a testimoniare il legame tra l'ambiente managed di ADO.NET e l'ambiente unamanaged sottostante.
Modificato da ciscos il 09 ottobre 2008 22.19 -

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.