Title: .Net et l
1.Net et laccès aux donnéesADO.Net
- Michel RIVEILL
- riveill_at_unice.fr - http//www.essi.fr/riveill
- Laboratoire I3S
- Ecole dIngénieur en Sciences Informatiques (ESSI)
2Objectifs et plan
- Objectifs
- Rappel sur les bases de données relationnelles
- Présentation des classes de ADO.NET
- Utilisation de ADO.NET dans une application
- Plan
- Base de données
- Base de données relationnelles
- Survol dADO.NET
- Présentation des classes dADO.NET
3Base de données
- Toutes applications nécessitent des outils pour
conserver et retrouver des données structurées - E-Commerce sauvegarder un ordre, remplir un
ordre - Assistant personnel données personnelles
(contact, agenda, ) -
- Les services attendus varient en fonction des
applications - Transaction/OLTP
- Entrepôt de données/OLAP
4Base de données Besoins
- Conservation, lecture et modification des données
- Copier, transformer des données
- Sauvegarder et restaurer des données
- Exprimer, vérifier des règles dintégrité
- Facteur déchelle et disponibilité
- Evolution du nombre dutilisateurs
- Volume important des données
- Débit important et temps de réponse court
- Être sûr
- Facilité le développement des applications
5Base de donnéesEvolution des technologies
- Fichier
- Bases de données hiérarchiques
- Accès à distance
- Bases de données relationelles (RDBMS)
- Bases de données orientés objets
- XML
6Plan
- Base de données
- Base de données relationnelles
- Survol dADO.NET
- Présentation des classes dADO.NET
7Base de données relationnellesTables
- Table (relation, entity)
- Une collection de données avec un type
spécifique - Organisée en lignes et colonnes
- Colonne (attribut, champ)
- Décrit une partie dun entité (e.g. FirstName)
- Donnée typée (e.g. integer, character, binary)
- Peut être nulle
- ligne (tuple, enregistrement)
- Instance dune donnée dans une table
- Chaque ligne est unique
AuthID FirstName LastName
1 Joe Smith
2 Diane Jones
8Base de données relationnelles Relations
- Les tables peuvent être liées par des clés
primaires ou externes (e.g., a book has an
author) - Clés primaires
- Guarantissent lunicité dune ligne
- Peut être composée dune ou plusieurs colonnes
- Permet de garantir lintégrité des entités
- Clés externes
- Permettent détablir des relations logiques entre
des tables - Une ou plusieurs colonnes dune table correspond
à une clé primaire (ou externe) dune autre table - Permettent de garantir lintégrité de la base
9Base de données relationnelles Relations
- Schema diagram depicts tables, columns, primary
keys, foreign keys
Books
BookID
AuthID
Title
Type
Authors
AuthID
FirstName
LastName
1
8
Schema Diagram
10Base de données relationnelles Relations
Books Table
Primary Key
BookID AuthID Title Type
1 2 My Life as a DBA Autobiography
2 1 Database Handbook Reference
PK/FK Relationship
Foreign Key
AuthID FirstName LastName
1 Joe Smith
2 Diane Jones
Authors Table
11Base de données relationnelles Type de relations
1
1
- One-to-One (11)
- Uneligne dans la table X correspond à une ligne
dans la table Y - Un livre a au plus une entrée dans la
bibliothèque - One-to-Many (1M)
- Une ligne dans la table X correspond à 0 lignes
dans la table Y - Un éditeur publie un ou plusieurs livres
- Many-to-Many (MN)
- 1 lignes dans la table X correspond à 1 lignes
dans la table Y - Un auteur écrit un ou plusieurs livres un livre
est écrit par un ou plusieurs auteurs
Books
LoC Entries
1
M
Publishers
Books
M
N
Authors
Books
12Base de données relationnelles Relations MN
- Les plus complexes
- Peuvent nécessité la construction de très grandes
bases (contenant des données répliquées) - Difficile dassurer lintégrité de la base
- Le remède créer une troisième table
- La troisième table contient les clés primaires
des deux tables dorigine (construction dune clé
composite) - Les données sont répétés dans cette troisième
table, mais pas dans les deux tables originales
Authors
Books
M
M
1
1
BookAuth
13Base de données relationnelles Relations MN
1
8
Data is duplicated here
1
1
8
8
14Base de données relationnelles Normalisation/Déno
rmalisation
- Normalisation
- Processus qui permet de casser une grande table
en plusieurs petites - But minimiser les données redondantes,
augmenter la correction - Améliore les performances lors des mises à jours
- Souhaitable pour des applications
transactionnelles - Dénormalisation
- Processus qui combine de petite table pour en
construire une grande - But améliorer les performances
- Introduit des données redondantes
- Améliore les performances lors des lectures
- Souhaitable pour les entrepôts de données
15Base de données relationnelles Jointures
- Une jointure est la combinaison de données
stockées dans plusieurs tables - Repose généralement sur les relations clés
publiques/clés externes
Vendor table
Cost
Vendor
Product
Vendor
Contact
State
10
Acme
Widget
Acme
Linda A.
MA
Product table
5
Acme
Thingy
Blecco
Adam P.
WA
8
Blecco
Widget
25
Blecco
Foobar
Vendor
State
Contact
Cost
Product
Linda A.
MA
Acme
10
Widget
Linda A.
MA
Acme
5
Thingy
Blecco
WA
Adam P.
8
Widget
jointure
Blecco
WA
Adam P.
25
Foobar
16Base de données relationnelles Structured Query
Language (SQL)
- Langage standardisé pour acceder à une base de
données relationnelles (ANSI) SQL-92 - Open, mais pas réellement
- Les fonctions usuelles sont les mêmes dans les
différents produits - La plupart des vendeurs ont des extensions
propriétaires - Sous-ensemble de SQL
- Data Definition Language (DDL)
- Data Manipulation Language (DML)
- Data Control Language (DCL)
17Base de données relationnellesDDL
- Utilisé pour créer et modifier les objets dune
base de données
CREATE DATABASE Bookstore
CREATE TABLE tBooks ( BookID INT
IDENTITY(1,1) PRIMARY KEY, Title
VARCHAR(30) NOT NULL, PubDate DATE NOT
NULL, Description VARCHAR(50), Category
INT NOT NULL )
18Base de données relationnellesDML
SELECT FROM tAuthors
SELECT AuthID, FirstName, LastName FROM
tAuthors
SELECT AuthID, FirstName, LastName, Phone
FROM tAuthors WHERE City Boston
SELECT FirstName, LastName, Phone FROM
tAuthors WHERE AuthID 249
19Base de données relationnelles DML
- Construction dune jointure
SELECT AuthID, FirstName, LastName, Phone,
BookID, Title, PubDate, Description FROM
tAuthors, tBooks WHERE tAuthors.AuthID
tBooks.AuthID
SELECT AuthID, FirstName, LastName, Phone,
BookID, Title, PubDate, Description FROM
tAuthors INNER JOIN tBooks ON
tAuthors.AuthID tBooks.AuthID
20Base de données relationnelles DML
- Insérer, modifier et supprimer des données
INSERT INTO tBooks (Title, PubDate,
Description, Category) VALUES (Database
Design, GETDATE(), How to design a
database, 3)
UPDATE tAuthors SET Phone 617-555-1234
WHERE AuthID 5
DELETE FROM tAuthors WHERE AuthID 5
21Base de données relationnellesDCL
- Protéger les accès à la base
GRANT INSERT, UPDATE, DELETE ON tAuthors TO
Mary, John
REVOKE CREATE TABLE FROM Joe
DENY ALL ON tAuthors, tBooks TO Sally
22Base de données relationnelles Vues
- Une vue est une table virtuelle
- Abstraire la structure dune table
- Abstraire des requêtes (généralement complexes)
- Abstraire les règles de protection dune table
- dans SQL Server 2000, une vue peut être
- Indexée
- Modifier et insérée dans la base
CREATE VIEW vwCustomerOrders AS SELECT
o.OrderId, c.CompanyName FROM Customers c
INNER JOIN Orders o ON c.CustomerID
O.CustomerID ORDER BY o.OrderId
23Base de données relationnellesUtilisation des
vues
SELECT FROM vwCustomerOrders WHERE
CompanyName 'My Favorite Customer'
OrderId CompanyName
101 My Favorite Customer
137 My Favorite Customer
24Base de données relationnelles Procédures
stockées
CREATE PROCEDURE CustOrderHist _at_CustomerID
nchar(5) AS SELECT ProductName, TotalSUM(Quant
ity) FROM Products P, Order Details OD,
Orders O, Customers C WHERE C.CustomerID
_at_CustomerID AND C.CustomerID O.CustomerID
AND O.OrderID OD.OrderID AND OD.ProductID
P.ProductID GROUP BY ProductName
- Un ensemble dinstructions SQL qui sexécute à
coté de la base de données - Ne fait pas parti du standard SQL
- Offre une meilleure performance
- Permet de contrôler laccès aux données
- Peut accepter des paramètres
- Peut retourner des données
- Paramètres de sorties
- Valeur de retour
- Ensemble de retour
exec CustOrderHist 'alfki'
ProductName Total
Aniseed Syrup 6
Chartreuse verte 21
... ...
25Base de données relationnelles Procédures
stockées
- Utiliser linstruction RETURN pour létat
- Valeur par défaut de SQL Server 0
- Uniquement des valeurs numériques
-
- Utiliser les paramètres OUTPUT pour les résultats
RETURN 1
CREATE PROCEDURE MyProcedure _at_ReturnValue INT
OUTPUT ... SELECT _at_ReturnValue ColumnName
FROM Table
26Base de données relationnelles Triggers
- Comme les procédures stockées, les triggers
sont du code qui sexécute hors de la base de
données - Ne peuvent pas être appelées directement par les
utilisateurs - Exécutée à des moments spécifiques de la vie
dune donnée particulière (INSERT, UPDATE or
DELETE) - Permet de vérifier des règles dintégrités
- FOR AFTER trigger exécuté après les actions
triguées - FOR INSTEAD OF trigger exécuté à la place des
actions triguées
27Base de données relationnelles Transactions
- Transaction une séquence SQL qui constitue une
unité logique - Respect des propriétés ACID
- Atomicité toute la séquence est exécutée avec
succès, ou en cas derreur on revient à létat
initial - Consistance laisse les données dans un état
consistant (respect des règles dintégrités) - Isolation ne peut pas voir les modifications
effectuées par des transactions concurrentes - Durabilité même en cas de panne, les effets de
la transaction ne peuvent pas être effacés un
fois quelle a validé
28Base de données relationnelles Concurrence
- Niveau disolation
- Lecture avant commit
- Lecture après commit
- Lecture multiple
- Sérialisation
- Choix concurrence vs. intégrité des données
- Verrouillage
- Permet de garantir lintégrité des transactions /
la consistance de la base de données - Permet de se prémunir des données fantôme (i.e.
on lit une valeur qui na jamais existé) - Peut créer des inter blocages
29Plan
- Base de données
- Base de données relationnelles
- Survol dADO.NET
- Présentation des classes dADO.NET
30Survol dADO.NETRappel
- ODBC (Open Database Connectivity)
- Interopérabilité avec de nombreuses bases de
données (DBMS) - API largement acceptée
- utilise SQL comme langage daccès aux données
- DAO (Data Access Objects)
- Interface de programmation pour les bases de
données JET/ISAM - Utilise automation (ActiveX, OLE automation)
- RDO (Remote Data Objects)
- Fortement couplé avec ODBC
- Adapté au modèle client-serveur (vs. DAO)
- OLE DB
- Accès aux données relationnelles ou non
- Construit pour COM
- Pas restreint au langage SQL
- Peut utiliser des drivers ODBC
- Interface de bas niveau (C)
- ADO (ActiveX Data Objects)
- Interface orientée objet, Ensemble de composants
daccès - Défini un modèle de programmation pour OLE DB
accessible pour tous les langages
31Survol dADO.NETChaîne daccès ADO
Votre application
ADO
OLE DB
ODBC Provider
Simple Provider
Native Provider
OLE DB Provider
ODBC
OLE DB Provider
ODBC Driver
TextFile
Mainframe
Database
Database
32Survol dADO.NETADO
- ADO a été défini comme un modèle fortement couplé
(mode connecté) - Approprié pour les architectures client/serveur
- Défini pour le modèle relationnel
- Par pour le modèle hiérarchique (XML)
- La conception objet dADO laisse à désirer
- Plusieurs manière de faire la même chose
- Une même objet a plusieurs utilisations
- Pas défini pour les applications réparties
(n-tier architecture)
33Survol dADO.NETADO.NET
- ADO .NET est une collection de classes,
interfaces, structures et de types énumérés pour
accéder à des données relationnelles dans le
framework .NET - La collection est organisées dans différentes
bibliothèques - System.Data, System.Data.OleDb,
System.Data.SqlClient, etc. - ADO .NET est une évolution dADO.
- Ne partage pas le même modèle objet
- Mais partage plusieurs paradigmes ou
fonctionnalités
34Survol dADO.NETObjectifs dADO.NET
- Excellente conception
- Gestion robuste du modèle déconnecté
- Supporter aussi bien le modèle hiérarchique que
le modèle relationnel - support des données XML
- Permettre laccès aux données à laide dHTTP
- Maintenir la familiarité avec le modèle de
programmation dADO - Rendre ADO disponible via .NET
- Interoperabilité avec COM
35Survol dADO.NETProviders supportés
- Fusionner ADO et OLEDB en un seul niveau
- Chaque provider contient un ensemble de classe
qui implémentent une interface commune - Implémentations initiales
- ADO Managed Provider permet laccès ay base de
données de type OLE - SQL Server Managed Provider fournit des
performance optimale pour lutilisation dun
serveur SQL - Exchange Managed Provider permet la recherche
et la modification de donnée dans Microsoft
Exchange
36Survol dADO.NETProviders supportés
Votre application
ADO.NET Managed Provider
SQL Managed Provider
ADO Managed Provider
OLE DB Provider
SQL ServerDatabase
Database
37Survol dADO.NETAccès aux données
- Connecté Forward-only, read-only
- Les applications requêtent les données, les
rapatrient et les utilisent - Firehose cursor
- DataReader
- Déconnecté
- Les applications requêtent les données, les
sauvegardent pour pouvoir les traiter - Minimise le temps de connexion avec la base
- DataSet
38Survol dADO.NETLiaison aux données (data
binding)
- Composant clé du framework Web Forms
- Flexible et facile à utiliser
- Permet de lier nimporte quel type de données
stocké dans une base - Permet de contrôler les transferts de données
entre la base et lapplication - Contrôle simple pour laccès à une valeur simple
- Contrôle complexe pour laccès à une donnée
structurée
ltaspLabel runatserver Text'lt
CustList(0).FirstName gt'/gt
39Plan
- Base de données
- Base de données relationnelles
- Survol dADO.NET
- Présentation des classes dADO.NET
40ADO.NETInterface IDbConnection
- Créer une session unique avec un source de
données - Implémenté par SqlDbConnection and
OleDbConnection - Fonctionnalités
- Ouvrir, fermer les connections
- Démarrer les transactions
- IDbTransaction fournit les méthodes Commit et
Rollback - Utilisé avec les objets IDbCommand et
IDataAdapter - Dautres propriétés, méthodes et collections
peuvent être offerts selon le provider
41ADO.NETInterface IDbCommand
- Représente une instruction qui peut être envoyée
à une source de données - Peut être du SQL mais pas nécessairement
- Implémenter par OleDbCommand et SqlCommand
- Fonctionnalités
- Défini une instruction à exécuter
- Exécute linstruction
- Passe et récupère les paramètres
- Crée et prépare une version compilée de la
commande - ExecuteReader retourne une ligne, ExecuteNonQuery
ne retourne rien, ExecuteScalar retourne une
valeur simple - Dautres propriétés, méthodes et collections
peuvent être offerts selon le provider
42ADO.NETInterface IDataReader
- Accès en mode forward-only, read-only à un flux
(stream) de données - Implémenté par SqlDataReader et OleDbDataReader
- Créé par la méthode ExecuteReader de IDbCommand
- Les opérations sur les objets associés à la
connexion (IDbConnection) ne sont pas autorisé
jusquà la fermeture de la lecture
43ADO.NETNamespace System.Data.OleDb
- À utiliser avec des providers OLEDB (namespace
managed) - SQLOLEDB (SQL Server) utilise System.Data.SQL
- MSDAORA (Oracle)
- JOLT (Jet)
- OLEDB for ODBC providers
- Classes OleDbConnection, OleDbCommand et
OleDbDataReader - Classes pour la gestion des erreurs
- Classes pour la gestion des connexions
44ADO.NET Un exemple DataReader
string sConnString ProviderSQLOLEDB.1
User IDsaInitial CatalogNorthwind
Data SourceMYSERVER OleDbConnection conn
new OleDbConnection(sConnString) conn.Open() s
tring sQueryString SELECT CompanyName FROM
Customers OleDbCommand myCommand new
OleDbCommand(sQueryString, conn) OleDbDataReader
myReader myCommand.ExecuteReader() while
(myReader.Read()) Console.WriteLine(myReader.
GetString(0)) myReader.Close() conn.Close()
45ADO.NET Démonstration DataReader, Insert
46ADO.NETNamespace System.Data
- Contient les classes au coeur de larchitecture
ADO.NET - La classe DataSet, qui gère le mode déconnecté
est centrale - Supporte tous les types dapplications
- Internet
- ASP.NET
- XML
- Windows
- Contient les classes définies ou surchargées par
les différents providers - IDbConnection, IDbCommand, IDbDataReader
47ADO.NET DataSet
- Une collection de tables
- Na pas la connaissance de la source de données
- Capture toutes les relations entre les tables
- Modèle de programmation complet (objets pour les
tables, les colonnes, les relations, etc.) - Mémorise létat original et létat courant des
données - Peu modifier dynamiquement les données et les
méta-données - Permet de sérialiser les schémas en XML
- Défini dans le namespace System.Data
48ADO.NET DataSet
DataSet
DataTable
DataColumn
DataRow
DataRelation
49ADO.NET Namespace System.Data.SqlClient
- Défini de manière native par le serveur SQL
(managed code) - Construit à laide de TDS (Tabular Data Stream)
pour de bonne performance dans le serveur SQL - Défini les classes SqlConnection, SqlCommand and
SqlDataReader - Défini aussi des classes pour
- Gestion des erreurs
- La gestion des connections par pool
(fonctionnement par défaut) - System.Data.SqlTypes fournit les classes pour la
gestion des types du serveur SQL
50ADO.NET Interface IDataAdapter
- Publie ou envoie les modification à un DataSet
- Implémenté par OleDbDataAdapter et SqlDataAdapter
- Fonctionnement sans connexion
- Permet un fonctionnement en mode asynchrone
- Contient quatre objets commandes par défaut
- Select, Insert, Update, et Delete
51ADO.NET Classes DataSet Example
string sConnString Persist Security
InfoFalse User IDsaInitial
CatalogNorthwind Data
SourceMYSERVER SqlConnection conn new
SqlConnection(sConnString) conn.Open() string
sQueryString SELECT CompanyName FROM
Customers SqlDataAdapter myDSAdapter new
SqlDataAdapter() DataSet myDataSet new
DataSet() myDSAdapter.SelectCommand new
SqlCommand(sQueryString, conn) myDSAdapter.Fill(m
yDataSet) conn.Close()
52ADO.NET Classes Démonstration DataSet
53ADO.NET Classes Démonstration procédure stockée
54ADO.NET Classes DataTable
- Objet mémoire représentant une table
- Colonnes
- lignes
- Le schéma est définit dans la collection Columns
- Lintégrité des données est assurée par les
objets Constraint - Évènements publiques
- Modification / suppression de lignes
- Modification des colonnes
55ADO.NET Classes DataColumn
- Élément fondamental de lobjet DataTable (contenu
dans la collection Columns) - Définis quel type de données peuvent être
stockées dans la table (via la propriété
DataType) - Dautres importantes propriétés peuvent être
inclues AllowNull, Unique, et ReadOnly - Peut aussi contenir Constraints (collection de
DataTable) - Peut aussi contenir Relations (collection de
DataSet)
56ADO.NET Classes DataRow
- Représente une donnée dans DataTable (contenu
dans la collection Rows) - Conforme au schéma défini par DataColumns
- Propriétés pour déterminer létat de la ligne
(e.g., new, changed, deleted, etc.) - Tous ajouts/modifications doivent validées
(committed) par la méthode AcceptChanges de
DataTable
57ADO.NET Classes DataRelation
- Met en relation deux DataTables via DataColumns
- Les valeurs des DataType des deux DataColumns
doivent être identiques - Les modifications peuvent être propagées au fils
de DataTables - Les modifications qui invalident les relations
sont interdites
58ADO.NET Classes Créer un DataSet
- Créer un DataSet
- Définir les tables
DataSet dataset new DataSet() dataset.DataSetNa
me BookAuthors DataTable authors new
DataTable(Author) DataTable books new
DataTable(Book)
59ADO.NET Classes Créer un DataSet
- Definir les colonnes
- Definir la ou les clés
DataColumn id authors.Columns.Add("ID",
typeof(Int32)) id.AutoIncrement
true authors.PrimaryKey new DataColumn
id DataColumn name new
authors.Columns.Add("Name",typeof(String)) DataC
olumn isbn books.Columns.Add("ISBN",
typeof(String)) books.PrimaryKey new
DataColumn isbn DataColumn title
books.Columns.Add("Title", typeof(String)) DataCo
lumn authid books.Columns.Add(AuthID,typeof(In
t32)) DataColumn foreignkey new DataColumn
authid
60ADO.NET Classes Créer un DataSet
- Ajouter les tables au DataSet
dataset.Tables.Add (authors) dataset.Tables.Add
(books)
61ADO.NET Classes Créer un DataSet
- Ajouter les données et sauvegarder le DataSet
DataRow shkspr authors.NewRow() shkspr"Name"
"William Shakespeare" authors.Rows.Add(shkspr)
DataRelation bookauth new DataRelation("BookAu
thors", authors.PrimaryKey,
foreignkey) dataset.Relations.Add
(bookauth) DataRow row books.NewRow() row"Au
thID" shkspr"ID" row"ISBN"
"1000-XYZ" row"Title" "MacBeth" books.Rows.A
dd(row) dataset.AcceptChanges()
62ADO.NET Classes Démonstration créer un DataSet
63ADO.NET ClassesDataSet typé
- DataSet typé
- Dérivé de la classe de base DataSet
- Utilise les schémas XML pour générer une nouvelle
classe - Tables, colonnes, etc. sont compilées dans une
nouvelle classe
ds.Customers.FirstName
- DataSet non typé
- Pas de schéma prédéfini
- Tables, colonnes, etc. sont exposées uniquement
comme des collections
ds.TablesCustomers.Rows0FirstName
64ADO.NET Erreurs et exceptions
- Classe Error
- Contient les informations liées à une erreur ou à
un warning retourné par une source de données - Créé et géré par la classe Errors
- Classe Errors
- Contient toutes les erreurs générées par un
adaptateur - Créé par la classe Exception
- Classe Exception
- Créé chaque fois quune erreur non traitée
survient - Contient au moins une instance de la classe Error
try DataTable myTable new DataTable()
myTable.Columns.Add(myCol)
myTable.Columns.Add(myCol)
//whoops! Catch (DataException myException)
Console.WriteLine ( "Message
myException.Message "\n "Source
myException.Source "\n Stack Trace
myException.StackTrace "\n")
65ADO.NET Classes Démonstration DataException
66Pour aller plus loin
- Introducing ADO
- http//msdn.microsoft.com/msdnmag/issues/1100/adop
lus/adoplus.asp - ADO.NET
- http//msdn.microsoft.com/library/default.asp?URL
/library/dotnet/cpguide/cpconaccessingdata.htm - ADO Guides the Evolution of the Data Species
- http//msdn.microsoft.com/library/techart/adoplus.
htm - ADO.NET for the ADO Programmer
- http//msdn.microsoft.com/library/techart/adonetde
v.htm - ADO Rocks and Rolls in .NET Applications
- http//msdn.microsoft.com/library/welcome/dsmsdn/d
ata02222001.htm - Meditating on OLE DB and .NET
- http//msdn.microsoft.com/library/welcome/dsmsdn/d
ata03222001.htm
67Pour aller plus loin
- Reading Data Reader Secrets
- http//msdn.microsoft.com/library/welcome/dsmsdn/d
ata04122001.htm - Database-like Data Containers
- http//msdn.microsoft.com/library/default.asp?URL
/library/welcome/dsmsdn/data04122001.htm - ADO
- http//msdn.microsoft.com/library/default.asp?URL
/library/psdk/dasdk/ados4piv.htm - Universal Data Access
- http//www.microsoft.com/data/
- SQL Server
- http//www.microsoft.com/sql/default.asp