asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 802
ASPCode.it - Store

  > > Articoli

Funzioni di ricerca, filtro e ordinamento in ADO.NET (1/2)

Data di pubblicazione: 30/03/2004        Voto della community: 3,18 (Votanti: 17)


L'aspetto più innovativo di ADO.NET rispetto al vecchio ADO è sicuramente l'architettura disconnessa dei dati. Un aspetto di questa architettura è il fatto che ADO.NET prevede ora un'ampia serie di funzionalità per accedere ed elaborare i dati recuperati preventivamente dal database, in maniera appunto disconnessa dalla sorgente dati. In questo articolo esaminiamo in particolare le molteplici funzioni di ricerca e ordinamento.

Recupero di una DataRow in base al valore della chiave primaria

L'operazione di ricerca più ovvia e frequente è quella di recuperare una particolare riga di un oggetto DataTable in base ad un valore della sua chiave primaria. Di seguito un codice di esempio:

<%@ Page Language="C#" %>
<%@import namespace = "System.Data" %>
<%@import namespace = "System.Data.OleDb" %>
<script runat="server">

    void Page_Load () {

        string strCnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:/ASPCODE/Northwind.mdb";
        OleDbConnection cnn = new OleDbConnection(strCnn) ;
        cnn.Open();
        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter();
        OleDbCommand cmd = new OleDbCommand("SELECT * from prodotti", cnn);
        da.SelectCommand = cmd;
        da.Fill(ds, "articoli");
        cnn.Close();

        ds.Tables["articoli"].PrimaryKey = new DataColumn[] {ds.Tables["articoli"].Columns["IDProdotto"]};

        DataRow foundDataRow = ds.Tables["articoli"].Rows.Find("8");

        if (foundDataRow!= null)
          Response.Write (foundDataRow["idProdotto"] + " - " + foundDataRow["nomeProdotto"]);
    }
</script>

Come si vede, abbiamo utilizzato il metodo Find della collezione degli oggetti Rows, per cercare la riga con chiave primaria pari a 8 :

DataRow foundDataRow = ds.Tables["articoli"].Rows.Find("8");

La ricerca resituisce un oggetto DataRow, oppure null se non è trovata l'occorrenza ricercata. Notare che, per eseguire questo tipo di ricerca, abbiamo prima dichiarato una chiave primaria per la tabella articoli.


Recupero di un sottoinsieme di righe mediante il metodo Select di DataTable

Un'operazione molto utile è quella di recuperare un sottoinsieme di DataRow in base a determinati criteri di ricerca, ordinamento e RowState. Supponiamo di voler recuperare dalla precedente DataTable l'insieme delle righe che hanno l'IDCategoria pari a 2, ordinate in maniera discendente secondo il NomeProdotto, usando il RowState CurrentRows :


<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    void Page_Load () {

        string strCnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:/ASPCODE/Northwind.mdb";
        OleDbConnection cnn = new OleDbConnection(strCnn) ;
        cnn.Open();
        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter();
        OleDbCommand cmd = new OleDbCommand("SELECT * from prodotti", cnn);
        da.SelectCommand = cmd;
        da.Fill(ds, "articoli");
        cnn.Close();

        DataRow[] custRows = ds.Tables["articoli"].Select("IDCategoria = 2", "NomeProdotto DESC", DataViewRowState.CurrentRows);

        if (custRows.Length < 1 )
          Response.Write ("Nessuna riga trovata.");
        else
        {
            foreach (DataRow myDataRow in custRows) {

                Response.Write ("<br>" + myDataRow["idProdotto"] + " - " + myDataRow["nomeProdotto"]);
            }
        }
    }
</script>

L'istruzione che ci interessa da vicino è:

DataRow[] custRows = ds.Tables["articoli"].Select("IDCategoria = 2", "NomeProdotto DESC", DataViewRowState.CurrentRows);

che restituisce un insieme di righe sotto forma di array di DataRow, corrispondenti ai criteri specificati. Per conoscere il numero di righe restituite basta riferirsi, come si nota, alla proprietà Length della collezione delle righe (custRows.Length)
Per funzioni di ricerca più complesse, rimandiamo alla sintassi del parametro criterio di ricerca della documentazione ufficiale.

Nella prossima parte vedremo le funzioni di Filtro, Ricerca e Ordinamento dell'oggetto DataView.




Utenti connessi: 802