Visualizzazione Stampabile
-
ASP, database & co.
Ciao a tutti, volevo fare una domanda a voi genti di tgm, magari mi potete aiutare. Sto dando un occhiata al discorso dei servizi web su visual studio 2005, e stavo smanettando un po anche con l'asp.net.
Ora volevo chiedere, dato che sono noobbo e poco ferrato sull'argomento, mi potreste indicare qualche guida o qualche procedura per interagire con un database mysql e usare i risultati ottenuti in un programma?
(L'ideale sarebbe avere anche qualcosa riguardo alle GridView.)
Vi ringrazio tantissimo, ciao!
-
Re: ASP, database & co.
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/
-
Re: ASP, database & co.
Grazie mille, veramente utile... a breve mi metto all'opera.
Grazie ancora!
-
Re: ASP, database & co.
Ho capito il procedimento anche se un dubbio ce l'ho ancora... usando l'oggetto SqlConnection e affini, quando inserisco la parola chiave "dsn" nella connection string mi da errore e dice che non è possibile usarla.
Ho risolto usando gli oggetti OdbcConnection e così via, ma volendo usare le SqlConnection, come posso fare per fornirgli un parametro corretto?
-
Re: ASP, database & co.
A differenza di Classic ASP e di ADO, in ADO.NET l'accesso alle basi di dati è fortemente tipizzato. Ciascuna base di dati avrà il suo provider di accesso.
Quelli inclusi di default sono SQL Server, Oracle, OleDB, ODBC.
L'accesso nativo (cioè senza passare per ODBC che porta ad un decadimento di prestazioni) a MySQL, come già scritto sopra, è offerto dal provider che mysql stessa offre e che trovi qui: http://dev.mysql.com/downloads/connector/net/5.1.html
Scaricalo ed installalo. A questo punto dovrai utilizzare la gerarchia di classi specifica di MySQL ovvero le classi presenti nel namespace MySql.Data.MySqlClient. Per la precisione si tratta di:
MySqlConnection
MySqlCommand
MySqlParameter
MySqlDataAdapter
MySqlDataReader
MySqlTransaction
(l'elenco preciso lo trovi qui: http://dev.mysql.com/doc/refman/5.1/...sqlclient.html)
Citazione:
Ho risolto usando gli oggetti OdbcConnection e così via, ma volendo usare le SqlConnection, come posso fare per fornirgli un parametro corretto?
Il DSN è un approccio tipico della connessione Odbc perciò è naturale l'utilizzo del provider Odbc. Le classi Sql* ( System.Data.SqlClient ) rappresentano il provider per SQL Server.
Utilizzando il provider nativo non hai bisogno del DSN. A questo avrai classi tipizzate scritte ad hoc per MySQL.
-
Re: ASP, database & co.
Grazie mille Kralizek per tutte le informazioni, stasera che torno a casa provo tutto!
Ciao!
-
Re: ASP, database & co.
OT Lolloso: vado in edicola e compro un giornale di programmazione (non sia mai faccio spam, :S)
e trovo niente popò di meno che un articolo su asp.net, database e GRID VIEW sauhhuasuhasuhas
-
Re: ASP, database & co.
Raga scusate, ho un altro piccolo problema XD.
Ho installato il connector e tutto, ho provato a fare la connessione al database tramite il wizard di visual studio e tutto ok.
Però l'intellisense non mi trova il namespace, e quando vado a scrivere il codice, lo scrivo "alla cieca" in un certo senso... come posso fare in modo da far riconoscere le dll all'intellisense? Ho cercato un po sulla guida del visual studio, ma non ho capito bene...
Grazie ancora.
-
Re: ASP, database & co.
ok ok, risolto tutto... il problema è la noobbaggine XD.
mi ero scordato di inserire il riferimento all'assembly... grazie comunque, ciao!
-
Re: ASP, database & co.
Citazione:
Originariamente Scritto da
DestructionZupi
Raga scusate, ho un altro piccolo problema XD.
Ho installato il connector e tutto, ho provato a fare la connessione al database tramite il wizard di visual studio e tutto ok.
Però l'intellisense non mi trova il namespace, e quando vado a scrivere il codice, lo scrivo "alla cieca" in un certo senso... come posso fare in modo da far riconoscere le dll all'intellisense? Ho cercato un po sulla guida del visual studio, ma non ho capito bene...
Grazie ancora.
come penso avrai capito, in ASP.NET esistono 2 modi per referenziare un assembly...
1) lo schiaffi nella GAC (Global Assembly Cache) e poi dal progetto referenzi l'assembly
2) lo schiaffi nella cartella /Bin dell'applicazione ASP.NET.
La differenza principale di ASP.NET rispetto ad ASP e PHP è proprio questa: se i 2 "antesignani" permettono l'installazione di moduli aggiuntivi solamente a livello macchina, .NET permette l'aggiunta di tali moduli anche solo a livello della singola applicazione e, cosa fondamentale in scenari hosted come ad esempio aruba, semplicemente copiando un file. Non so per PHP, ma per ASP classico i componenti aggiuntivi sono componenti COM le cui DLL vanno pertanto registrati eseguendo sul server, con diritti amministrativi, il comando regsvr cosa non sempre permessa ;)