Utilizzare ProgressBar durante la connessione ad un database SQLServer...

venerdì 18 luglio 2008 - 13.57

86Marco Profilo | Expert

Salve, vorrei un aiuto per poter migliorare l'aspetto grafico del mio programmino vb 2008 express.
Ho creato la maschera principale del programma con un form che ha un bottone, questo se premuto connette l'applicazione ad un'istanza del database SQLServer 2005 Express Edition.
Il risultato della avvenuta connessione lo faccio stampare sulla status bar del form.

Ma come faccio se volessi impostare una progress bar in modo tale che questa avanzi mente l'applicazione si sta connettendo e scompaia nel momento in cui il programma si connette all'istanza sql?

Aiutamtemi vi prego, magari postando il codice da attuare.
Grazie mille.

Mikyct86 Profilo | Junior Member

sullo status bar puoi inserire il progress bar!
«Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.» A.E.
Michele Crimi - Programmatore .Net

86Marco Profilo | Expert

>sullo status bar puoi inserire il progress bar!
>
Ciao, grazie per la risposta... ma... che risposta è :D?
Io volevo sapere come programmare la staus bar affinchè potesse avanzare durabte il tentativo di connessione al database.
Spero seia stato chiaro adesso ;) e spero potrai aiutarmi... grazie cmq!

alexmed Profilo | Guru

Ciao Marco,
Questa soluzione è solo pensata e stasera la testo:

Io metterei un Timer di 30 sec (tempo standard limite per le connessioni)
Apro la mia connessione
Ogni 2 o 5 secondi lancio un controllo sullo Stato della connessione
Intanto la Progress avanza con i valori del Timer
Una volta che ho una risposta True sulla connessione porto la Progress al valore massimo ed arresto il Timer.

Non ho idea se si possa "interagire" con la connessione ma io ho notato che a volte ci vuole più tempo altre meno.

Dimmi cosa ne pensi

Ciao

Mikyct86 Profilo | Junior Member

L'idea non è male...Magari invece del timer...si potrebbe usare un thread diverso! o no? oppure un backgroundWorker!
che ne dici?
cmq l'idea del timer non è male!
«Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.» A.E.
Michele Crimi - Programmatore .Net

86Marco Profilo | Expert

Ciao,
Alex la tua soluzione mi sembra molto ovvia e credo sarà quella che effettuerò anche se la soluzione di Miky mi sarebbe piaciuta anche, solo che non so come usare il WorkProgress... :D

Mikyct86 Profilo | Junior Member

Anche se la mia idea è quella piu pulita.Il timer diciamo che funziona ma è un po sporca.Programmativamente parlando!
«Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.» A.E.
Michele Crimi - Programmatore .Net

86Marco Profilo | Expert

>Ciao Marco,
>Questa soluzione è solo pensata e stasera la testo:
>
>Io metterei un Timer di 30 sec (tempo standard limite per le
>connessioni)
>Apro la mia connessione
>Ogni 2 o 5 secondi lancio un controllo sullo Stato della connessione
>Intanto la Progress avanza con i valori del Timer
>Una volta che ho una risposta True sulla connessione porto la
>Progress al valore massimo ed arresto il Timer.
>
>Non ho idea se si possa "interagire" con la connessione ma io
>ho notato che a volte ci vuole più tempo altre meno.
>
>Dimmi cosa ne pensi
>
>Ciao
Ehi alex questo è il codice che uso per la connessione al database... mi sapresti dire in che modo costruire il codice con il timer che mi faccia quello che dici tu m gari postandomil il giusto codice?
Grazie mille.

P.S. questo è il semplice codice che uso io:

Dim con As SqlClient.SqlConnection
Dim strconn As String

strconn = "Data Source=Marco_XP\SQLEXPRESS;Integrated Security=True;Connect Timeout=10;Initial Catalog=Prova;"
con = New SqlClient.SqlConnection(strconn)
con.Open()
ToolStripStatusLabel1.Text = "Connesso al database aziendale " & con.Database & ".mdf"

Cteniza Profilo | Guru

Mi viene da dire questo: se hai bisogno di una progressbar per la connessione al database vuol dire che hai una connessione molto lenta, il timeout è di solito fissato a 30 secondi, dopo la quale ottieni un bel messaggio di errore.
In genere la connessione "vera" ha bisogno di pochi secondi, vale la pena mettere un progressbar? io non lo metterei, al suo posto curerei di più l'efficienza della mia connessione :D

Mikyct86 Profilo | Junior Member

wow bella risposta! eh eh hai perfettamente ragione!
Complimenti! :D
«Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.» A.E.
Michele Crimi - Programmatore .Net

alexmed Profilo | Guru

Ciao a tutti
Scusate, non sò voi ma io sia da casa che dall'ufficio ho grosse difficolta a connettermi via internet con qls sito Microsoft, ed anche la guida in linea di Visual Basic mi ha dato problemi.
Detto questo volevo fare 2 considerazioni con Cteniza.

L'utilizzo di alcuni controlli e/o "trucchetti" hanno lo scopo di migliorare l'aspetto grafico delle applicazioni (non si spiegherebbe altrimenti ad esempio l'utilizzo delle icone).
Naturalmente il tutto non deve andare a rallentare la nostra applicazione, dopodichè ognuno può personalizzare come meglio crede.

Considerando che anche la ProgressBar di Internet Explorer è un posticcio (vi passo il link appena lo ritrovo) ecco il codice che ho partorito


Dim counter As Integer
Dim con As SqlClient.SqlConnection
Dim strconn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=myDataBase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

con = New SqlClient.SqlConnection(strconn)

Me.ToolStripProgressBar1.Value = 5

Try

con.Open()

counter = 5
Timer1.Interval = 10
Timer1.Enabled = True

con.Close()

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If counter >= 50 Then
Timer1.Enabled = False
counter = 0
Else
counter = counter + 1
Me.ToolStripProgressBar1.Value = counter
End If

End Sub

Impostare la ToolStripProgressBar1.Maximum = 50

L'idea è quella di far partire la progressBar , avviare il test sulla connessione, e se non avvengono errori la progressbar termina il suo ciclo
In caso di errori sulla connessione il viene visualizzato il msg di errore e la PB non termina il suo ciclo.

Cteniza Profilo | Guru

Battute a parte, anzi no ne faccio un'altra in forma di domanda:
Visto che una progressbar ha bisogno del valore "max" per arrivare a fine corsa cosa fai, ti connetti, misuri il tempo e poi ti disconnetti, imposti max e ti connetti di nuovo ? (comunque non funzionerà) :D :D
Il problema del timeout è che il tuo programma che si connette "sa già" dopo pochi secondi che la connessione non andrà a buon fine, aspetti il timeout solo per avere la conferma ufficiale.
Quindi .. se hai bisogno di indicare che il tuo programma è in attesa della connessione meglio cambiare opportunamente il cursore (waitcursor).
Poi ovviamente è una questione di scelte, personalmente non metterei mai una progressbar dove non sono in grado di conoscere il valore massimo.

alexmed Profilo | Guru

Ciao Cteniza,
ho cercato in questi giorni e in tempi addietro se c'era un sistema per monitorare la connessione (i tempi) ma non ho trovato nulla.
Tu adesso mi confermi che è così.
Come dici tu basterebbe impostare la proprietà Cursor su WaitCursor, ma è anche vero che l'aspetto grafico è una scelta del programmatore.
Ciao
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