lunedì 1 giugno 2015

Entity Framework eseguire comandi SQL

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_entity-framework-eseguire-comandi-sql_1389.aspx

In questo articolo vedremo come in Entity Framework (versione 6 ) possiamo utilizzare istruzioni SQL per estrapolare i dati da una fonte dati.
Il linguaggio utilizzato è VB.Net e C#, utilizzando il database Sql Server 2014.
Prima di tutto bisogna creare una tabella denominata “Anagrafica” con tre campi (ID, Nome e Cognome).
Valorizzare la tabella con i valori di vostro piacimento.
A questo punto terminata la creazione della base dati valorizzando la tabella con i dati, non ci resta che aprire l'ambiente di sviluppo Visual Studio.

Stesura del codice

A questo punto si crea un progetto di test, in particolare un progetto di tipo “Windows Application”,  nel linguaggio di vostro interesse, ultimata la creazione del progetto, inserite un controllo di tipo DatagridView, che servirà a visualizzare i dati, ed un pulsante, il quale permetterà di estrapolare i dati.
Passiamo in visualizzazione codice, ed inseriamo gli spazi di nomi che ci permetteranno di utilizzare alcune classi.
Qui di seguito la dichiarazione per il linguaggio VB.Net e C#


VB.Net

Imports System.Data

Imports System.Data.Entity.Core.Objects

Imports System.Data.Common

C#

using System.Data;

using System.Data.Common;

using System.Data.Entity.Core.Objects;

Ora nell’evento click del pulsante scriviamo il codice per eseguire istruzione SQL che restituire una serie di oggetti di tipo “Anagrafica” che è la nostra tabella.


VB.Net

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

 

        Using Contesto As New ObjectContext("name=DatiEntities")

            Dim sql As String = "SELECT VALUE Anagrafica FROM DatiEntities.Anagrafica as Anagrafica"

            Dim query As New ObjectQuery(Of Anagrafica)(sql, Contesto)

            DataGridView1.DataSource = query

        End Using

End Sub

C#

private void button1_Click(object sender, EventArgs e)

        {

 

            using (ObjectContext Contesto = new ObjectContext("name=DatiEntities"))

            {

                string Sql = "SELECT VALUE Anagrafica FROM DatiEntities.Anagrafica as Anagrafica";

                ObjectQuery<Anagrafica> query = new ObjectQuery<Anagrafica>(Sql, Contesto);

                dataGridView1.DataSource = query;

            }

}



Come si vede dal frammento del codice precedente, si crea un oggetto di tipo ObjectContext , e tramite l’oggetto di tipo “ObjectQuery” si ottiene una serie di oggetti che corrispondono ai vari record di tipo “Anagrafica” che fanno riferimento alla tabella creata in precedenza, il tutto passando come parametri istruzioni di tipo “SQL” e l’oggetto contesto.
Si è utilizzato la parola chiave “Value” per far riferimenti ai vari campi della tabella.
Il risultato sarà visibile nel controllo DatagridView.
L’esempio qui di seguito invece illustra una tecnica di come utilizzare un parametro.



VB.Net

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Using Contesto As New ObjectContext("name=DatiEntities")

            Dim sql As String = "SELECT VALUE Anagrafica FROM DatiEntities.Anagrafica as Anagrafica where Anagrafica.Cognome = @Param1 "

            Dim query As New ObjectQuery(Of Anagrafica)(sql, Contesto)

 

            query.Parameters.Add(New ObjectParameter("Param1", "a"))

 

            DataGridView1.DataSource = query

        End Using

End Sub

C#

private void button1_Click(object sender, EventArgs e)

        {

using (ObjectContext Contesto = new ObjectContext("name=DatiEntities"))

            {

                string Sql = "SELECT VALUE Anagrafica FROM DatiEntities.Anagrafica as Anagrafica Where Anagrafica.Cognome = @Param1 ";

                ObjectQuery<Anagrafica> query = new ObjectQuery<Anagrafica>(Sql, Contesto);

                query.Parameters.Add(new ObjectParameter("Param1", "a"));

                dataGridView1.DataSource = query;

            }

}


Se invece dobbiamo eseguire una query e non sappiamo che tipo di oggetto sarà (se tabella Anagrafica o altro) possiamo utilizzare la tecnica dei tipi anonimi, utilizzando oggetto  di tipo DbDataRecord, ci permette di gestire le informazioni senza conoscere il tipo di dato.
Qui di seguito viene illustrata una tecnica di come estrapolare dei dati senza conoscere il tipo di oggetto che viene restituito come invece avveniva nel frammento di codice precedente in cui era indicato il tipo di risultato (tabella Anagrafica).



VB.Net

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

  Using Contesto As New ObjectContext("name=DatiEntities")

                Dim sql As String = "SELECT   Anagrafica.Cognome FROM DatiEntities.Anagrafica as Anagrafica "

                Dim query As New ObjectQuery(Of DbDataRecord)(sql, Contesto)

                DataGridView1.DataSource = query

            End Using

 

End Sub

C#

private void button1_Click(object sender, EventArgs e)

        {

             using (ObjectContext Contesto = new ObjectContext("name=DatiEntities"))

            {

                string Sql = "SELECT   Anagrafica.Cognome FROM DatiEntities.Anagrafica as Anagrafica ";

                ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(Sql, Contesto);

                dataGridView1.DataSource = query;

            }

       

        }



Conclusioni

In questo articolo abbiamo visto come utilizzare istruzioni SQL per estrapolare dati, le varie tecniche utilizzate in questo articolo permettono di estrapolare dati in vari modi.
Entity Framework è una tecnologia molto potente e flessibile che offre allo sviluppatore un vero strumento per migliorare la stesura di codice e la gestione dei dati. La tecnica appena vista offre anche la possibilità di  estrapolare i dati in forma più veloce.

Nessun commento: