SQL SERVER Modulo 4 Relatore: Stefano Furlan. Sommario Criteri per scrivere del buon codice TSQL Con cenni a Indici e performances Breve carrellata di.

Slides:



Advertisements
Presentazioni simili
Elaborazione di Franco Grivet Chin
Advertisements

Accesso ai dati su Relational Database Management Systems LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento.
DBMS (DataBase Management System)
SQL applicato a SQL Server
Sicurezza e concorrenza nelle basi di dati
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
Installazione di Apache 2, PHP5, MySQL 5
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Connessione con MySQL.
Biglietti e Ritardi: schema E/R
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
Esercitazione 5 MySQL Laboratorio di Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
SQL: Lezione 7 Nataliya Rassadko
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Daniel Stoilov Tesi di Laurea
Il linguaggio ASP Lezione 3 La connessione al database con ASP
JDBC(TM) Database Access
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
DBMS ( Database Management System)
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
BUILDING A USER INTERFACE Using CRYSTAL REPORTS. COME UNAPPLICAZIONE COMUNICA CON LUTENTE? Problema comune a tutte le applicazioni informatiche Forse.
Modulo 4 Relatore: Stefano Furlan
sql: esempi di linguaggio sql nell'implementazione mysql
Basi di Dati e Sistemi Informativi
PARSERIZZAZIONE DI FILE
BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
BIOINFO3 - Lezione 41 ALTRO ESEMPIO ANCORA Progettare il comando di creazione di una tabella di pubblicazioni scientifiche. Come chiave usare un numero.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Pagine ASP parte 3 I data base Stefano Schacherl.
Fabrizio Felici LAMP workshop GROsseto Linux Users Group.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Microsoft Access Maschere (II).
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Microsoft Access Query (III).
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l.
MySQL Database Management System
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Esercizio ODBC Roberto Pecchioli, Nicola Salotti, Massimiliano Sergenti - Gruppo Admin.
Data Base ACCESS EM 09.
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Modulo 5 – Database ACCESS LICEO SCIENTIFICO “ B. RESCIGNO COMPUTER SCUOLA PIANO INTEGRATO 2008/09 ESPERTO prof.ssa Rita Montella.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Transcript della presentazione:

SQL SERVER Modulo 4 Relatore: Stefano Furlan

Sommario Criteri per scrivere del buon codice TSQL Con cenni a Indici e performances Breve carrellata di funzionalità SQL server A conclusione della panoramica già fatta Cenni ad amministrazione del server Utenti e permissioni, setup, backup ecc.

SCRIVERE BUON CODICE TSQL Pensiero iterativo VS Pensiero set –based SQL server non è C# Inefficientissimo per i cicli Spaventosamente efficiente per operazioni di parallelizzazione o ricerca

SCRIVERE CODICE TSQL DI QUALITÀ Mai usare cicli Anche la generazione di dati che abbiamo fatto per prova era fattibile in tempi brevissimi e per milioni di elementi senza usare i cicli Evitare se possibile un approccio iterativo Evita Roundtrip tra client e Database Cercare di scrivere query con JOIN opportuni Usare in caso tabelle temporanee

PROMEMORIA Un campo ha un certo valore (o piccola lista di valori) SELECT….WHERE o WHERE IN (….) Una tabella è contenuta in unaltra SELECT ….. INNER JOIN Una tabella NON esiste in unaltra SELECT … LEFT JOIN … WHERE tabella2.campo IS NOT NULL Contare quante righe ci sono per un certo raggruppamento SELECT … GROUP BY raggruppamento HAVING condizione Recupero di informazioni tramite foreign key(es: decodifica di parametri numerici) JOIN Anomalia se il pannello non esiste

ALTRE FUNZIONALITA FUNZIONI Richiamabili da query Solitamente non usate: problematiche di performances TABLE FUNCTIONS «viste» parametriche Anche qui problemi di performances Tipi di dato Possibilità di creare tipi di dato cutsom NON SI USANO SPESSO

TEMP TABLES Si tratta di tabelle create «on the fly» in un database di sistema: il TEMPDB Utili per passaggi complessi dellelaborazione Vengono droppate appena la connessione si chiude Prefisso # ES: create table #tabellaTemporanea ( idPannello int Nome varchar(200) )

TEMP TABLES Dentro alla procedura possono essere tranquillamente usate come se fossero tabelle vere Al termine della procedura è buona norma eliminarle DROP TABLE #tabellaTemporanea

ESERCITAZIONE Riscrivere la store di verifica della trasmissione ma creando una tabella temporanea allinizio della procedura in cui vengono messi i dati della sola trasmissione da controllare La tabella temporanea dovrà avere una colonna testuale in più in cui metteremo il motivo dello scarto Limitarsi per semplicità a controllare le anomalie QTA 500 Coppia idpannello-datamisurazione già presente Al termine, se vi sono anomalie effettuare una SELECT dei soli dati anomali DROP della tabella temporanea Notare che la procedura scritta è molto più semplice della vecchia versione

Ultimi esercizi Estrarre tutti i dati di energia prodotta per lIdPannello 1 Sommarla in un unico totale Sommarla per ogni mese in maniera da ottenere 12 righe Qta prodotta per tipo di pannello TipoPannello (descrizione testuale) QTA sommata Numero di righe di quantità rilevata Numero di pannelli distinti Quantità prodotta per ogni mese e pannello Idpannello Mese Qta sommata Ordinata per mese e idpannello

ALTRI ESERCIZI Con una query creare un nuovo pannello Scoprire lid pannello che è stato assegnato dal database alla riga appena creata Creare una riga di energia prodotta in data odierna con 200kwh per limpianto creato Verificare con la query che mostrava il totale per ogni impianto Prendere tutti i valori di energia prodotta dallimpianto 1 per aprile e maggio 2013 e Reinserirli in tabella energia prodotta ma per limpianto appena creato Sostituire la energia prodotta di tutte le righe dellimpianto appena creato con 0 (zero) e verificare che è successo con la query Eliminare tutte le righe dellimpianto creato

Altre cose da tenere a mente Il Backup Disaster recovery (problema TLOG)

Utenti, Ruoli e Permissioni MAI usare «sa»! Autenticazione SQL vs Autenticazione windows Permissioni a livello server e a livello database I ruoli più importanti Datareared Datawriter Owner(ha diritto di vita e di morte sul db) Permissioni su singolo oggetto ES: stored procedure MAI usare «sa»!

INDICI Strutture interne al server che facilitano lordinamento Una definizione precisa è oltre alla portata del corso Se una clausola where viene eseguita su campo non indicizzato Il server dovrà leggere tutte le righe per rispondere Ogni indice occupa spazio Se i dati sono pochi lassenza di indici non si fa sentire In definitiva: Aggiungere indici solo su tabelle molto molto grandi Indicizzare solo colonne non in chiave primaria E su cui si pensa di dovere eseguire delle ricerche ES: tabella tabEnergiaProdotta

Installazione sql server Useremo versione 2008 Express

UTILIZZO DI C# PER LE CHIAMATE A SQL SERVER

Architettura di un sistema di telecontrollo Pannelli fotovoltaici Sistema di controllo DB Collettore dati Sistema di reportistica Utente Dati Controllo Applicazione di configurazio ne (CRUD)

SQL e C# SQL server non fornisce uninterfaccia utente di alcun genere A differenza di access C# usato per creare questinterfaccia Lettura dei dati Gestione delle configurazioni (CRUD) Utile mettere tutte le funzioni di accesso ai dati in un unico posto Data Access Layer (DAL)

Interfaccia CRUD CR come CREATE Aggiungo una riga U come Update Modifico i dati D come DELETE Elimino Tipi di interfaccia comuni Edit su Tabella Lista con edit su form separato Master-Detail

Passi per la chiamata da C# Richiamare la libreria sqlClient Creare un oggetto connection Aprirlo Creare un oggetto COMMAND per la Connection così creata Assegnare alloggetto command i parametri necessari Chiamare il metodo di esecuzione del COMMAND Pulire tutto prima di sucire (dispose)

Apertura della connessione using System.Data.SqlClient; SqlConnection conn; conn=new SqlConnection(«stringadiconnessione»); conn.Open(); Stringadiconnessione=«Server=localhost\SQLLOCAL;Dat abase=dbTestFotovoltaico;User Id=utenteApplicazione; Password=aspirapolvere»;

Dichiarazione del Command SqlCommand command; command=new SqlCommand(«testocomando»,conn); «testocomando» è una query INSERT INTO tabPannelli (descrizione) VALUES (pannellocreatodac)

Esecuzione di una query che non ritorna dati command.ExecuteNonQuery();

Esecuzione di una query che ritorna dati SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds);

Chiamata a procedura con parametri SqlCommand cmd = new SqlCommand("spVerificaDatiTrasmissione", conn); cmd.CommandType = System.Data.CommandType.StoredProcedure; SqlParameter key = new SqlDbType.SmallInt); key.Value = 1; //id della trasmissione!!!! key.Direction = ParameterDirection.Input; cmd.Parameters.Add(key); SqlParameter msg = new SqlDbType.VarChar); msg.Size = 255; msg.Direction = ParameterDirection.Output; // This is important! cmd.Parameters.Add(msg); cmd.ExecuteNonQuery();

Se la procedura ritorna dati… SqlConnection conn = new SqlConnection("Data Source=nomeserver;Initial Catalog=dbTestFotovoltaico ;User=utenteApplicazione;Password=aspirapolvere"); conn.Open(); //apro la connessione SqlCommand cmd = new SqlCommand("spVerificaTrasmissione2", conn);//creo loggetto command cmd.CommandType = CommandType.StoredProcedure;//tipo del comando: per la stored proc è obbligatorio! //creo il parametro SqlParameter idTrasmissione = new SqlDbType.Int); //qui specifico il tipo dato idTrasmissione.Direction = ParameterDirection.Input;//direzione(INPUT o OUTPUT) idTrasmissione.Value = 1; //il valore che sto passando alla store(qui abbiamo cablato 1 ma poteva essere una variabile) cmd.Parameters.Add(idTrasmissione); //aggiungo il parametro alloggetto command //eseguo il comando cmd.ExecuteNonQuery();//esecuzione della store SqlDataAdapter da = new SqlDataAdapter();//recupero dei dati tornati dalla store da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); conn.Close(); //chiudo la connessione