Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Multithreading e DB
mercoledì 05 dicembre 2007 - 12.51
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gennyfor
Profilo
| Junior Member
71
messaggi | Data Invio:
mer 5 dic 2007 - 12:51
[vb 2005 .net]
Già ho letto qualcosa al riguardo e a quanto pare è un problema molto comune, ma nn sono riuscito a trovare la soluzione.....
Ho questa subroutine x un backgroundworker che mi carica degli articoli su un trhead separato, mentre l'applicazione principale continua a funzionare....Ovviamente ciò non mi funziona
Il programma si inceppa all'assegnazione della connessione al comando (recupera.Connection = connection)
La connessione viene persa.......qualcuno sa il perchè????
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
CheckForIllegalCrossThreadCalls = False
ProgressBar.Show()
Dim recupera As New OleDbCommand
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
CheckForIllegalCrossThreadCalls = False
ProgressBar.Show()
Dim recupera As New OleDbCommand
recupera.Connection = connection
recupera.CommandText = "SELECT codice,descrizion FROM [data$]"
Dim recuperar As OleDbDataReader = recupera.ExecuteReader
If recuperar.HasRows Then
Dim i As Integer = 0
Do While recuperar.Read
ListView1.Items.Add("", i)
ListView1.Items(i).SubItems.Add(recuperar.GetString(0))
ListView1.Items(i).SubItems.Add(recuperar.GetString(1))
i = i + 1
ProgressBar.Increment(1)
Loop
recuperar.Close()
ProgressBar.Value = 7000
ProgressBar.Hide()
Label1.Text = "Articoli presenti: " & ListView1.Items.Count
Else : MessageBox.Show("Non vi sono articoli presenti nel database", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Grazie in anticipo
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 5 dic 2007 - 13:01
>Il programma si inceppa all'assegnazione della connessione al
>comando (recupera.Connection = connection)
>La connessione viene persa.......qualcuno sa il perchè????
connection dove è definita?
>Grazie in anticipo
Prego
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
gennyfor
Profilo
| Junior Member
71
messaggi | Data Invio:
mer 5 dic 2007 - 17:00
in un modulo a parte comprso nel progetto... Ah non ho scritto che se eseguivo tutto su un solo trhead funzionava...
la connection è definita come Public
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 5 dic 2007 - 17:13
>in un modulo a parte comprso nel progetto... Ah non ho scritto
>che se eseguivo tutto su un solo trhead funzionava...
>la connection è definita come Public
E dove la apri?
Probabilmente ogni thread non è in grado di condividere una connessione aperta da un altro thread, ma deve aprirne una nuova...
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
gennyfor
Profilo
| Junior Member
71
messaggi | Data Invio:
mer 5 dic 2007 - 17:46
acc..............mi sa che è proprio cosi.............
si perchè la connessione viene comnque aperta nel thread principale, quando viene caricato il main form della applicazione, è probabilmente c'e questa sorta di incompatibilità fra i vari thread, va bè grazie lo stesso
devo risolvere diversamente
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 5 dic 2007 - 20:17
>acc..............mi sa che è proprio cosi.............
>si perchè la connessione viene comnque aperta nel thread principale,
>quando viene caricato il main form della applicazione, è probabilmente
>c'e questa sorta di incompatibilità fra i vari thread, va bè
>grazie lo stesso
devo risolvere diversamente
Per massimizzare la scalabilità della tua applicazione, appesantendo il meno possibile sia il client ma soprattutto il server, è opportuno aprire le connessioni solo per lo stretto tempo necessario a richiedere i dati e a sottomettere le modifiche.
Quindi potrai risolvere facilmente il problema aprendo e chiudendo le connessioni in ogni procedura che effettua un accesso al DBMS.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
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 !