Ado .Net Modèle objets d`accès aux données Supports de cours
Transcription
Ado .Net Modèle objets d`accès aux données Supports de cours
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Ado .Net Modèle objets d’accès aux données Supports de cours Afpa St Brieuc – Langueux 04/02/2007 Page : 1 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Sommaire 1 – Objet Connection 2 – Objet OleDbCommand et SQLCommand 3 – Objet DatReader 4 – Objet DataSet 5 – Objet DatAdapter 6 – Objet DataTable 7 – Traitement des erreurs et des exceptions Afpa St Brieuc – Langueux 04/02/2007 Page : 2 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net 1 – Objet Connection g Création et utilisation d’un objet Connection Le rôle de l’objet Connection d’Ado.Net est de relier l’utilisateur de données au fournisseur de données. Cet Objet représente une session unique portant sur la base de données du fournisseur. D’autres objets, tel que les objets Command, utilisent l’objet Connection pour effectuer des opérations sur la base de données. Il existe trois types d’objet Connection : • • • SqlConnection pour l’accès aux bases de données SQL Server. OdbcConnection pour l’accès aux bases de données de typeODBC. OleDbConnection pour toutes les autres bases de données de type OLE DB. Processus d’utilisation de l’objet Connection : • • • • • Instanciation à l’aide du constructeur ou implicitement à l’aide des objets Command ou DataAdapter Mise en forme de la chaîne de connexion avec l’objet ConnectionString Utilisation de la méthode open pour établir la connexion à partir de l’objet ConnectionString Exécution des instructions sur les données, utilisation de l’objet Command La connexion est fermée à l’aide de la méthode close cl Espaces de noms requis En C# Pour une connexion avec une data source ODBC Using System.DataOdbc ; //Objet OdbcConnection Pour une connexion OleDb (ex : Microsoft Access) Using System.DataOleDb //Objet OleDbConnection Pour une connexion SqlServeur Using System.SqlClient //Objet SqlConnection Utiliser l’espace de nom correspondant au type de la base de données utilisée. Afpa St Brieuc – Langueux 04/02/2007 Page : 3 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net g Construction d’un objet Connection Création d’une instance de l’objet connection : En C# public OdbcConnection(string connectionString); ou public OleDbConnection (string connectionString); ou public SqlConnection(string connectionString); Propriétés ConnectionString Cette propriété contient les informations nécessaires d’une connexion à une source de donnée. Elle consiste en séquence de paramètres délimités par des points-virgules de cette forme : Nom_paramètre = ‘valeur du paramètre’ ; Le tableau suivant énumère les noms valides des valeurs de mot clé dans ConnectionString . Nom Application Name Valeur par défaut AttachDBFilename - ou propriétés étendues Le nom de la base de données doit être spécifié avec le mot clé 'database'. - ou Initial File Name Connect Timeout Description Nom de l'application ou '.Net SqlClient Data Provider' si aucun nom d'application n'est fourni. Nom du fichier principal, y compris le nom du chemin d'accès complet, d'une base de données connectable. 15 Durée d'attente (e n secondes) préalable à l'établissement d'une connexion au serveur avant que la tentative ne soit abandonnée et qu'une erreur ne soit générée. - ou Connection Timeout Current Language Nom d'enregistrement du langage SQL Server. Nom ou adresse réseau de l'instance de SQL Server à laquelle se connecter. Data Source - ou Server Afpa St Brieuc – Langueux 04/02/2007 Page : 4 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net - ou Address - ou Addr - ou Network Address Encrypt 'false' Si true, SQL Server utilise le cryptage SSL pour tous les échanges de données se produisant entre le client et le serveur si celui-ci dispose d'un certificat installé. Les valeurs reconnues sont true, false, yes et no. Nom de la base de données. 'false' Lorsque la valeur est false, l'ID d'utilisateur et le mot de passe sont spécifiés dans la connexion. Lorsque la valeur est true, les informations actuelles d'identification du compte Windows sont utilisées pour l'authentification. Initial Catalog - ou Database Integrated Security - ou Trusted_Connection Network Library Les valeurs reconnues sont true, false, yes, no et sspi (vivement recommandée), qui équivaut à true. Bibliothèque réseau permettant d'établir une connexion à une instance de SQL Server. Les valeurs prises en charge sont les suivantes : dbnmpntw (canaux nommés), dbmsrpcn (multiprotocole), db msadsn (Apple Talk), dbmsgnet (VIA), dbmslpcn (mémoire partagée) et dbmsspxn (IPX/SPX), et dbmssocn (TCP/IP). 'dbmssocn' - ou Net Packet Size Afpa St Brieuc – Langueux La DLL réseau correspondante doit être installée sur le système auquel vous vous connectez. Si vous ne spécifiez pas de réseau et si vous utilise z un serveur local (par exemple, « . » ou « (local) »), la mémoire partagée est utilisée. Taille en octets des paquets réseau permettant de communiquer avec une instance 8192 04/02/2007 Page : 5 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Password - ou Pwd Persist Security Info 'false' User ID Workstation ID nom de l'ordinateur local de SQL Server. Mot de passe de la session du compte SQL Server (non recommandé. Pour garantir le plus haut niveau de sécurité, Il est vivement recommandé d'utiliser de préférence le mot clé Integrated Security ou Trusted_Connection). Lorsqu'elles ont comme valeur false ou no (vivement recommandée), les informations de sécurité, comme le mot de passe, ne sont pas retournées dans le cadre de la connexion si celle-ci est ouverte ou l'a été à un moment donné. Le rétablissement de la chaîne de connexion rétablit toutes les valeurs des chaînes de connexion, y compris le mot de passe. Les valeurs reconnues sont true, false, yes et no. Compte de connexion SQL Server (non recommandé. Pour garantir le plus haut niveau de sécurité, Il est vivement recommandé d'utiliser de préférence le mot clé Integrated Security ou Trusted_Connection). Nom du poste de travail en cours de connexion à SQL Server. Exemple de connexion à une base de données Sql*Server : SqlConnection oConn; string strConn = "Data Source=localhost; Integrated Security= SSPI; DataBase = VideoScar"; try { oConn = new SqlConnection(strConn); oConn.Open(); txtEtat.Text = oConn.State.ToString(); } catch (Exception error) { txtEtat.Text = oConn.State.ToString() + " " + error.Message; } Afpa St Brieuc – Langueux 04/02/2007 Page : 6 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net 2 – Objet OleDbCommand et SqlCommand Les objets OleDbCommand et SqlCommand permettent d’encapsuler une commande pour exécuter sur un fournisseurde données. OleDbCommand opère sur les fournisseurs managés OLE DB, tels que Jet (Access) et Oracle, et quasiment tous les fournisseurs de données possédant des fournisseurs OLE DB correspondants. SqlCommand opère quand à lui sur le fournisseur managé SQL Server de .NET ; il peut exécuter une commande sur les versions 7.0 et ultérieurs de SQL Server. 2.1 OleDbCommand met en œuvre les méthodes suivantes exécutant des commandes au niveau d'une source de données : Elément Description Exécute des commandes qui retournent des lignes. Il se peut que ExecuteReader n'ait pas l'effet souhaité s'il est utilisé pour exécuter des commandes telles que des instructions SQL SET. Exécute des commandes telles que des instructions SQL INSERT, DELETE, UPDAT E et SET. Extrait une valeur unique (par exemple, une valeur d'agrégation) d'une base de données. ExecuteReader ExecuteNonQuery ExecuteScalar Constructeurs Initialise une no uvelle instance de la classe OleDbCommand. Liste de surcharge [Visual Basic] Public Sub New() [C#] public OleDbCommand(); [C++] public: OleDbCommand(); [JScript] public function OleDbCommand(); Initialise une nouvelle instance de la classe OleDbCommand avec le texte de la requête. [Visual Basic] Public Sub New(String) [C#] public OleDbCommand(string); [C++] public: OleDbCommand( String*); [JScript] public function OleDbCommand(String); Initialise une nouvelle instance de la classe OleDbCommand avec le texte de la requête et OleDbConnection. [Visual Basic] Public Sub New(String, OleDbConnection) [C#] public OleDbCommand(string, OleDbConnection); [C++] public: OleDbCommand(String*, OleDbConnection*); [JScript] public function OleDbCommand(String, OleDbConnection); Afpa St Brieuc – Langueux 04/02/2007 Page : 7 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Initialise une nouvelle instance de la classe OleDbCommand avec le texte de la requête, OleDbConnection et Transaction. [Visual Basic] Public Sub New(String, OleDbConnection, OleDbTransaction) [C#] public OleDbCommand(string, OleDbConnection, OleDbTransaction); [C++] public: OleDbCommand(String*, OleDbConnection*, OleDbTransaction*); [JScript] public function OleDbCommand(String, OleDbConnection, OleDbTransaction); Exemple : requête et connexion string strReq = "select * from ACTEUR where ACTCOD = '" + txtCode.Text + "'"; OleDbCommand oCommand = new OleDbCommand (strReq, oConn); 2.2 SqlCommand met en œuvre les méthodes suivantes pour l'exécution de commandes au niveau d'une base de données SQL Server : Elément ExecuteReader ExecuteNonQuery Description Exécute la commande dans CommandText sur SqlConnection assigné et renvoie un objet SqlDataReader. SqlDataReader est un curseur en lecture avant uniquement, q ui se déplace sur l’ensemble des lignes. Afin d'améliorer les performances, ExecuteReader appelle des commandes à l'aide de la procédure stockée système sp_executesql Transact -SQL. Par conséquent, il se peut que ExecuteReader n'ait pas l'effet souhaité s'il est utilisé pour exécuter des commandes telles que des instructions Transact SQL SET. Exécute des commandes telles que des instructions Transact -SQL INSERT, DELETE, UPDATE et SET. ExecuteScalar Extrait une valeur unique (par exemple, une valeur d'agrégation) d'une base de données. ExecuteXmlReader Envoie CommandText à Connection et génère un objet XmlReader. Vous pouvez réinitialiser la propriété CommandText et réutiliser l'objet SqlCommand. Cependant, vous devez fermer SqlDataReader avant d'exécuter une commande nouvelle ou précédente. Constructeurs Initialise une nouvelle instance de la classe SqlCommand. Liste de surcharge Afpa St Brieuc – Langueux 04/02/2007 Page : 8 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Initialise une nouvelle instance de la classe SqlCommand. Pris en charge par le .NET Compact Framework. [Visual Basic] Public Sub New() [C#] public SqlCommand(); [C++] public: SqlCommand(); [JScript] public function SqlCommand(); Initialise une nouvelle instance de la classe SqlCommand avec le texte de la requête. Pris en charge par le .NET Compact Framework. [Visual Basic] Public Sub New(String) [C#] public SqlCommand(string); [C++] public: SqlCommand(String*); [JScript] public function SqlCommand(String); Initialise une nouvelle instance de la classe SqlCommand avec le texte de la requête et SqlConnection. Pris en charge par le . NET Compact Framework. [Visual Basic] Public Sub New(String, SqlConnection) [C#] public SqlCommand(string, SqlConnection); [C++] public: SqlCommand(String*, SqlConnection*); [JScript] public function SqlCommand(String, SqlConnection); Initialise une nouvelle instance de la classe SqlCommand avec le texte de la requête, SqlConnection et SqlTransaction. Pris en charge par le .NET Compact Framework. [Visual Basic] Public Sub New(String, SqlConnection, SqlTransacti on) [C#] public SqlCommand(string, SqlConnection, SqlTransaction); [C++] public: SqlCommand(String*, SqlConnection*, SqlTransaction*); [JScript] public function SqlCommand(String, SqlConnection, SqlTrans action); Exemple : requête et chaîne de connexion string strReq = "select * from ACTEUR where ACTCOD = '" + txtCode.Text + "'"; SqlCommand oCommand = new SqlCommand(strReq, oConn); Afpa St Brieuc – Langueux 04/02/2007 Page : 9 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net 3 – Objet DataReader (OleDbDataReader, OdbcDataReader, SqldataReader) L’objet DataReader sert à accéder aux informations contenues dans l’entrepôt de données. Il résulte de l’exécution de la méthode ExecuteReader sur un objet OleDbCommand ou SqlCommand. C’est l’un des deux mécanismes mis à disposition des développeurs par ADO .NET. L’autre mécanisme utilise un objet DataAdapter pour transférer les informations vers un DataSet (Chapitre suivant L’objet DataReader fournit un mécanisme en lecture seule, en avant seulement, qui permet d’extraire les informations d’un entrepôt de données sous forme d’un flux, tout en restant connecté à la source de données. Les performances de ce mécanisme sont élevées. ). L’objet DataReader ne stocke en mémoire qu’une seule ligne à la fois, permettant ainsi d’augmenter les performances d’une application en d’en réduire la charge. Le DataReader est limité, mais hautement optimisé. Il est important de connaître les caractéristiques du DataReader avant de décider quel mécanisme utiliser dans une application pour accéder aux données : - Pas de besoin de réaliser un cache des données Le jeu d’enregistrement est trop important pour être stocké en mémoire Accès rapide aux données en lecture seule en avant seulement. Accès aux données en mode connecté. Par défaut, un DataReader charge une ligne entière en mémoire à chaque appel de la méthode Read. Il est possible d’accéder aux valeurs des colonnes soit par leurs noms soit par une référence ordinales. Une solution plus performante est proposée permettant d’accéder aux valeurs dans leurs types de données natifs (GetInt32, GetDouble, GetString, …). Exemple : première colonne indicée par 0, de type int. int i iColonne ; iColonne = oDataReader.GetInt32(0) ; Fermeture du DataReader Vous devez toujours appeler la méthode Close lorsque vous avez fini d'utiliser l'objet DataReader. Si Command contient des paramètres de sortie ou des valeurs de retour, ils ne seront pas disponibles avant la fermeture du DataReader. Afpa St Brieuc – Langueux 04/02/2007 Page : 10 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net Notez que pendant l'ouverture d'un DataReader, Connection est utilisé en mode exclusif par ce DataReader. Vous ne pourrez pas exécuter les commandes pour Connection, y compris la création d'un autre DataReader, jusqu'à la fermeture du DataReader d'origine. Constructeurs Il n’y a pas de constructeur de DataReader. La seule manière de créer un objet DataReader est d’appeler la méthode ExecuteReader sur l’objet OleDbCommand ou SqlCommand. Propriétés publiques Depth Obtient une valeur indiquant la profondeur d'imbrication de la ligne en cours. Pris en charge par le .NET C ompact Framework. FieldCount Obtient le nombre de colonnes figurant dans la ligne en cours. Pris en charge par le .NET Compact Framework. HasRows Obtient une valeur indiquant si le SqlDataReader contient une ou plusieurs lignes. Obtient une valeur indiquant si le lecteur de données est fermé. IsClosed Pris en charge par le .NET Compact Framework. Item RecordsAffected Pris en charge par le .NET Compact Framework. Surchargé. Obtient la valeur d'une colonne dans son format natif. En C#, cette propriété est l'indexeur pour la classe SqlDataReader . Obtient le nombre de lignes modifiées, insérées ou supprimées en exécutant l'instruction Tra nsactSQL. Méthodes publiques Close Ferme l'objet SqlDataReader . Pris en charge par le .NET Compact Framework. CreateObjRef (hérité de MarshalByRefObject ) Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant. Surchargé. Détermine si deux instances de Object sont égales. Equals (hérité de Object) Pris en charge par le .NET Compact Framework. GetBoolean Pris en charge par le .NET Compact Framework. GetByte Obtient la valeur de la colonne spécifi ée comme Boolean. Obtient la valeur de la colonne spécifiée sous la forme d'un octet. Pris en charge par le .NET Compact Framework. Afpa St Brieuc – Langueux 04/02/2007 Page : 11 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net GetBytes Pris en charge par le .NET Compact Framework. GetChar Pris en charge par le .NET Compact Framework. GetChars Pris en charge par le .NET Compact Framework. GetDataTypeName Pris en charge par le .NET Compact Framework. GetDateTime Pris en charge par le .NET Compact Frame work. GetDecimal Pris en charge par le .NET Compact Framework. GetDouble Pris en charge par le .NET Compact Framework. GetFieldType Pris en charge par le .NET Compact Framework. GetFloat Pris en charge par le .NET Compact Framework. GetGuid Pris en charge par le .NET Compact Framework. GetHashCode (hérité de Object) Pris en charge par l e .NET Compact Framework. GetInt16 Pris en charge par le .NET Compact Framework. GetInt32 Pris en charge par le .NET Compact Framework. GetInt64 Lit un flux d'octets à partir de l'offset de colonne spécifié dans la mémoire tampon sous la for me d'un tableau commençant à l'offset de mémoire tampon donné. Obtient la valeur de la colon ne spécifiée sous la forme d'un caractère unique. Lit un flux de caractères à partir de l' offset de colonne spécifié dans la mémoire tampon sous la forme d'un tableau commençant à l'offset de mémoire tampon donné. Obtient le nom du type de données source. Obtient la valeur de la colonne spécifiée sous la forme d'un objet DateTime. Obtient la valeur de la colonne spécifiée sous la forme d'un objet Decimal. Obtient la valeur de la colonne spécifiée sous la forme d'un nombre en virgule flottante double précision. Obtient le Type qui correspond au type de données de l'objet. Obtient la valeur de la colonn e spécifiée sous la forme d'un nombre en virgule flottante simple précision. Obtient la valeur de la colonne spécifiée sous la forme d'un identificateur global unique (GUID, Globally-Unique IDentifier). Sert de fonction de hachage pour un type particulier, adapté à une utilisation dans des algorithmes de hachage et des structures de données telles qu'une table de hachage. Obtient la valeur de la colonne spécifiée sous la forme d'un entier signé 16 bits. Obtient la valeur de la colonne spécifiée sous la forme d'un entier signé 32 bits. Obtient la valeur de la colonne spécifiée sous la forme d'un entier signé 64 bits. Pris en charge par le .NET Compact Framework. Extrait l'objet de service de durée de vie en cours qui contrôle la stratégie de duré e de vie de cette instance. GetLifetimeService (hérité de MarshalByRefObject ) GetName Obtient le nom de la colonne spécifiée. Pris en charge par le .NET Compact Framework. GetOrdinal Pris en charge par le .NET Compact Framework. GetSchemaTable Afpa St Brieuc – Langueux Obtient le numéro de la colonne, en fonction du nom de la colonne. Retourne un DataTable qui décrit les métadonnées 04/02/2007 Page : 12 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net de la colonne de SqlDataReader . Pris en charge par le .NET Compact Framework. GetSqlBinary Pris en charge par le .NET Compact Framework. GetSqlBoolean Pris en charge par le .NET Compact Framework. GetSqlByte Pris en charge par le .NET Compact Framework. GetSqlDateTime Pris en charge par le .NET Compact Framework. GetSqlDecimal Pris en charge par le .NET Compact Framework. GetSqlDouble Pris en charge par le .NET Compact Framework. GetSqlGuid Pris en charge par le .NET Compact Framework. GetSqlInt16 Pris en charge par le .NET Compact Framework. GetSqlInt32 Pris en charge par le .NET Compact Framework. GetSqlInt64 Pris en charge par le .NET Compact Framework. GetSqlMoney Pris en charge par le .NET Compact Framework. GetSqlSingle Pris en charge par le .NET Compact Framework. GetSqlString Pris en charge par le .NET Compact Framework. GetSqlValue Pris en charge par le .NET Com pact Framework. GetSqlValues Pris en charge par le .NET Compact Framework. GetString Obtient la valeur de la colonne sp écifiée sous la forme de SqlBinary. Obtient la valeur de la colonne spécifiée sous la forme de SqlBoolean. Obtient la valeur de la colonne spécifiée sous la forme de SqlByte. Obtient la valeur de la colonne spécif iée sous la forme de SqlDateTime. Obtient la valeur de la colonne spécifiée sous la forme de SqlDecimal. Obtient la valeur de la colonne spécifiée sous la forme de SqlDouble. Obtient la valeur de la colonne spécif iée sous la forme de SqlGuid. Obtient la valeur de la colonne spécifiée sous la forme de SqlInt16. Obtient la valeur de la colonne spécifiée sous la forme de SqlInt32. Obtient la valeur de la colonne spécifiée sous la forme de SqlInt64. Obtient la valeur de la colonne spécifiée sous la forme de SqlMoney. Obtient la valeur de la colonne spécifiée sous la forme de SqlSingle. Obtient la valeur de la colonne spécifiée sous la forme de SqlString. Obtient un Object qui est une représentation du Variant SqlDbType sous-jacent. Obtient toutes les colonnes d'attributs figurant dans la ligne en cours. Obtient la valeur de la colonne spécifiée sous la forme d'une chaîne. Pris en charge par le .NET Compact Framework. GetType (hérité de Object) Obtient le Type de l'instance en cours. Pris en charge par le .NET Compact Framework. GetValue Obtient la valeur de la colonne spécifiée dans son Afpa St Brieuc – Langueux 04/02/2007 Page : 13 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net format natif. Pris en charge par le .NET Compact Framework. GetValues Pris en charge par le .NET Compact Framework. InitializeLifetimeService (hérité de MarshalByRefObject ) IsDBNull Pris en charge par le .NET Compact Framework. NextResult Pris en charge par le .NET Compact Framework. Read Pris en charge par le .NET Compact Framework. ToString (hérité de Object) Obtient toutes les colonnes d'attributs figurant dans la collection de la ligne en cours. Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance. Obtient une valeur indiquant si la colonne contient des valeurs inexistantes ou manquantes. Avance le lecteur de données jusqu'au résultat suivant, lors de la lectur e des résultats des instructions Transact -SQL par lot. Avance SqlDataReader jusqu'au prochain enregistrement. Retourne un String qui représente l' Object en cours. Pris en charge par le .NET Compact Framework. Méthodes protégées Finalize (hérité de Object) Pris en charge par le .NET Compact Framework. Substitué. Autorise Object à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant que Object soit récupéré par l'opération garbage collection. En C# et C++, les finaliseurs sont exprimés à l'aide de la syntaxe des destructeurs. Crée une copie partielle de l' Object en cours. MemberwiseClone (hérité de Object) Pris en charge par le .NET Compact Framework. Implémentations d'interface explicites IEnumerable.GetEnumerator Ce membre prend en charge l'infrastructure .NET Framework et n'est pas destiné à être directement utilisé à partir de votre code. Exemple : SqlDataReader oReader; string strReq = "select * from ACTEUR where ACTCOD = '" + txtCode.Text + "'"; SqlCommand oCommand = new SqlCommand(strReq, oConn); try { oReader = oCommand.ExecuteReader(); if (!oReader.Read ()) { Afpa St Brieuc – Langueux 04/02/2007 Page : 14 Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia) http://www.pdfmail.com Cours ADO.net MessageBox.Show ("Acteur Inconnu","Erreur",MessageBoxButtons.OK,Mess ageBoxIcon.Error); } else { Exo.exo2.Visible = false; Exo.exo22 = new Exo22(); Exo.exo22.Visible = true; } oReader.Close (); } catch (Exception error) { MessageBox.Show (error.Message, "Erreur", MessageBoxButtons.OK,MessageBoxIcon.Error); } Afpa St Brieuc – Langueux 04/02/2007 Page : 15