Sommario
Ringraziamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XV
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII
Parte I
Conoscere ADO.NET
Introduzione ad ADO.NET 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1
Cos’è ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Perché ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Componenti principali di ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Estensioni di ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Connessione a dati esterni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2
Creare tabelle di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Implementare le tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Implementazioni logiche e fisiche delle tabelle . . . . . . . . . . . . . . . . . . . 17
La classe DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Aggiungere colonne di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Progettazione DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3
Inserire i dati in memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Aggiungere dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Creare nuove righe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Definire i valori delle righe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Memorizzare righe in una tabella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Esaminare e modificare i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Rimuovere dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
00 Ado.indd 7
VII
30/03/11 11:16
VIII
Sommario
Elaborazione in batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Stato della riga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Versioni della riga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Convalidare le modifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Errori basati su eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Errori basati sulla convalida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4
Accedere ai dati in modo mirato . . . . . . . . . . . . . . . . . . . . . . . . . 59
Interrogare e ordinare i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Trovare righe utilizzando la chiave primaria . . . . . . . . . . . . . . . . . . . . . . 60
Selezionare righe con un criterio di ricerca . . . . . . . . . . . . . . . . . . . . . . . 62
Ordinare i risultati delle ricerche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Eseguire ricerche sensibili alle maiuscole . . . . . . . . . . . . . . . . . . . . . . . . . 67
Utilizzare le colonne espressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5
Mettere insieme i dati correlati . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Riunire le tabelle in set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Impostare relazioni fra le tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Comprendere le relazioni fra tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Creare relazioni fra i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Individuare record padre e figlio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Definire vincoli sulle tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6
Trasformare i dati in informazioni . . . . . . . . . . . . . . . . . . . . . . . 89
Aggregare i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Generare una singola aggregazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Aggiungere una colonna aggregata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Aggregare dati fra tabelle correlate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Fare riferimento ai campi padre nelle espressioni . . . . . . . . . . . . . . . . . 98
00 Ado.indd 8
30/03/11 11:16
Sommario
IX
Impostare viste indicizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Creare un DataView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Utilizzare un DataView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7
Salvare e ripristinare i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Serializzare gli oggetti DataSet e DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Scrivere l’XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Leggere l’XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Guidare la generazione dell’XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Identificare gli spazi dei nomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Nidificare le tabelle figlio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Gestire e posizionare le colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Parte II
Connessione a origini dati esterne
Stabilire connessioni esterne . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8
Utilizzare le stringhe di connessione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Stringhe di connessione SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Stringhe di connessione OLE DB e ODBC . . . . . . . . . . . . . . . . . . . . . . . . 124
Costruttori di stringhe di connessione . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Memorizzare le stringhe di connessione . . . . . . . . . . . . . . . . . . . . . . . . 126
Comprendere i data provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Connettersi a SQL Server tramite un data provider . . . . . . . . . . . . . . . . . . . . 127
Creare e aprire connessioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Pooling delle connessioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
9
Eseguire query sui database . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Elaborare query SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Creare oggetti command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Elaborare le query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Elaborazione asincrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
00 Ado.indd 9
30/03/11 11:16
X
Sommario
Restituire risultati di query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Restituire un singolo valore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Restituire righe di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Accedere ai valori dei campi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Elaborare risultati più complessi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10
Aggiungere parametri alle query . . . . . . . . . . . . . . . . . . . . . . 153
Sviluppare query parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
A cosa servono i parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Implementare query standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Utilizzare parametri con altri provider . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Utilizzare parametri nelle stored procedure . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
11
Rendere i dati esterni disponibili localmente . . . . . . . . . . . . 169
Comprendere i data adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Spostare i dati dall’origine alla memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Spostare i dati in un DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Spostare i dati in un DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Spostare i dati dalla memoria all’origine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Configurare i comandi di aggiornamento . . . . . . . . . . . . . . . . . . . . . . . 175
Eseguire l’aggiornamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Generare comandi di aggiornamento automaticamente . . . . . . . . . . 180
Mapping di tabelle e colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
12
Garantire l’integrità dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Transazioni e concorrenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Utilizzare le transazioni locali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Utilizzare i punti di salvataggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Utilizzare le transazioni distribuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
00 Ado.indd 10
30/03/11 11:16
Sommario
Parte III Entity
13
XI
Framework
Introduzione a Entity Framework . . . . . . . . . . . . . . . . . . . . . . 213
Comprendere Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Terminologia relativa a Entity Framework . . . . . . . . . . . . . . . . . . . . . . . 215
I livelli di Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Il modello concettuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Il modello di archiviazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Il mapping del modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Utilizzare Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Costruire il modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Generare gli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Istanziare il contesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Eseguire query nel Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14
Visualizzare i modelli di dati . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Progettare un modello Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Utilizzare la Procedura guidata Entity Data Model . . . . . . . . . . . . . . . . 225
Entity Data Model Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Lavorare con il pannello Dettagli Mapping . . . . . . . . . . . . . . . . . . . . . . 235
Utilizzare il Browser modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Gestire il livello oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
15
Interrogare i dati nel Framework . . . . . . . . . . . . . . . . . . . . . . 245
Conoscere Entity SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Scrivere query semplici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Utilizzare letterali, operatori ed espressioni . . . . . . . . . . . . . . . . . . . . . . 249
Raggruppare e aggregare i dati di entità . . . . . . . . . . . . . . . . . . . . . . . . 252
Utilizzare le funzionalità esclusive di Entity SQL . . . . . . . . . . . . . . . . . . 254
Eseguire query Entity SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Eseguire query utilizzando un ObjectQuery . . . . . . . . . . . . . . . . . . . . . 256
Eseguire query utilizzando un provider . . . . . . . . . . . . . . . . . . . . . . . . . 260
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
00 Ado.indd 11
30/03/11 11:16
XII
Sommario
16
Comprendere le entità attraverso gli oggetti . . . . . . . . . . . . 267
Gestire i dati di entità attraverso gli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Accedere ai dati di entità attraverso gli oggetti . . . . . . . . . . . . . . . . . . 268
Modificare i dati di entità attraverso gli oggetti . . . . . . . . . . . . . . . . . . 271
Utilizzare i metodi query builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Metodi di estensione queryable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Parte IV LINQ
17
Introduzione a LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Conoscere LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Utilizzare LINQ con oggetti .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Avviare una query con la clausola From . . . . . . . . . . . . . . . . . . . . . . . . . 293
Proiezione dei risultati con la clausola Select . . . . . . . . . . . . . . . . . . . . . 293
Filtrare i risultati con la clausola Where . . . . . . . . . . . . . . . . . . . . . . . . . 295
Ordinare i risultati con la clausola Order By . . . . . . . . . . . . . . . . . . . . . . 296
Selezionare risultati collegati con la parola chiave Join . . . . . . . . . . . . 297
Limitare il contenuto interrogato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Riepilogare i dati tramite aggregazioni . . . . . . . . . . . . . . . . . . . . . . . . . 301
Eseguire operazioni su insiemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
18
Utilizzare LINQ to DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Comprendere il provider LINQ to DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Scrivere query con LINQ to DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
19
Utilizzare LINQ to Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Comprendere il provider LINQ to Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Scrivere query con LINQ to Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Lavorare con le funzioni di entità e di database . . . . . . . . . . . . . . . . . . 321
Lavorare con le funzioni di database personalizzate . . . . . . . . . . . . . . 324
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
00 Ado.indd 12
30/03/11 11:16
Sommario
20
XIII
Utilizzare LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Comprendere il provider LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Confronto fra LINQ to SQL e LINQ to Entities . . . . . . . . . . . . . . . . . . . . 332
Comprendere i componenti di LINQ to SQL . . . . . . . . . . . . . . . . . . . . . 333
Utilizzare Progettazione relazionale oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Utilizzare funzioni di database personalizzate nelle query . . . . . . . . . . . . . . 339
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Parte V
Presentazione dei dati
21
Associare i dati con ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . 347
Associazione dati in Windows Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Creare applicazioni con associazione dati complessa . . . . . . . . . . . . . 348
Creare applicazioni con associazione dati semplice . . . . . . . . . . . . . . . 351
Comprendere l’associazione dati di Windows Forms . . . . . . . . . . . . . . 352
Associazione dati in WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Creare applicazioni WPF associate ai dati . . . . . . . . . . . . . . . . . . . . . . . 354
Comprendere l’associazione dati in WPF . . . . . . . . . . . . . . . . . . . . . . . . 360
Associazione dati in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Creare applicazioni ASP.NET associate ai dati . . . . . . . . . . . . . . . . . . . . 362
Comprendere l’associazione dati in ASP.NET . . . . . . . . . . . . . . . . . . . . . 364
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
22
Fornire servizi basati su REST
con WCF Data Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Conoscere i livelli servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Introduzione a WCF Data Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Introduzione a REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Configurare un servizio dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Definire i diritti per i servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Accedere a un servizio dati utilizzando REST . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Interrogare le entità con REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Aggiornare le entità con REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Procedure in breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
00 Ado.indd 13
Indice analitico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
L’autore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
30/03/11 11:16