mercoledì 29 ottobre 2014

Free ebook: Creating Mobile Apps with Xamarin.Forms, Preview Edition

Creating Mobile Apps with Xamarin.Forms, Preview Edition















Come riportato dal seguente post qui http://blogs.msdn.com/b/microsoft_press/archive/2014/10/08/free-ebook-creating-mobile-apps-with-xamarin-forms-preview-edition.aspx la possibilità di scaricare gratuitamente un ebook contenente alcuni capitoli del libro di prossima uscita sulla creazione di applicazioni mobili con Xamarin.

Che dirvi .... buona lettura




martedì 28 ottobre 2014

Rilevare da una immagine QRCode le informazioni

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_rilevare-da-una-immagine-qrcode-le-infor_1353.aspx



In questo articolo vedremo come rilevare le informazioni contenute in una immagine di tipo QRCode, il tutto tramite .Net 4.0, con il linguaggio di programmazione VB.Net e C#
Prima di tutto bisogna scaricare la libreria Zxing il download di tale libreria si può effettuare dal seguente sito http://zxingnet.codeplex.com/ , dopo averla scaricare e decompresso la cartella, aggiungere nei riferimenti del progetto la libreria zxing.

Stesura di codice

Creare un progetto di tipo Windows Application, selezionando il linguaggio di vostro interesse, inseriamo un pulsante che all'evento click andrà a rilevare da una immagine situata nel pc, le informazioni.
Dalla finestra esplora soluzione, aggiungere il riferimento alla libreria, la quale tramite appositi metodi ci permetterà di estrapolare i dati relativi alla immagine.
Aggiungiamo lo spazio di nomi zxing, qui di seguito si riporta un esempio di codice per i linguaggi di programmazione Visual Basic Net e C#.



VB.Net

Imports ZXing

 

C#

using ZXing;

La classe BarcodeReader ci permettere di gestire le immagini di tipo QrCode, tramite il metodo Decode, passando lo stream di un file immagine, rilevare le informazioni di tale immagine.
La proprietà Text ci restituisce il testo, mentre la proprietà format il formato.
Qui di seguito si riporta un frammento di codice da utilizzare all'evento click del pulsante


VB.Net

Private Sub BtnLeggi_Click(sender As System.Object, e As System.EventArgs) Handles BtnLeggi.Click

        Dim RilevaBarcodeReader As IBarcodeReader = New BarcodeReader()

        Dim BitMapBarcode As Bitmap = Bitmap.FromFile("E:\ImgQrCode.jpg")

        Dim risultato = RilevaBarcodeReader.Decode(BitMapBarcode)

        If Not risultato Is Nothing Then

            MessageBox.Show("Formato: " + risultato.BarcodeFormat.ToString() + "  Testo: " + risultato.Text)

        End If

    End Sub

 

 

C#

  private void BtnLeggi_Click(object sender, EventArgs e)

        {

            IBarcodeReader RilevaBarcodeReader = new BarcodeReader();

            var BitMapBarcode = (Bitmap)Bitmap.FromFile("E:\\ImgQrCode.jpg");

            var risultato = RilevaBarcodeReader.Decode(BitMapBarcode);

           

            if (risultato != null)

            {

                MessageBox.Show("Formato: " + risultato.BarcodeFormat.ToString() + "  Testo: " + risultato.Text );

            }

        }




Conclusioni
L'articolo, ha voluto fornire al lettore le informazioni basilari di come rilevare le informazioni da una immagine di tipo QrCode, tramite un componente gratuito.
L'articolo prende spunto dal precedente http://www.iprogrammatori.it/articoli/programmazione/art_net-generare-un-codice-qrcode-vbnet-e-c_1346.aspx  che illustra la tecnica di come generare un immagine di tipo QrCode.
Tramite il link  "Download codice" potete scaricare il file di esempio.


Download codice







lunedì 27 ottobre 2014

Get number page pdf iTextSharp

Se vogliamo ottenere il numero delle pagine di un file pdf, tramite la proprietà NumberOfPages della classe PdfReader possiamo sapere quante pagine è composto un file pdf.

domenica 26 ottobre 2014

VB.Net Linq select Impossibile assegnare il valore null a un membro di tipo System.Int32 con tipo di valore non nullable

Può capitare che durante l'utilizzo di Linq per effettuare una select in una fonte dati il cui campo di tipo Integer, presenta valore null, visualizza il seguente messaggio "Impossibile assegnare il valore null a un membro di tipo System.Int32 con tipo di valore non nullable.".
Questo perchè il campo di tipo integer non supporta valori null.

Per ovviare a questo, durante la selezione dei campi, impostare una condizione If con un valore in caso di minore di 1 fornirà 0 oppure vuoto.


Qui di seguito un esempio in VB.Net

'Valore 0
  Dim risultato = (From Dati In MioOggetto.Metodo()  Select New With {.Campo= Dati.Nome, .Campo2= Dati.Cognome,  .CampoInteger = If(Dati.Eta> 0, Dati.Eta, 0)})


'Valore 1.


Dim risultato = (From Dati In MioOggetto.Metodo() Select New With {.Campo= Dati.Nome, .Campo2= Dati.Cognome, .CampoInteger = If(Dati.Eta> 0, Convert.ToString(Dati.Eta), Convert.ToString(""))})

martedì 21 ottobre 2014

cms Orchard

Dal seguente sito http://www.orchardproject.net/ potete scaricare un CMS gratuito in ambito Asp.Net.
Il software di facile utilizzo è gratuito.

venerdì 17 ottobre 2014

VB.Net ottenere il giorno della setitmana

Se vogliamo ottenere il giorno della settimana, tramite la proprietà DayOfWeek si ottiene il giorno della settimana.
Nel frammento di codice qui di seguito verifichiamo se è uguale a sabato.

If DateTime.Parse(Data).DayOfWeek = DayOfWeek.Saturday  then
'Codice

End If

giovedì 16 ottobre 2014

datatable add primary key column

Se vogliamo aggiungere una chiave primaria ad una colonna in maniera dinamica, dobbiamo impostare la proprietà PrimaryKey della classe DataTable con il nome della colonna.
Qui di seguito un frammento di codice.


 MioDataTable.Columns.Add(New DataColumn("ColonnaChiave"))
        MioDataTable.PrimaryKey = New DataColumn() {MioDataTable.Columns("ColonnaChiave")}

mercoledì 15 ottobre 2014

DataTable metodo find per filtrare i dati

Tramite il metodo Find della proprietà Rows, possiamo filtrare nelle colonne chiave i record.
Qui di seguito si riporta un frammento di esempio

Dim Riga As DataRow = DataTable.Rows.Find("Valore")

domenica 12 ottobre 2014

Generare codice QRCode in .Net VB.Net e C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-generare-un-codice-qrcode-vbnet-e-c_1346.aspx

Sempre più in questi ultimi mesi si utilizzano i QrCode, immagini di tipo barcode che nascondono del testo o altra informazione.
I Qrcode sono utilizzati soprattutto per rilevare informazioni (per di più siti internet) tramite dispositivi mobili, come uno smartphone e tablet, nel quale leggendo tramite apposito programma l’immagine rilevano le informazioni.
In questo articolo spieghiamo come realizzare un'applicazione che genera un codice QRCode, utilizzando una libreria gratuita quale ZXing.Net.

Libreria ZXing.Net

Prima di creare un nuovo progetto, di tipo Windows Application, si deve scaricare la libreria ZXing, dal seguente sito http://zxingnet.codeplex.com/ a questo punto nella sezione “Download” scaricare la versione più aggiornata.
Terminato il download del file e scompattato aprire il proprio ambiente di sviluppo, Visual Studio 2010 (o versione successiva) selezionando il tipo di progetto “Windows Application” in base al proprio linguaggio di interesse.
Nella form, inserite un controllo di tipo Button ed un controllo di tipo image, quest’ultimo visualizzerà l’immagine
Dopo aver decompresso il file .Zip, aggiungete il riferimento (tasto destro sul nome del progetto, nella finestra esplora soluzione e selezionare il menu “Aggiungi riferimento”) alla libreria versione 4.0.

Stesura del codice

Ora non ci resta che scrivere il codice passando in visualizzazione codice.
Occorre referenziare lo spazio di nomi per l’utilizzo della libreria zxing, inseriamo la seguente dichiarazione di spazio di nomi per i linguaggi di programmazione VB.Net e C#.


VB.Net

Imports ZXing

 

C#

using ZXing;


A questo punto nell’evento click scriviamo il codice che ci permette di generare l’immagine QrCode.
Il codice è molto semplice, dopo aver dichiarato un oggetto di tipo “IBarcodeWriter”, si stabilisce il formato di scrittura, a questo punto tramite il metodo “Write” passando un valore di tipo string, viene generato un oggetto che verrà convertito in immagine per poi essere visualizzato in un controllo picturebox.



VB.Net

Dim Testo As String = "http://www.iprogrammatori.it"

        Dim GeneraBarcode As IBarcodeWriter = New BarcodeWriter() With {.Format = BarcodeFormat.QR_CODE}

        Dim bitmapBarcode As Bitmap

        Dim risultato = GeneraBarcode.Write(Testo)

        bitmapBarcode = New Bitmap(risultato)

        PictureBox1.Image = bitmapBarcode

 

C#

string Testo = "http://www.iprogrammatori.it";

            IBarcodeWriter GeneraBarcode = new BarcodeWriter() { Format = BarcodeFormat.QR_CODE };

            Bitmap bitmapBarcode;

            var risultato = GeneraBarcode.Write(Testo);

            bitmapBarcode = new Bitmap(risultato);

            PictureBox1.Image = bitmapBarcode;

 

Conclusioni

Tramite il link “Download” potete scaricare il file di esempio utilizzato in questo articolo.
L’articolo ha voluto fornire le basi per avvicinarsi al mondo della gestione del QrCode, in particolare nella generazione dei qrcode, tramite una libreria gratuita.

Download

giovedì 2 ottobre 2014

download free Windows 10 Technical Preview


A PC running Windows Technical Preview


Dal seguente sito http://windows.microsoft.com/en-us/windows/preview-download è possibile scaricare la versione di test del nuovo sistema operativo Windows.

Ricordiamo che essenso una versione ancora in fase di sviluppo da installare e provare o su macchine virtuale o su pc di test, perchè non è una versione stabile.
Che dirvi... buono studio.


martedì 30 settembre 2014

ext.net problem RadioGroup set checked

Il frammento di codice illustrato qui di  seguito riguarda una tecnica di come impostare in un controllo Radio situato in un Radiogroup il valore di spunta.

Può capitare che durante l'apertura di una finestra (oggetto Window) il valore di un controllo Radio situato in un controllo RadioGroup non venga valorizzato.

Qui di seguito, il frammento di codice che illustra tale tecnica.





  RadioGroup1.Items[1].Checked = false;
            RadioGroup1.Items[2].Checked = false;
            var value = new InsertOrderedDictionary();
            value.Add("radio1", "true");
            RadioGroup1.CustomConfig.Add(new ConfigItem("Checked", JSON.Serialize(value), ParameterMode.Value));


lunedì 22 settembre 2014

Download ViVo Next 3.0 ed il Computer Legge per Te

ViVo Next 3.0 il computer legge per te










Rilasciata la nuova versione di Vivo Next 3.0 http://www.istitutomajorana.it/index.php?option=com_content&task=view&id=2354&Itemid=33 un programma molto importante per coloro che hanno problemi di vista.

Il programma è un ausilio visivo e vocale, adatto per ipovedenti e dislessici, la nuova versione comporta novità interessanti.

Ricordiamo che il programma è portable che non richiede nessuna installazione.

Complimenti ad Antonio e Silvio, per questo programma che hanno realizzato.









domenica 21 settembre 2014

WINDOWS EMBEDDED 8.1 Industry Pro: l'embedded facile da usare!

Il 2 ottobre 2014 alle 15 (CET) ci sarà un Seminario ON-LINE gratuito presentato da Cesare De Siena (AVNET Embedded) e da Beppe Platania (BEPS) su:

WINDOWS EMBEDDED 8.1 Industry Pro: l’embedded facile da usare!

WE8.1 Industry Pro e Industry Pro Retail vi permettono di implementare la tecnologia Windows 8.1 sui vostri dispositivi embedded in maniera rapida ed sicura.

Per conoscere i dettagli e le funzionalità del nuovo sistema operativo registratevi
qui

Agenda:

Il processo di Build da ISO/DVD (Next, next,... finito!)

 
-
Procedura semplice e veloce
 
-
Come gestire i driver di Windows
 
-
Le funzionalità di Windows
 
-
Le funzionalità Embedded
 
-
Un accenno al gestore delle funzionalità Embedded (ELM) 
 
-
Cattura dell'immagine (copia MASTER)
 
-
Duplicazione dell'immagine (copia MASTER)

l processo di Build con WSIM/WinPE (AIK)

 
-
Cos'è AIK
 
-
Cos'è WinPE
 
-
Come personalizzare Industry prima della build
 
-
Come personalizzare I'Answer-file di clonazione

ISCRIVITI AL SEMINARIO ON-LINE GRATUITO SU WINDOWS EMBEDDED 8.1 INDUSTRY PRO

Il Seminario, della durata di 45 minuti, si svolgerà on-line in italiano il 2 OTTOBRE alle 15 (CET)
Per partecipare bisogna registrarsi gratuitamente al seguente sito http://www.avnet-emb.eu/webinar/windows-embedded/italy dove si può consultare l'agenda dell'evento.

sabato 20 settembre 2014

LabVIEW Developer Tour




L'evento Labview Developer Tour, è una bellissima iniziativa formativa gratuita della società National Instruments Italia http://italy.ni.com per far conoscere l'ambiente di sviluppo Labview.


L'evento, qui http://italy.ni.com/labview-developer-tour la pagina ufficiale riguarda due tipologia di sessioni, una per principianti per far conoscere il prodotto e soprattutto con attività di laboratorio e l'altra per esperti in materia di certificazione.

L'evento si terrà in alcune città italiane, per iscrizioni e maggiori informazioni visitate il sito http://italy.ni.com/labview-developer-tour ufficiale.







giovedì 18 settembre 2014

free download ebook il dottore dei computer edizione XV




Novità per tutti coloro che cercano un manuale o meglio un ebook gratuito con consigli e trucchi sul mondo dei computer.
Da questo sito http://www.ildottoredeicomputer.com/2014/09/il-dottore-dei-computer-volume-15.html potete scaricare il volume 15, dell'ebook di "Il Dottore dei Computer".



mercoledì 17 settembre 2014

C# Array Set Value dynamic

Se abbiamo un array di string, e vogliamo settare un valore in una posizione, tramite il metodo SetValue, possiamo impostare il valore in una determinato indice.

Qui di seguito un esempio di codice in C#

 string[] MioArray = new string[8];
MioArray.SetValue("testo", 2);

venerdì 12 settembre 2014

Nanoforum evento gratuito sulle micro e nanotecnologie

Ritorna l'appuntamento più atteso dell'anno sulla tematica riguardante le micro e nanotecnologie, un forum di quattro giorni per scoprire le novità di questo settore, confrontarsi con esperti del settore.
Nanoforum http://www.nanoforum.it/ giunto alla sua decima edizione si propone come punto di riferimento per tutti coloro che lavorano in questo settore o che si stanno avvicinando.
L'evento è gratuito ed aperto a tutti per partecipare bisogna registrarsi al seguente sito http://www.nanoforum.it/iscrizione-nanoforum nel quale trovate l'agenda, il luogo ed altre informazioni di questo meraviglioso evento.

lunedì 8 settembre 2014

Evento Tecnologie Embedded per le Smart Machine

731x250


Ritornano gli eventi di National Instruments, questa volta a Reggio Emilia il giorno 30 settembre 2014, ci sarà un evento dedicato alle tecniche di progettazione meccatronica.

Qui http://italy.ni.com/eventi/seminario-smart-machine trovate informazioni sull'evento ed il modulo di iscrizione.

Un evento molto interessante.















sabato 6 settembre 2014

Recensione libro: Programmare con C# 5 Guida Completa



Scheda del libro:

Autore:
Antonio Pelleriti
Prezzo: Euro 48,90
Caratteristiche:
784 pag - 17x24
Numero Edizione:
1
Anno di edizione: Maggio 2014
ISBN: 9788868950125
Lingua: Italiano
Rilegatura Brossura

Interessante pubblicazione quella della casa editrice LSWR http://www.lswr.it  la quale prima dell’estate ha dato vita ad un buon manuale sul linguaggio di programmazione C#. Il libro Programmare con C# 5 Guida Completa http://www.lswr.it/libro/programmare-con-c-5/  è un manuale che affronta in maniera chiara ed esaustiva questo linguaggio.

Nel libro si trovano numerose immagini e frammenti di codice per far comprendere al lettore questa nuova versione del linguaggio di programmazione, che far nascere curiosità ai numerosi programmatori. Come ogni buon manuale che si rispetti, il libro fornisce una buona base per programmare con questo linguaggio, anche in ambiente web e mobile.

Qui di seguito si riportano i vari capitoli del libro. el libro.

1)  C# e la piattaforma .Net
2) Concetti di base di C#

3) Tipi e oggetti

4) Espressioni e operatori

5) Controllo di flusso

6) Programmazione a oggetti in C#

7) Ereditarietà e polimorfismo

8) Gesteione delle eccezioni

9) Tipi generici e collezioni

10)  Delegate ed eventi

11) Linq

12) Multithreading, programmazione asincrona e parallela

13) XML in C#

14) Reflection attributi e programmazione dinamica

15) Accesso ai dati

16) Applicazioni pratiche di C#

Appendice A) Stringhe ed espressioni regolari

Appendice B) Interoperabilità



Conclusioni
Ottimo manuale indispensabile per coloro che si avvicinano alla programmazione C# o che conosco altro linguaggio (VB.Net, Java, Delphi, etc) e che vogliono avvicinarsi a questo linguaggio. Il manuale guida passo per passo il lettore alla scoperta di questo linguaggio.

venerdì 5 settembre 2014

Recensione libro: Analisi dei dati con Excel



Scheda del libro:

Autore:
Alessandra Salvaggio
Prezzo: Euro 21,90
Caratteristiche:
288 pag - 17x24
Numero Edizione:
1
Anno di edizione: Giugno  2014
ISBN: 9788868950996
Lingua: Italiano
Rilegatura Brossura

La casa editrice Lswr http://www.lswr.it/  prima dell'estate ha pubblicato un libro su Excel molto interessante, il manuale Analisi dei dati con Excel    http://www.lswr.it/libro/analisi-dei-dati-con-excel/   scritto da Alessandra Salvaggio autrice di diversi manuali sul pacchetto Office, riguarda l'utilizzo di Excel sull'utilizzo di particolari funzioni.

Nel portale curato sempre dall'autrice del libro, Sos Office http://www.sos-office.it/ si trova altro materiale sul mondo Microsoft Office.

Ma vediamo in dettaglio i vari capitoli di questo libro.

Il primo capitolo a cui ha inizio anche la prima parte di questo manuale, riguarda alcuni aspetti introduttivi alle funzione e come assegnare alle intestazioni dei nomi.

Terminato il primo capitolo, si passa al capitolo due, nel quale sono illustrate tutte quelle funzioni di ricerca e riferimento che permettono di effettuare delle ricerche nel nostro file. Come si rispetti per tutti coloro che si avvicinano ad Excel, la prima formula che viene illustrata è Cerca.vert, illustrando i vari scenari che si possono verificare con questa formula. Continuando a leggere il capitolo viene illustrata la formula confronta, scarto, conta valori, ed indiretto. Un capitolo con diversi esempi di formule.

Il capitolo 3, illustra quelle funzioni logiche e di condizioni, quali e, se, not, somma più etc. Un capitolo più breve dei precedenti, ma che ha il solo scopo di illustrare tale funzionalità.

Un capitolo molto interessante che tornerà utile agli utilizzatori di Excel, è il quarto capitolo, in questo capitolo viene illustrata la gestione degli errori, molto importante, visto che in un software così potente, si possono compiere errori.

Nel capitolo 5, viene affrontato in maniera esaustiva tutte quelle funzioni che permettono di effettuare l’arrotondamento. I numerosi esempi e il dettaglio delle varie funzioni, forniranno al lettore un valido supporto.

Il capitolo sesto, riporta interessanti esempi e formule che tornano utile nella gestione delle date ed ore. Il capitolo contiene una serie di esempi, di uso comune, che torneranno utile anche chi utilizza poco questo tipo di informazione.

Con il settimo capitolo, si conclude la prima parte di questo interessante libro. Il capitolo, illustra una gestione complessa delle formule, i dati in forma di matrice, un argomento complesso ma che tramite i vari esempi fornirà al lettore una base su cui lavorare in certe situazioni.

Con il capitolo ottavo, prende inizio la seconda parte del libro, in questo capitolo vedremo come strutture i dati, e raggrupparli. Un capitolo sotto vari aspetti interessante.

Il capitolo 9, è rivolto ad un tema che riscontra sempre interesse e che troviamo in ogni buon libro di Excel che si rispetti, le tabelle Pivot. L’autore del libro affronta in maniera ottimane tale argomento, che grazie al supporto anche delle numerose immagini, e degli esempi, il lettore comprenderà in maniera facile l’argomento trattato.

Il capitolo decimo riguarda una parte molto interessante, che può tornare utile a coloro che utilizzano Excel. La gestione dei dati su più file, nel capitolo viene preso in esame una situazione in cui bisogna gestire informazioni provenienti da tre distinti file di Excel.

Nel capitolo 11, viene illustrata una funzionalità che poco si conosce o si utilizza, le tabelle in Excel. Nel capitolo viene fatta una panoramica con diversi esempi sull’utilizzo di tabelle in Excel.

Il capitolo 12, illustra in maniera dettagliata lo strumento Microsoft Query, delle sue potenzialità e come utilizzarlo nel modo migliore.

Nel terzultimo capitolo (13 ) viene affrontata un’altra funzionalità che ci mette a disposizione Microsoft Excel, lo strumento per fare analisi di simulazione. Un modo di analizzare i dati nel nostro file Excel. Il capitolo fornisce interessanti indicazioni.

Nel penultimo capitolo (14) viene fornita una panoramica del componente gratuito “risolutore”, l’autore fornisce al lettore alcuni casi reali di come utilizzarlo.

Con l’ultimo capitolo (15) viene illustrato altro componente gratuito, il PowerPivot, e di come questo strumento può dare un valido aiuto all’utente nella gestione dei dati.



Qui di seguito si riportano i vari capitoli del libro. el libro.

1) Le Funzioni

2) Funzioni di ricerca e di riferimento

3) Le funzioni logiche e le funzioni condizionali

4) Gestire gli errori

5) Le funzioni di arrotondamento

6) Funzioni di data e ora

7) Le funzioni in forma di matrice

8) Strutture

9) Le tabella Pivot

10) Consolidare i dati

11) Le tabelle

12) Microsoft query

13) Analisi di simulazione

14) Il risolutore

15) PowerPivot



Conclusioni
Un buon libro per chi utilizza Excel e vuole comprendere alcune formule di questo ottimo software.

Le numerose immagini e gli esempi semplificano la comprensione dell'argomento  trattato.

giovedì 4 settembre 2014

.Net Importare dati da Excel in Oracle C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-importare-i-dati-da-un-file-excel-in_1390.aspx


Introduzione

In questo articolo vedremo come creare un semplice programma (Windows Application) che forniti alcuni parametri, estrapola i dati da un file Excel e li inserisce in una tabella di Oracle.
Creazione progetto
Creare una tabella (Anagrafica) con i seguenti campi, Nome e Cognome di tipo Varchar 255.
A questo punto salvate la tabella con il nome Anagrafica.
Create un file Excel, impostando in A1 il valore Nome, ed in B1 il valore Cognome.
A questo punto inserite nelle successive righe (a2, a3, a4, b2, b3,b4) i dati di vostro piacimento.
Terminata la creazione di tabella e file, aprite Visual Studio 2010 o versione successiva, e selezionate come linguaggio di programmazione C#, il modello selezionate Windows Application o console application.

Stesura del codice

Passate in visualizzazione codice, aggiungete i riferimenti alla libreria “Microsoft.Practices.EnterpriseLibrary.Common” e “Microsoft.Practices.EnterpriseLibrary.Data” “Microsoft.Practices.ObjectBuilder” le librerie EnterpriseLibrary, ci permettono di seguire query (insert) anche nel caso che un domani vogliamo cambiare il tipo di database, per esempio in Sql Server, in questo modo evitiamo di riscrivere tutto l’applicativo.
Aggiungiamo al progetto un file di tipo “AppSetting” in questo file ci saranno i parametri che permetteranno di gestire le informazioni di elaborazione, come nome colonne, nome foglio, file Excel, tabella, nome colonne, ed altro ancora.
Qui di seguito si riporta il contenuto del file di configurazione.


<appSettings >

 

  <add key="FOLDERARCHIVIO" value="E:\TestFile"></add>

 

  <add key="FOLDERNOMEFILEXCEL" value="E:\NomeFileExcel.xls"></add>

 

  <add key="ARCHIVIAZIONE" value="true"></add>

 

  <add key="NOMEEFOGLIO" value="Foglio1"></add>

 

  <add key="NOMICOLONNEEXCEL" value="A,B"></add>

 

  <add key="RILEVANOMICOLoNNE" value="true"></add>

 

  <add key="NOMETABELLADB" value="Anagrafica"></add>

 

  <add key="CAMPITABELLA" value="Nome, Cognome"></add>

 

  <add key="CONNECTION" value="Data Source=NomeServer;Persist Security Info=True;User ID=UserName;password=Password;"></add>

 

  <add key="PROVIDERNAME" value="System.Data.OracleClient"></add>

 

 

 

 

 

</appSettings>


I parametri sono semplici da comprendere, forse un parametro di non facile comprensione può essere quello relativo al valore “RilevaNomiColonne”, il quale indica che vanno calcolate i veri nomi delle colonne, se per esempio mettiamo A, B, lui rileverà i veri nomi che abbiamo messo nell’intestazione.
Nell’evento click del pulsante o nel load della form o quando viene eseguito l’applicativo di tipo console, scriviamo il seguente codice.

        try

            {

 

 

                string PercorsoArchivio = System.Configuration.ConfigurationManager.AppSettings["FOLDERARCHIVIO"];

                Boolean Archiviazione = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["ARCHIVIAZIONE"]);

                string FolderFileExcel = System.Configuration.ConfigurationManager.AppSettings["FOLDERNOMEFILEXCEL"];

 

                string NomiColonneExcel = System.Configuration.ConfigurationManager.AppSettings["NOMICOLONNEEXCEL"];

                string NomeFoglio = System.Configuration.ConfigurationManager.AppSettings["NOMEEFOGLIO"];

 

 

                Boolean RilevaNomiExcel = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["RILEVANOMICOLONNE"]);

                string NomeTabellaDB = System.Configuration.ConfigurationManager.AppSettings["NOMETABELLADB"];

                string NomiColonneTabellaDB = System.Configuration.ConfigurationManager.AppSettings["CAMPITABELLA"];

                string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["CONNECTION"];

                string ProvviderName = System.Configuration.ConfigurationManager.AppSettings["PROVIDERNAME"];

 

 

 

 

                if (NomiColonneExcel.Split(',').Count() != NomiColonneTabellaDB.Split(',').Count())

                {

                   Messagebox.Show("Il numero dei campi Excel e numero dei campi della tabella non sono uguali, verificare la correttezza dei dati.");

                     

                }

                else

                {

                    //continuo l'elaborazione.

                    string SqlExcel = "SELECT  ";

                    if (RilevaNomiExcel == true)

                    {

                        SqlExcel += GetNameColumn(lFolderFileExcel, lNomeFoglio, NomiColonneExcel);

                    }

                    else

                    {

                        SqlExcel += NomiColonneExcel;

                    }

                    SqlExcel = SqlExcel + " FROM [" + NomeFoglio + "$];";

 

                    EseguiQuery(FolderFileExcel, SqlExcel, NomeTabellaDB, NomiColonneTabellaDB, ConnectionString , ProvviderName);

 

 

                }

 

 

 

 

 

 

 

            }

            catch (Exception ex)

            {

                Messagebox.Show(ex.Message, ex);

                 

            }

 
Come si è visto dal frammento del codice precedente, dopo aver rilevato I dati del file di configurazione, si crea la query sql da eseguire sul file Excel, come se fosse a tutti gli effetti una tabella di database, per la query select, viene generato verificando l’effettivo nome delle colonne, il tutto tramite la funzione “GetNameColumn”.
Mentre la funzione EseguiSql, esegue l’operazione di importazione dati.
Vediamo in dettaglio le varie funzioni ed istruzioni.
La funzione GetNameColumn, riportato qui di seguito, accetta tre parametri, il nome del file, il foglio su cui effettuare la connessione e quali colonne prendere in esame (a,b), separati dalla virgola,
Il codice estrapola i vari nomi delle colonne, che corrispondono alle intestazione di colonne, che abbiamo impostato inizialmente quando si è creato il file Excel, in A1 abbiamo inserito “Nome” ed in B1 “cognome.
Ogni colonna è racchiusa tra parentesi quadrate, perché nel caso che sono presenti colonne con spazi, questo le considera come nomi colonne.
Qui di seguito si riporta il codice completo di tale funzione.



private static string GetNameColumn(string pPercorsoNomeFileExcel, string pNomeFoglio, string pLetteraColonna)

        {

 

            const string cLettereExcel = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //26

            DataTable pColonne = new DataTable();

            string NomeColonna = "";

            string strConnectionString = "";

            if (pPercorsoNomeFileExcel.Trim().EndsWith(".xlsx"))

                strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES\";", pPercorsoNomeFileExcel);

            else if (pPercorsoNomeFileExcel.Trim().EndsWith(".xls"))

            {

                strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes\";", pPercorsoNomeFileExcel);

            }

 

            using (OleDbConnection Connection = new OleDbConnection(strConnectionString))

            {

                Connection.Open();

 

                OleDbDataReader Record;

 

                OleDbDataAdapter DtaQuery = new OleDbDataAdapter("Select top 1 * from [" + pNomeFoglio + "$]  ;", Connection);

                DataTable DttDati = new DataTable();

                DtaQuery.Fill(DttDati);

 

                string[] Colonne = pLetteraColonna.Split(',');

 

                for (int ContaColonne = 0; ContaColonne < Colonne.Length; ContaColonne++)

                {

                    if (ContaColonne > 0)

                    {

                        NomeColonna += ",";

                    }

                    int Indice = -1;

                    if (Colonne[ContaColonne].Trim().Length > 1)

                    {

                        for (int ContaElementi = 0; ContaElementi < lColonne[ContaColonne].Length; ContaElementi++)

                        {

                            if (ContaElementi > 0)

                            {

                                Indice += 25 + cLettereExcel.IndexOf(Colonne[ContaColonne].Trim().Substring(ContaElementi + 1));

                            }

                            else

                            {

                                Indice = cLettereExcel.IndexOf(lColonne[ContaColonne].Trim().Substring(ContaElementi + 1)) + 1;

                            }

 

                        }

                    }

                    else

                    {

                        Indice = cLettereExcel.IndexOf(lColonne[ContaColonne].Trim());

                    }

                    NomeColonna += "[" +  DttDati.Columns[Indice].ColumnName.Trim() + "]";

                }

                Connection.Close();

            }

 

            return NomeColonna;

        }

La funzione EseguiQuery, che accetta come argomenti, il nome del file Excel, la query SQL da eseguire su Excel, il nome della tabella e nome dei campi su cui eseguire l’inserimento, la stringa di connessione per collegarsi al database ed il tipo di Database.
La funzione effettua un colleganto al file Excel, ed esegue l’istruzione SQL per Excel, che gli viene passata, per ogni record che viene trovato, genera il codice sql di tipo Insert, da eseguire sul database Oracle (oppure su altro database) tramite la funzione “GetQueryInsertDB” , a questo punto viene eseguita la funzione EseguiInsert, che restituisce 0 nel caso che non ha buon esito, oppure 1 in caso di inserimento.
Qui di seguito si riporta la descrizione di tale funzione.



  private static void EseguiQuery(string pPercorsoNomeFileExcel, string pQueryExcel, string pNomeTabellaDB, string pCampiDB, string pConnectionString, string pProviderName)

        {

 

            try

            {

 

                string strConnectionString = "";

                if (pPercorsoNomeFileExcel.Trim().EndsWith(".xlsx"))

                    strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES\";", pPercorsoNomeFileExcel);

                else if (pPercorsoNomeFileExcel.Trim().EndsWith(".xls"))

                {

                    strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;MaxScanRows=1;\";", pPercorsoNomeFileExcel);

                }

 

                using (OleDbConnection Connection = new OleDbConnection(strConnectionString))

                {

                    Connection.Open();

 

                    OleDbDataReader Record;

 

 

                    OleDbCommand Query = new OleDbCommand(pQueryExcel);

                    Query.Connection = Connection;

                    Record = Query.ExecuteReader();

                    DataTable DttDatiRisultato = new DataTable();

                    DttDatiRisultato.Load(lRecord);

 

                    string QueryInsert = "";

                    foreach (DataRow Elemento in DttDatiRisultato.Rows)

                    {

 

 

                        QueryInsert = GetQueryInsertDB(pNomeTabellaDB, pCampiDB, Elemento);

 

                        //Eseguo la query

 

                        if (EseguiInsert(pConnectionString, pProviderName, QueryInsert) > 0 )

                        {

                            Messagebox.Show("Record inserito correttamente."  );

                        }

                        else

                        {

                            Messagebox.Show("Record non inserito.");

                        }

 

 

 

                    }

 

 

 

                }

            }

            catch (Exception ex)

            {

 

                throw ex;

            }



La funzione GetInsertQueryDB, che accetta come argomenti il nome tabella e nomi colonne, oltre ad un oggetto di tipo DataRow, nel quale sono presenti i valori da inserire nella base dati, genera l’istruzione SQL che servirà ad inserire i dati nella tabella.
Qui di seguito si riporta tale funzione.


private static string GetQueryInsertDB(string pNomeTabella, string pNomiColonneDB, DataRow pRigaValori)

        {

 

            string NomeColonna = "";

            string ValoreColonna = "";

 

            string[] NomiColonne = pNomiColonneDB.Split(',');

 

            for (int ContaElementi = 0; ContaElementi < NomiColonne.Length; ContaElementi++)

            {

                NomeColonna += lNomiColonne[ContaElementi] + ",";

                ValoreColonna += "'" + pRigaValori[ContaElementi] + "',";

            }

 

            NomeColonna = lNomeColonna.Substring(0, NomeColonna.Length -1);

            ValoreColonna = lValoreColonna.Substring(0, ValoreColonna.Length -1);

 

 

 

            return "INSERT INTO " + pNomeTabella + " (" + NomeColonna +") VALUES (" + lValoreColonna + ")";

       

       

        }


Siamo giunti all’ultima funzione, quella che permetterà di eseguire l’istruzione SQL di tipo Insert per inserire i valori nella base dati.
Utilizzando le classi messe a disposizione da EnterpriseLibray, possiamo utilizzare questo codice, su diversi database, ci basterà cambiera il tipo di provvider e connessione, nel file di configurazione.
La funzione accetta come parametri,  la stringa di connessione, il tipo di provvider, e l’istruzione SQL. Tramite il metodo “ExecuteNonQuery” viene restituto il numero dei record inseriti (1) oppure in caso di errore, nessuno (0).

    int EseguiInsert(string Connection, string ProviderName, string Query)

        {

            int Return = 0;

            DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(ProviderName);

 

            Database db = new GenericDatabase(Connection, dbProviderFactory);

 

            DbCommand DBCommand = default(DbCommand);

 

            DBCommand = db.GetSqlStringCommand(Query);

 

            Return = db.ExecuteNonQuery(DBCommand); 

 

            return Return;

 

        }


Conclusioni

In questo articolo abbiamo visto come possiamo realizzare una semplice applicazione di grande aiuto con notevole flessibilità ed adattabilità.
Tramite i parametri situati nel file di configurazione, possiamo inserire i dati presi da un file Excel ed inserirli in una tabella Oracle, senza rimettere codice, oppure cambiando il tipo di provider inserire in altri database, come in Sql Server, senza anche in questo caso rimettere mano nel codice.
Può tornare utile in quei scenari, in cui si devono importare diverse righe di Excel, su un database Oracle o altro.