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:
Posta un commento