Velocità a popolare un datagrid da Mysql

lunedì 23 giugno 2008 - 12.23

gabriel81 Profilo | Junior Member

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

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

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

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


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

Fammi sapere come và ;)

se hai risolto il problema chiudi il thread.

Luigi Di Biasi

gabriel81 Profilo | Junior Member

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