lunedì 12 febbraio 2018

TUTORIAL POWERSHELL - PARTE 10 - DATABASE

Tutorial introduttivo all'utilizzo di PowerShell, a prima vista una estensione del prompt dei comandi di Microsoft Windows ma che in realtà è molto di più.






Lista completa articoli su Tutorial PowerShell [link]

OLEDB

OLEDB [wikipedia] è una tecnologia sviluppata da Microsoft per l'accesso unificato a basi dati eterogenee, progettata per sostituire la più comune tecnologia ODBC [wikipedia], utilizzata per accedere a Database Relazionali e non.

Per stabilire una connessione con una base dati, sono necessarie le seguenti informazioni:
  1. Provider
  2. Sorgente
  3. Database
  4. Username
  5. Password
Nel dettaglio:

  • Il Provider è un software che permette di interfacciare un Consumer (la nostra applicazione) con la base dati desiderata.
  • La Sorgente è la macchina (il database server) che contiene la base dati, può essere un indirizzo IP o un Hostname. In alcuni casi potrebbe essere necessario aggiungere dei suffissi o prefissi, come nel caso di Database Microsoft SQL Server in cui è possibile specificare anche l'istanza SQL della sorgente.
  • Il Database è il nome dell'archivio database contenuto nella sorgente; una sorgente può contenere più di un database 
  • Username e Password formano le credenziali di accesso alla base dati, volendo possono essere utilizzate le credenziali dell'utente attivo nel Sistema Operativo.

OleDB Connection in PowerShell

Premesso che la connessione verso un DB Microsoft SQL Server dovrebbe essere realizzata tramite un provider dedicato e non OLEDB generico, vediamo come creare una connessione in PowerShell:

$cn="Provider={0};Data Source={1};Initial Catalog={2};User ID={3};Password={4};"
$cn=[String]::Format($cn,
            "SQLOLEDB",
            "hostname",
            "master",
            "username",
            "password")
$db = new-object System.Data.OleDb.OleDbConnection($cn)
$db.Open()
$query="select * from sys.tables"
$cmd = new-object System.Data.OleDb.OleDbCommand($query,$db)
$t = new-object System.Data.DataTable
$t.Load($cmd.ExecuteReader())
foreach($dr in $t.Rows){
   Write-Output $dr["name"]
}
$t.Clear()
$db.Close()

L'output ottenuto:
finestra di output: la lista delle tabelle del DB
Finestra di output: la lista delle tabelle del DB

Dopo aver visto la teoria alla base di una connessione ad un Database Relazionale tramite console PowerShell, vediamo una serie di casi d'uso più comuni dove questa funzionalità ci può essere d'aiuto.

Caso d'Uso: DEBUG

Immaginiamo di avere due macchine: un database server, su cui è installato il comodissimo Microsoft SQL Server Management Studio, e un application server su cui è installata solo la nostra applicazione ma non ci è permesso, a causa delle protezioni dei computer, installare software di terze parti come Visual Studio o un Microsoft SQL Server Management Studio anche sulla macchina di applicazione. Se desideriamo verificare una porzione di codice che impatta il database sarà sufficiente scriverla in una console PowerShell e verificare l'esecuzione.
caso d'uso: debug
caso d'uso: debug

Caso d'Uso: CSV digester

Immaginiamo di avere un sistema un po' vecchio oppure fortemente restio alla integrazione, che scrive in una directory di rete una serie di file CSV giornalieri che contengono dati storici importanti per il proprio business. L'azienda desidera spostarsi su una soluzione informatica più robusta ma non può ancora permettersi un revamping del sistema, quindi chiede di implementare uno script in grado di leggere il contenuto dei file CSV, elaborarlo ed inserirlo in un DB relazionale. Quando una applicazione effettua la lettura di un file ed esegue una elaborazione al fine di eliminare o spostare il file, questa operazione viene chiamata "digestione".
caso d'uso: csv digester
caso d'uso: csv digester


Il modo più veloce e semplice è quello di scrivere uno script in PowerShell, dedicherò un articolo specifico nella realizzazione di uno script in grado di fare questa operazione.

Conclusione

Con questo articolo si conclude il tutorial introduttivo di PowerShell, nei prossimi articoli verranno approfonditi argomenti più specifici. Ripropongo la mia personale opinione a riguardo di questa tecnologia: ad un programmatore può essere utile avere a disposizione una console di comandi programmabile in .Net, presente nei computer di ultima generazione ed integrabile con script di propria creazione.

Nessun commento:

Posta un commento