Connessione ad un db

sabato 31 marzo 2007 - 19.04

bluland Profilo | Guru

Salve,
mi chiedevo in un applicazione con n form dove tutti si collegano allo stesso db, come è meglio gestire la situazione mica si riscrive per ogni form la stringa di connessione?

saluti
--------------------
Vincenzo PESANTE

alextyx Profilo | Expert

Dai un'occhiata qui:

http://forum.masterdrive.it/showthread.php?t=17070

bluland Profilo | Guru

si l'idea è quello che stavo applicando dichiarando una classe Connessione cmq...
avresti un esempio con l'utilizzo in un modulo?

saluti
--------------------
Vincenzo PESANTE

alextyx Profilo | Expert

Beh....sì.... per quello che ti può dire in più. Comunque, ecco un esempio tratto da una delle mie prime applicazioni:

In un modulo:

' -------------------- Connessione Pubblica --------------------------------------------
Public CnnOle As New OleDb.OleDbConnection

Nota che avresti potuto anche limitarti alla dichiarazione, istanziandola (new) solo al momento che decidevi la connessione al DB, ma nel mio caso il programma si connette sempre e quindi, o alle otto o alle dieci, la connessione andava istanziata e poi aperta.

Poi nella frmStart, che è la prima a partire:

Private Sub ApriConnessioneESalvaAttributiDelFile(ByVal StrConn As String)

GIN.CnnOle.ConnectionString = StrConn
GIN.CnnOle.Open()
Dim FileDB As String = GIN.EstraiPathDati(StrConn)
UltimaScritturaQuandoAperto = IO.File.GetLastWriteTimeUtc(FileDB) 'Memorizza quando è stata l'ultima scrittura nel file. Servirà a stabilire se ci sono state modifiche

End Sub

A te interessano solo le prime due righe della procedura. Ovviamente devi aver definito una stringa di connessione, che qui viene passata come parametro. Il prefisso Gin devi ometterlo. E' il nome dello spazio dei nomi di primo livello della mia applicazione.

A questo punto puoi usare la connessione come ti pare e da qualunque form, es.:

Dim StrSQL As String = Inizio & RifTipoDoc & Sep & Data & Sep & NumDoc & Sep & Note & Sep & Avere & Sep & Dare _
& Sep & FNuovo & Sep & NumProg & DOVE

If GIN.EseguiComandoSQL(StrSQL, GIN.CnnOle) = 1 Then
Dim C As New OleDbCommand("SELECT * FROM TabRegistrazioni " & DOVE, GIN.CnnOle)
Dim dr As OleDbDataReader = C.ExecuteReader
dr.Read()
Me.AggiornaItem(dr, Me.ItemSelezionato)
dr.Close()
dr.Dispose()
Me.LsvReg_DoubleClick(Me.LsvReg, Nothing)
Return True
Else
Return False
End If

Come vedi, la connessione è stata prima passata come parametro alla funzione 'EseguiComandoSQL' e subito dopo usata anche localmente e in questa zona, ci troviamo nel codice di una ulteriore Form (FrmRegistrazioni)

Forse è più difficile seguire gli esempi che non dichiarare ( e magari istanziare) la connessione in un modulo e poi, visto che a quel punto è globalmente visibile, usarla tranquillamente. Ovviamente va aperta ed eventualmente richiusa tutte le volte che serve, o anche soltanto all'inizio e alla fine della sessione di lavoro, se come nel mio caso sei l'unico utente di una applicazione con DB Access sulla stessa macchina.

bluland Profilo | Guru

Ah si ora mi è chiaro + o - quello che cercavo di fare con una classe

grazie dell'esempio


saluti



--------------------
Vincenzo PESANTE
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5