domenica 9 novembre 2014

.Net eseguire query su database diferenti C# e VB.Net

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_eseguire-query-su-database-differenti_1355.aspx


In questo articolo vedremo come realizzare una semplcie applicazione che permette di eseguire le query su database differenti, in particolare nell'articolo vedremo come effettuare la select su un database di tipo Microsoft Access e Microsoft Sql Server, il tutto utilizzando le librerie Enterprise Library, di Microsoft.

Creazione del progetto

Si crea un progetto di tipo Windows Application, selezionando il linguaggio di programmazione di proprio interesse.
Nella form, inserimano alcuni controlli come una label, una textbox e due pulsanti.
I pulsanti avranno il compito di eseguire le query che viene per i vari database, un pulsante per il database Access e l'altro per il pulsante SQL.

Stesura del codice

Passiamo in visualzzazione codice ed aggiungiamo lo spazio dei nomi riguardante la gestione dei database ed in particolare della libreria EnterpriseLibrary.Data.
Qui di seguito si riporta tale frammento di codice:



VB.Net

 
Imports System

Imports System.Collections.Generic

Imports System.Linq

Imports System.Text

 

Imports System.IO

Imports Microsoft.Practices.EnterpriseLibrary.Data

Imports System.Data

Imports System.Data.Common

 

C#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using Microsoft.Practices.EnterpriseLibrary.Data;

using System.Data;

using System.Data.Common;

using System.Windows.Forms;

 

Ora dobbiamo scrivere il codice che fornita una query, o meglio un istruzione SQL la esegua a prescindere dalla fonte dati.
La funzione qui di seguito, accetta tre argomenti,  la connessione alla fonte dati, ossia la query string, il tipo di provider, ossia che base, (Sql Server, Access, Oracle, etc) e la query.
La funzione restituisce un oggetto di tipo Database, il quale viene valorizzato, quando si esegue la funzione ExecuteDAtaSet dell'oggetto di tipo Database.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi.



Vb.Net

Function GetDati(Connessione As String, Provider As String, Sql As String) As DataTable

 

        Dim RisultatoDTT As New DataTable

        Try

            Dim dbProviderFactory As DbProviderFactory = DbProviderFactories.GetFactory(Provider)

 

            Dim Database As Database = New GenericDatabase(Connessione, dbProviderFactory)

 

 

            Dim dbCommand As DbCommand

 

            DbCommand = Database.GetSqlStringCommand(Sql)

 

 

            RisultatoDTT = Database.ExecuteDataSet(dbCommand).Tables(0)

 

 

 

 

        Catch ex As Exception

            Throw ex

        End Try

 

 

        Return RisultatoDTT

 

    End Function

 

 

C#

 

          DataTable GetDati  (string Connessione, string Provider, string Sql)

        {

            DataTable RisultatoDTT = new DataTable();

            try

            {

 

                DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(Provider);

 

                Database database = new GenericDatabase(Connessione, dbProviderFactory);

 

                DbCommand  dbCommand = default(DbCommand);

 

                dbCommand = database.GetSqlStringCommand(Sql);

 

 

                RisultatoDTT = database.ExecuteDataSet(dbCommand).Tables[0];

 

 

            }

            catch (Exception ex)

            {

 

                throw ex;

            }

            return RisultatoDTT;

        }


Ora non ci resta che scrivere la funzione per eseguire tale query.
Un pulsante richiamerà la funzione impostando come valori, la connectionstring, il tipo di database e la query.
Qui di seguito si riporta il codice per entrambi i linguaggi e per i due database.




Access

Vb.Net

Private Sub btnEsegui_Click(sender As System.Object, e As System.EventArgs) Handles btnEsegui.Click

        Dim Dati As DataTable = GetDati("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\test.mdb", "System.Data.OleDb", TxtSql.Text)

        MessageBox.Show("Record Totali: " & Dati.Rows.Count)

 

    End Sub

 

C#

private void btnEsegui_Click(object sender, EventArgs e)

        {

            DataTable Dati = GetDati(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\test.mdb", "System.Data.OleDb", TxtSql.Text);

            MessageBox.Show("Record Totali: " + Dati.Rows.Count);

 

 

        }

 

 

Sql Server

 

VB.Net

Private Sub BtnEseguiMS_Click(sender As System.Object, e As System.EventArgs) Handles BtnEseguiMS.Click

        Dim Dati As DataTable = GetDati("Server=localhost;Database=test;Trusted_Connection=True;", "System.Data.SqlClient", TxtSql.Text)

 

        MessageBox.Show("Record Totali: " & Dati.Rows.Count)

 

    End Sub

 

C#

private void button1_Click(object sender, EventArgs e)

        {

            DataTable Dati = GetDati(@"Server=localhost;Database=test;Trusted_Connection=True;", "System.Data.SqlClient", TxtSql.Text);

            MessageBox.Show("Record Totali: " + Dati.Rows.Count);

 

        }




Conclusioni
L'articolo ha voluto illustrare una tecnica per estrapolare i dati da database differenti, rendendo in questo modo il nostro programma flessibile su più fonti di dati. Questa tecnica ci permette di rendere le nostre applicazioni flessibili con un alta interoperabilità nella gestione di database differenti, senza modificare il codice.
Tramite semplici impostazioni al programma, che possono essere passate anche dall'esterno, possiamo renderlo facilmente flessibile minimazzando la manutenzione del codice.



Tramite il link download è possibile scaricare il file di esempio di questo articolo.

Nessun commento: