OleDbConnection metodo migliore per instanziare la connessione

giovedì 19 maggio 2011 - 15.08
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Access (.mdb)

whiteflash Profilo | Junior Member

Volevo a chiedere sempre se c'è qualcuno che magari se ne intende di più di me,
se dichiarare la connection (OleDbConnection) al database è meglio farla:

1>Ogni finestra ha la sua connection dichiarata per conto suo e aperta/chiusa secondo le necessità
2>Una Connection dichiarata a livello globale, accessibile su tutto il progetto, che resta aperta affinchè l'applicazione non viene chiusa

Ho questo dubbio che mi tormenta da tempo, fino ad ora ho sempre lavorato con le connection divise (la prima soluzione)

poi ho notato che se ho 2 window con due connection aperte (una per window),
quando dalla win1, modifico i dati, e passo immediatamente alla win2 nella win2 per visualizzare i dati aggiornati deve passare un lasco di tempo,
se invece la connection è dichiarata globalmente questo non succede perchè l'istanza di connessione è la stessa.

Quello che mi domando è se dichiaro la connessione a livello globale,
c'è la possibilità che si chiuda da sola?
si può incappare in qualche problema di connessione durante l'uso del software?

---------------------------------------------
Newbie esperto VB.NET 2010 e WPF

Brainkiller Profilo | Guru

>poi ho notato che se ho 2 window con due connection aperte (una
>per window),
>quando dalla win1, modifico i dati, e passo immediatamente alla
>win2 nella win2 per visualizzare i dati aggiornati deve passare
>un lasco di tempo,
>se invece la connection è dichiarata globalmente questo non succede
>perchè l'istanza di connessione è la stessa.

Non sono molto convinto di ciò che dici.
Sono convinto che invece il JET (.mdb) è molto scarso per questo tipo di applicazioni.
In generale OleDbConnection usa il pooling quindi il fatto che tu apri e chiudi connessioni è abbastanza ininfluenza.
http://msdn.microsoft.com/en-us/library/ms254502.aspx
Leggi il primo paragrafo dove parla di OleDb.
Praticamente il pooling fa sì che le connessioni possono essere riciclate man mano che sono chiuse.
Quindi la migliore soluzione è non una globale ma più connessioni.

Inoltre la strategia migliore è aprire una connessione e tenerla aperta per il minimo tempo necessario per poi chiuderla.
Avere una connessione aperta sempre secondo me è errato come approccio.

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

whiteflash Profilo | Junior Member

bene quindi come sto facendo va bene,
non sei il primo a dire che il jet mdb è scarso, ma ci sono una valanga di gestionali e programmi vari che la maggior parte come motore usa un db in access
fino ad ora non ho mai trovato un'alternativa a questo per caso tu ne conosci qualcuna?
---------------------------------------------
Newbie esperto VB.NET 2010 e WPF

Brainkiller Profilo | Guru

>bene quindi come sto facendo va bene,
>non sei il primo a dire che il jet mdb è scarso, ma ci sono una
>valanga di gestionali e programmi vari che la maggior parte come
>motore usa un db in access

Beh, sì, non è detto che se tutti sbagliano dobbiamo sbagliare anche noi.
Dipende se sono gestionali mono-utente, multi-utente, seri o meno.

>fino ad ora non ho mai trovato un'alternativa a questo per caso
>tu ne conosci qualcuna?

In genere si può usare SQL Server Express che però devi installare sulla macchina o su un server, oppure SQL Server CE (Compact Edition) che non si installa, vedilo come un SQL Server in modalità .mdb (anche se è tutt'altra cosa perchè usa l'engine di SQL Server)
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5