allora... esistono diversi approcci per collegare una fonte di dati ad una GridView di ASP.NET 2.0.
per prima cosa è necessario utilizzare il provider. Qui trovi il provider necessario per collegarsi ad una base di dati MySQL. La versione 5.1 supporta Visual Studio 2005 e .NET 2.0 mentre la 5.2 (ancora in beta) supporta anche VS2008 e .NET 3.5.
Dato che parli di VS2005, presuppongo che ti interessi .NET 2.0.
Il primi approccio, sicuramente quello più rapido e veloce (ma al contempo più "sporco") è quello dichiarativo attraverso l'uso di un SqlDataSource.
Usiamo come esempio il classico Clienti/Ordini/ClientiOrdini. La pagina mostra tutti gli ordini del cliente il cui id è ricevuto dall'url di richiesta nel parametro ID (es: http://localhost/ordini.aspx?id=1 )
Codice:
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:mysql %>" ID="dsContatti" runat="server" SelectCommand="SELECT * FROM Orders WHERE CustomerID = ?ID">
<SelectParameters>
<asp:QueryStringParameter Name="ID" type="String" querystringfield="country" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView id="grid" runat="server" DataSourceID="dsContatti" />
Questa tecnica è molto rapida ma al contempo non permette la divisione in strati dell'applicazione.
Il parametro " ConnectionString="<%$ ConnectionStrings:mysql %>" " del DataSource significa che la stringa di connessione viene prelevata dall'apposita sezione del file di configurazione (web.config).
I successivi due approcci richiedono la scrittura di codice.
Il primo, viene chiamato approccio connesso, e popola la gridview leggendo direttamente i dati dal database attraverso un cursore lato client read-only e forward-only.
(per comodità scrivo in VB.NET)
Codice:
Public Sub Page_Load (sender as object, e as eventargs) handles me.load
Dim ConnectionString as String = ConfigurationManager.ConnectionStrings("mysql")
Dim Query as String = "SELECT * FROM Orders WHERE CustomerID = ?ID"
Dim reader as MySqlDataReader
Using conn As MySqlConnection = New MySqlConnection (ConnectionString)
Using cmd As MySqlCommand = conn.CreateCommand
cmd.CommandText = Query
cmd.Parameters.Add(New MySqlParameters("?ID", 1))
conn.open
reader = cmd.ExecuteReader
grid.DataSource = reader
grid.DataBind
conn.close
End Using
End Using
end sub
Dal codice, da cui ho volutamente tolto ogni controllo (try/catch) e la predichiarazione (i vari imports dei namespace), si vede facilmente la sequenza logica dei passi:
1) creazione della connessione al database mediante la stringa di connessione (anche questa volta presa dal file di configurazione)
2) creazione del comando da eseguire
3) apertura della connessione
4) esecuzione del comando
5) associazione della griglia al resultset ricavato
6) chiusura e distruzione delle risorse allocate
Per quanto riguarda l'esecuzione del comando esistono 3 comandi:
1) ExecuteReader per le query che ricevono una tabella di dati
2) ExecuteNonQuery per le query di comando (tipo INSERT, UPDATE e DELETE)
3) ExecuteScalar per le query che ritornano un solo valore (es: SELECT COUNT(*) ... )
Infine l'ultimo approccio... l'approccio disconnesso. Tale approccio si basa su un insieme di classi che simulano un database relazione mantenuto in memoria.
DataSet => il database
DataTable => la tabella
DataColumn => la colonna
DataRow => la riga
DataRelation => la relazione tra tabelle
e così via
Ecco un esempio:
Codice:
Public Function GetData(ID as Integer) As DataTable
Dim ConnectionString as String = ConfigurationManager.ConnectionStrings("mysql")
Dim Query as String = "SELECT * FROM Orders WHERE CustomerID = ?ID"
Dim res As New DataTable
Using conn As MySqlConnection = New MySqlConnection (ConnectionString)
Using cmd As MySqlCommand = conn.CreateCommand
cmd.CommandText = Query
cmd.Parameters.Add(New MySqlParameters("?ID", 1))
Using da As MySqlDataAdapter(conn)
da.SelectCommand = cmd
da.Fill(res)
End Using
End Using
End Using
Return res
End Function
Public Sub Page_Load (sender As Object, e As EventArgs) Handles Me.Load
grid.DataSource = GetData(1)
grid.DataBind()
End Sub
Naturalmente in GetData è possibile manipolare i dati come si vuole o, volendo, costruire la tabella secondo altri canoni.
Da notare l'utilizzo della classe DataAdapter che serve per fare da tramite tra gli oggetti contenitori (DataSet e DataTable) e la fonte di dati reali.
Questa è solo una breve panoramica, altre info le trovi su: http://www.asp.net/learn/