Risultati da 1 a 10 di 10

Discussione: ASP, database & co.

  1. #1

    Question 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!

  2. #2
    Il Nonno L'avatar di Kralizek
    Data Registrazione
    14-10-01
    Località
    Stockholm
    Messaggi
    9,894

    Predefinito 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/

  3. #3

    Predefinito Re: ASP, database & co.

    Grazie mille, veramente utile... a breve mi metto all'opera.
    Grazie ancora!

  4. #4

    Predefinito 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?

  5. #5
    Il Nonno L'avatar di Kralizek
    Data Registrazione
    14-10-01
    Località
    Stockholm
    Messaggi
    9,894

    Predefinito 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)

    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.
    Ultima modifica di Kralizek; 16-04-08 alle 15:28:24

  6. #6

    Predefinito Re: ASP, database & co.

    Grazie mille Kralizek per tutte le informazioni, stasera che torno a casa provo tutto!

    Ciao!

  7. #7

    Predefinito 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

  8. #8

    Predefinito 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.

  9. #9

    Predefinito 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!

  10. #10
    Il Nonno L'avatar di Kralizek
    Data Registrazione
    14-10-01
    Località
    Stockholm
    Messaggi
    9,894

    Predefinito Re: ASP, database & co.

    Citazione Originariamente Scritto da DestructionZupi Visualizza Messaggio
    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

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato