La plate-forme .NET • C’est un framework de développement et d’exécution. • .Net est basé sur le Common Language Runtime(CLR) qui est un environnement d'exécution qui contrôle le code .NET • La CLR peut exécuter des programmes qui ont été développés dans différents langages mais compilés pour avoir comme cible .NET
Jérôme BIABIANY - ADO .Net 2
Langages de .net • C# • VB .Net • C++(Managed) • J# • JScript • Et potentiellement d’autres langages tel que : COBOL, Perl, et Eiffel
Jérôme BIABIANY - ADO .Net 3
Historique des accès aux données • ODBC (OpenDatabaseConnectivity) • RDO : Nouveau modèle objet simple pour accéder au sources de données ODBC de manière performante. • DAO • OLE.DB • ADO (ActiveX Data Object)
Jérôme BIABIANY - ADO .Net 4
ADO .NET • Ensemble de librairies permettant la connexion et la manipulation de sources de données diverses (base de données, xml, fichiers plats etc..).
Jérôme BIABIANY - ADO .Net 5
Le modèle objet ADO.NET
Jérôme BIABIANY - ADO .Net 6
Data Provider • Fournit l’ensemble des classes nécessaires pour se connecter à une source de données d’un ou plusieurs types précis. • Est conforme à l’architecture ADO .NET • Peut être issu d’un éditeur tiers • Inconvénient : ADO .net possède donc un modèle provider centric. • Le SDK .Net 1.1 est livré en standard avec 4 providers : • System.Data.Odbc, System.Data.OleDb, System.Data.OracleClient, System.Data.SqlClient
Jérôme BIABIANY - ADO .Net 7
Exemple de stratégie pour se connecter à une base de données Oracle
Jérôme BIABIANY - ADO .Net 8
L’objet Connection • Permet de se connecter à une source de données . • En natif : OleDbConnection, SqlConnection, OracleConnection, OdbcConnection • Ex: String conString = «data source=;user=scott;password=tiger»; OracleConnection con = new OracleConnection(conString); con.Open(); // Opérations diverses sur la base de données con.Close();
Jérôme BIABIANY - ADO .Net 9
Mode de connexion • ADO .NET fournit 2 modes de connexions pour communiquer avec une base de données : • Le mode connecté • Le mode déconnecté
Jérôme BIABIANY - ADO .Net 10
Mode connecté • L’objet Command représente la requête sql que l’on souhaite effectuer dans la base. • L’objet DataReader lit les résultats éventuelles issues d’une commande de type sélection. • 3 méthodes fondamentales de Command : ExecuteReader, ExecuteScaler, ExecuteNonQuery
Jérôme BIABIANY - ADO .Net 11
Requête en mode connecté string requete1 = «insert into .. Where cond1…»; string requete2 = «select … from .. Where cond2…»; OracleCommand cmd = new OracleCommand(requete1); cmd.ExecuteNonUpdate(); // 2 ème requete cmd.CommandText = requete2; OracleDataReader reader = cmd.ExecuteReader(); while(reader.read()){ string nom = reader.GetString(0); int age = reader.GetInt(1) }
Jérôme BIABIANY - ADO .Net 12
Mode déconnecté • Avec ADO .NET il est possible de travailler en mode déconnecté c’est à dire avoir une représentation d’une ou plusieurs tables en mémoire, y compris clefs, et relations. • Possibilité de filtrer, modifier, sélectionner ces éléments
Jérôme BIABIANY - ADO .Net 13
L’objet DataSet • Namespace : System.Data.DataSet • Pièce maîtresse de l’architecture déconnectée. • Représentation en mémoire d’un ensemble complet de données y compris les relations. • Utilise en interne le format XML. • Permet d’accéder, modifier, supprimer des données. • S’intègre directement dans des ihm grâce à des objets fournit par le framework .NET. Jérôme BIABIANY - ADO .Net 14 L’objet DataSet(suite) • Permet une conversion aisée des données en XML. • Est sérializable. • Possibilité de typer fortement un DataSet • Nécessite un DataAdapter pour faire le pont avec la base de données. • Peut être filtré ou trié grâce au DataView • Le DataView sert également de pont avec les ihm. Jérôme BIABIANY - ADO .Net 15 Hiérarchie du DataSet
Jérôme BIABIANY - ADO .Net 16
Exemple avec une base SQL Server public void afficherCadre(SqlConnection cn) { string requete_cadre = "SELECT emp_id, nom, prenom, service FROM EMPLOYE WHERE statut='CADRE'"; string requete_agent = "SELECT emp_id, nom, prenom, service FROM EMPLOYE WHERE statut='AGENT'"; SqlDataAdapter da = new SqlDataAdapter(requete_cadre, cn); // Creation du DataSet DataSet ds = new DataSet(); // Remplir le DataSet da.Fill(ds, "EMP_CADRE");
Jérôme BIABIANY - ADO .Net 17
da.SelectCommand = new SqlCommand(requete_agent, cn); da.Fill(ds, "EMP_AGENT"); // Pour chaque table foreach(DataTable table in ds.Tables){ // Pour chaque colonne affichage du nom de la colonne foreach(DataColumn colonne in table.Columns){ Console.Write(colonne.ColumnName + "\t|"); } Console.WriteLine(""); // Pour chaque enregistrement foreach(DataRow ligne in table.Rows){ for(int i = 0 ;i < table.Columns.Count; i++) { Console.Write(ligne[i] + "\t|"); } Console.WriteLine(""); } } } Jérôme BIABIANY - ADO .Net 18 Mise à jour par DataSet • Le contenu d’un objet DataSet peut être modifié manuellement. • Pour valider les modifications dans la base de données il faut utiliser le DataAdapter et lui affecter ses propriétés : DeleteCommand, UpdateCommand, InsertCommand Par un Objet Command paramétré
Jérôme BIABIANY - ADO .Net 19
XML • DataSet.WriteXml : Ecrit au format XML, le contenu des données du DataSet. • DataSet.WriteXmlSchema : Ecrit au format XMLSchema les méta données du DataSet ( nom des tables, des colonnes, etc..). • En plus .NET est fournit avec une intrface riche pour utiliser le XML.
Jérôme BIABIANY - ADO .Net 20
Paramètres et procédures stockées • L’objet Command permet d’appeler également des procédures stockées. • L’objet Parameter représente un paramètre pour une requête ou une procédure stockée. • Un objet Command possède une liste de paramètres qui peut être éventuellement vide.
Transaction • ADO .net supporte la notion de transaction. • La transaction est associé à la connexion et à la commande utilisé. • Le Savepoint est un point de référence à partir duquel on doit revenir en cas d’annulation de l’opération
Pool de Connexion • L’ouverture et la fermeture d’une connexion avec une base de de données est coûteuse. • Le pool de de connexion contient un ensemble d’objet Connection déjà prête. • Lorsque que l’application ferme une connection en réalité, elle est remise automatiquement dans le pool. • .Net supporte par défaut la notion de pool de connection en se basant sur la chaine de connexion.
Jérôme BIABIANY - ADO .Net 25
Conseils • Choisir le bon fournisseur de données • Garder la connexion ouverte le moins longtemps possible. • Préférer le DataReader au DataSet pour des accès rapide. • Attention au DataSet dans un environnement avec de nombreux clients pouvant mettre à jour les données • Utiliser des procédures stockées