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
.NET Framework
Velocità a popolare un datagrid da Mysql
lunedì 23 giugno 2008 - 12.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
lun 23 giu 2008 - 12:23
Ciao a tutti,
premetto che sono nuovo nuovo col vb e che è da poco che ho iniziato a programmare...
Praticamente ho scritto un programmino con visual studio 2005 che accedeva ad Access e fino a che c'erano pochi dati tutto andava bene.
Ora siccome i dati stanno aumentando, pensavo di passare a MySQL.
Il problema è che per popolare un datagrid prendo i dati da una tabella con circa 15000 record
e mentre MySQL Query Browser mi risponde 15459 rows fetched in 0,1784 s (0,0011s)
il mio programma ci mette tipo 11 secondi....
vi posto il codice:
Public Sub PopolaFornitori(ByVal myConnString As String="Database=athena;Data Source=localhost;User Id=root;Password=adent2k5,gg")
Me.GRIGLIA.Columns.Add("FORNITORE", "FORNITORE")
Me.GRIGLIA.Columns.Add("RAGSOCIALE", "RAGSOCIALE")
Dim mySelectQuery As String = "SELECT * FROM Fornitori"
Dim myConnection As New MySql.Data.MySqlClient.MySqlConnection(myConnString)
Dim myCommand As New MySql.Data.MySqlClient.MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySql.Data.MySqlClient.MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim i As Integer = 0
While myReader.Read()
GRIGLIA.Rows.Add()
GRIGLIA.Item("FORNITORE", i).Value = myReader.Item("FORNITORE").ToString()
GRIGLIA.Item("RAGSOCIALE", i).Value = myReader.Item("RAGSOCIALE").ToString()
i = i + 1
End While
myReader.Close()
myConnection.Close()
End Sub
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
lun 23 giu 2008 - 16:06
Ciao,
io avevo lo stesso problema usando il tuo stesso metodo: ( però non usato mySql ma sql srv)
Invece di utilizzare un datareader utilizza un dataAdapter, ti recuperi l'oggetto table che rappresenta la tua tabella e lo passi come argomento datasource della griglia.
Luigi Di Biasi
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
lun 23 giu 2008 - 16:41
Grazie 1000, ora mi cerco dei tutorial sui metodi che mi hai detto e ci provo..
A meno che tu non abbia già un mezzo listato d'esempio così ci lavoro sopra
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
mar 24 giu 2008 - 09:10
Puoi usare una cosa del genere adattandola a mySql ( l'esempio è per SqlServer non avendo mySql a disposizione)
' ti colleghi a mySql
Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection("STRINGA_CONNESSIONE_MYSQL")
' crei l'adapter per recuperare i dati
Dim theAdapt As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter("select * from TABELLA_DA_RECUPERARE", conn.ConnectionString)
' oggetto table che conterrà i dati
Dim theTable As DataTable = New DataTable()
' il dataset da riempire
Dim theSet As Data.DataSet = New Data.DataSet()
' riempi il dataset
theAdapt.Fill(theSet)
' recuperi la prima tabella ( assumo che la select che fai ne recupera una )
theTable = theSet.Tables(0)
' fai visualizzare i dati recuperati nella datagridview
DataGridView1.DataSource = theTable
Ovviamente una cosa del genere ti carica i dati direttamente nella gridview tocca poi a te nascondere i campi che non vuoi visualizzare ( se usi select * ) e ridimensionare le colonne.
Luigi Di Biasi
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 24 giu 2008 - 09:15
Grazie, gentilissimo!!!
>Puoi usare una cosa del genere adattandola a mySql ( l'esempio
>è per SqlServer non avendo mySql a disposizione)
>
>' ti colleghi a mySql
>Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection("STRINGA_CONNESSIONE_MYSQL")
>
>' crei l'adapter per recuperare i dati
>Dim theAdapt As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter("select
>* from TABELLA_DA_RECUPERARE", conn.ConnectionString)
>
>' oggetto table che conterrà i dati
> Dim theTable As DataTable = New DataTable()
>
>' il dataset da riempire
> Dim theSet As Data.DataSet = New Data.DataSet()
>
>' riempi il dataset
> theAdapt.Fill(theSet)
>
>' recuperi la prima tabella ( assumo che la select che fai ne
>recupera una )
> theTable = theSet.Tables(0)
>
>' fai visualizzare i dati recuperati nella datagridview
> DataGridView1.DataSource = theTable
>
>Ovviamente una cosa del genere ti carica i dati direttamente
>nella gridview tocca poi a te nascondere i campi che non vuoi
>visualizzare ( se usi select * ) e ridimensionare le colonne.
>
>
>
>Luigi Di Biasi
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
mar 24 giu 2008 - 10:47
Fammi sapere come và ;)
se hai risolto il problema chiudi il thread.
Luigi Di Biasi
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 24 giu 2008 - 11:38
Si, ho risolto così:
Public Sub AggiornaGriglia(ByVal qry As String, ByVal Griglia As DataGridView, ByVal rcs As DataTable)
System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
Dim connStr As String = "Database=mio_db; Data Source=localhost;User Id=root; Password=miapassword"
Dim adattatore As New MySql.Data.MySqlClient.MySqlDataAdapter(qry, connStr)
rcs.Clear()
adattatore.Fill(rcs)
Griglia.DataSource = rcs
System.Windows.Forms.Cursor.Current = Cursors.Default
End Sub
ed ora in meno di un secondo carica tutto!!!!!
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 !