Vous êtes sur la page 1sur 63

ENVIRONNEMENT DE

DEVELOPPEMENT DE
BASES DE DONNÉES (.NET
et C#)
Chapitre 1:Environnement de développement .Net
Ce chapitre présente une simple introduction au Framework Microsoft
.Net.

Rania Yangui EDBD 1


Introduction
 Un environnement de développement consiste en un ensemble de
logiciels permettant de travailler sur des codes sources de
programmes

Rania Yangui EDBD 2


Le Framework .NET
 .NET est une plateforme complète pour développer, déployer et
exécuter des Applications Web, Windows, Mobiles et serveur.
 C’est une plateforme gratuite et intégrée à Windows.
 C’est une plateforme multi-langages(C#, VB.NET, C++ ...).
 Le Framework .NET est totalement objet. Les classes du
Framework sont ordonnées hiérarchiquement sous des
namespaces.
Exemple: toutes les classes concernant la manipulation des
fichiers XML se trouveront dans un namespace « System.XML »
; les classes permettant de faire de la manipulation de données
seront dans le namespace « System.Data » …

Rania Yangui EDBD 3


Eléments du Framework .NET
 Le Framework intègre de base des classes pour la connexion aux bases
de données via ADO.NET, OLEDB, ODBC,ODBC.NET… Ces classes
permettent donc de se connecter à toutes les bases de données
existantes sur le marché telles que SqlServer, Oracle, Access, Sybase…
Il existe aussi actuellement des drivers optimisés pour SqlServer et
Oracle.

Rania Yangui EDBD 4


Les bénéfices de .NET pour les entreprises
 Les avantages de .NET pour les entreprises sont multiples et variés :
 La productivité, c’est à dire le développement des applications, est

plus rapide. Il y a un gain de productivité en .NET car tout est objet


en .NET. Lors du développement des composants, il est possible de
les réutiliser dans plusieurs applications, ce qui évite de développer
les mêmes méthodes à chaque fois.
 Un des avantages du Framework .Net, c’est qu’il est multi-langages.

C'est-à-dire que l’on va pouvoir programmer en VB.NET, en C#, en


C++, en J# et aussi en d’autres langages compatibles. Nous allons
voir comment l’architecture du Framework va nous permettre cela.

Rania Yangui EDBD 5


Les couches de la plateforme .NET

Rania Yangui EDBD 6


Les couches de la plateforme .NET
 Common Language Runtime (CLR): se place juste au dessus du
Système d’exploitation et c’est la CLR qui va exécuter les
applications .NET puis gérer la gestion de mémoire et la sécurité
de l’application. Chaque langage possède son propre compilateur
(pour C# le compilateur se nomme « csc », pour VB.NET c’est le
« vbc »…).
 ASP.NET: permet la création d’application Web au sein de .NET
et non pas de pages Web comme avec ASP. En .NET tout est
objet, donc en ASP.NET une page est un objet, un bouton est un
objet… : ces objets s’appellent des contrôles Web.

Rania Yangui EDBD 7


Les couches de la plateforme .NET
 Windows Forms: est une infrastructure qui permet de construire
des applications clientes Windows .NET, qui utilise la CLR. Les
applications Windows Form peuvent être créées dans n’importe
quel langage .NET.
 Common Language Specification (CLS): signifie Common
Language Specification. La CLS va être en fait la spécification
commune à tous les langages .NET qui va permettre la
compatibilité entre tous les langages .NET.

Rania Yangui EDBD 8


Principaux Classes de base
 Le namespace « System » regroupe tout d’abord tous les types de bases
: String, Int, Bool… C’est donc pour cela qu’il faut toujours inclure
dans les applications le namespace « System » à moins de vouloir taper
le chemin complet des types (par exemple «System.String»).
 Le namespace « System.IO » regroupe toutes les classes qui permettent
de lire des fichiers, écrire et modifier un fichier… (Par exemple, la
classe « TextReader » du namespace «System.IO » permet de lire un
fichier texte et afficher son contenu).
 Le namespace « System.Data » regroupe toutes les classes et
types qui permettent d’accéder à une base de données.
 Le namespace « System.Xml » regroupe toutes les classes qui
permettent de manipuler des fichiers XML et de les modifier.

Rania Yangui EDBD 9


Principaux Classes de base
 Le namespace « System.Reflection » regroupe toutes les classes
utiles à l’interrogation des métas données. La réflexion permet de
connaître toutes les méthodes d’une classe, ainsi que ses
paramètres, constructeurs…
 Le namespace « System.Net » regroupe toutes les classes utiles à
l’accès au réseau : socket, requête http…

Rania Yangui EDBD 10


ENVIRONNEMENT DE
DEVELOPPEMENT DE
BASES DE DONNÉES (.NET
et C#)
Chapitre 2: Langage de développement C#
Ce chapitre présente une simple introduction au langage C#.

Rania Yangui EDBD 11


Introduction

 Les langages supportés par .Net sont nombreux: C#, VB.Net,


Managed C++( ou C++.Net ou encore C++ Managé), JScript.Net, J#
et F#.
 Chaque langage possède son propre compilateur. Par exemple, pour
compiler un programme en C#, il faut utiliser csc (C Sharp
Compiler).

12
Le langage C#

 C# est un langage de programmation orientée objet par


excellence de .Net, apparu en 2001.
 C’est un langage polyvalent, Il permet de coder de simples
applications consoles jusqu’à de gros programmes avec une
multitude de fenêtres, en passant par les jeux.
 C’est un langage à typage fort, c’est à dire que le type des
variables est fixé à la compilation et que celle-ci peut vérifier
les erreurs de typage

13
Création d’un projet C#
 Installer puis lancer le Visual Studio
www.visualstudio.com/fr/vs/visual-studio-express
 Dans le menu supérieur allez dans : File/New/Project

 Puis, dans la fenêtre qui s’ouvre, on va choisir Visual C# dans

le menu déroulant et « Console Application » et donner un


nom à notre projet.

14
Création d’un projet C#
 Vous devriez avoir un code qui
ressemble à ça :

 Le mot clé « using» est une directive qui indique avec quel
espace de noms nous allons travailler pour ne pas réécrire à
chaque fois le chemin entier des commandes
 La classe « Program » est le cœur de notre programme.
 Static void Main indique notre méthode principale, c’est la que
l’on va placer notre code source, c’est le code placé dans cette
partie qui sera exécuté en premier.

15
Programmation C#: entrées / sorties
 La commande « System.Console.WriteLine(" ") » permet
d’afficher un message dans la Console.
 La commande qui permet de récupérer une entrée au clavier
est : « System.Console.ReadLine(); ».
 Exemple:

16
Programmation C#: Namespace System
 Afficher la date courante: Console.WriteLine(DateTime.Now);
 Afficher l’utilisateur courant:
Console.WriteLine(Environment.UserName);

17
Programmation C#: Création de méthode

 Visibilité (attributs et méthodes)


 public : Accès non restreint

 private : Accès uniquement depuis la même classe

 protected : Accès depuis la même classe ou depuis une

classe dérivée

18
Programmation C#: variables
 Les variables nous permettent de stocker des valeurs en
mémoire

19
Programmation C#: variables
 Exemples de déclaration

20
Programmation C#: opérateurs arithmétiques
et de comparaison
 Ces opérateurs nous permettent d’effectuer du calcul arithmétique sur
nos variables

 Ces opérateurs nous permettent de tester des propositions. Ils renvoient


donc une valeur booléenne (true ou false).

21
Programmation C#: opérateurs arithmétiques
Le code suivant
présente des
exemples de calculs

22
Programmation C#: opérateurs conditionnels
et opérateurs d’attributs
 Opérateurs conditionnels

 Opérateurs d’attributs

23
Programmation C#: opérateurs conditionnels
Le code suivant
présente des
exemples
d’utilisation
d’opérateurs
conditionnels

24
Programmation C#: opérateurs d’incrémentation
 Les Opérateur d’incrémentation dérivent eux aussi d’une écriture
condensée

25
Programmation C#: structures de contrôle
 if (expression) { instructions if true } [else {instructions if false }].
Si expression est évaluée true, c’est le premier bloc d’instruction
qui est exécuté, sinon le deuxième.
 if (expression) { instructions if true } [else if(condition)
{ instructions if true }[ else if (condition) { instructions if true }
[else …]]]. On;peut enchaîner les tests autant que l’on souhaite. Si
la succession de tests consiste à tester une valeur particulière, il
vaut mieux passer par un while.
 switch (expression): cette structure est intéressant pour éviter les if
à répétition. Elle évalue l’expression puis parcourt tous les « case
value : » et exécute le code associé. S’il ne trouve rien, il exécute
le contenu du « default : ».

26
Programmation C#: structures de contrôle
 Exemple

27
Programmation C#: les boucles
 For: se divise en trois parties (chacune étant optionnelle) :
 i=0 : initialisation.

 i<10 : Condition d'arrêt. Cette expression est évaluée à chaque

itération. Si l'expression est évaluée vrai (true) l'itération est


exécutée. Si l'expression est
 i++ : fin d'itération. Cette instruction est exécutée APRES

chaque itération, souvent utilisée pour incrémenter un


compteur. Rien n’empêche d'appeler une fonction quelconque.
 Cet exemple a donc créé une variable i, puis l'a affichée et
incrémentée une dizaine de fois.

28
Programmation C#: les boucles
 Foreach: sert à parcourir tous les éléments d'un tableau ou d’une
collection. Ainsi, il faut spécifier une variable qui va successivement
contenir toutes les valeurs du tableau/collection.
 While: exécute les instructions de la boucle tant que la condition
spécifiée entre parenthèses est vrai. Ainsi, avant chaque itération,
l'expression est évaluée. Si elle est vraie (true), la boucle est
exécutée, sinon, le programme quitte la boucle while. Il est possible
d'arrêter l'exécution de la boucle grâce à continue ou à break.:
continue quitte l'itération en cours et passe à la prochaine (si bien sûr
la condition est vraie) et break quitte l'itération en cours.
 do while: Le principe du do while est identique à celui du while à
une différence près : l'évaluation de l'expression d'arrêt est évaluée à
la fin de chaque itération. Ainsi, on est sûr que le contenu de la
boucle est exécuté au moins une fois dans le programme.

29
ENVIRONNEMENT DE
DEVELOPPEMENT DE
BASES DE DONNÉES (.NET
et C#)
Chapitre 3: La technologie ADO
Ce chapitre présente une simple introduction à la technologie ADO.

Rania Yangui EDBD 30


La technologie ADO
 La technologie ADO.NET (ActiveX Data Objects) est un
ensemble de classes qui exposent des services standardisés
permettant aux programmeurs de concevoir des applications
connectées à des sources de données variées et, d’extraire, de
manipuler et de mettre à jour ces données
 Les sources de données peuvent être : des SGBD relationnels tels
Microsoft SQL Server et Oracle (BD Oracle, BD SQL Server,…),
des sources de données exposées via OLE DB (BD Access), des
sources de données exposées via XML
 L’avantage principal de cette technologie est qu’elle permet une
manipulation identique quelque soit la source de données (hormis
les paramètres de connexion).

Rania Yangui EDBD 31


Espaces de nom
 System.Data.OracleClient

Rania Yangui EDBD 32


Mode connecté Vs. Mode déconnecté
 L’architecture ADO.NET intègre deux modes d’accès de données
qui sont:
 Mode Connecté : l’application cliente a un accès direct et

maintenu à la source de données.


 Mode déconnecté : il est possible de travailler sur des données

sans avoir un accès permanent à la base (sans être connecté à


celle-ci). Il suffit juste de se connecter pendant un court laps
de temps afin de faire une mise à jour (prévoir les traitements
en cas de conflits)

Rania Yangui EDBD 33


Mode connecté
 Les objets utilisés dans ce mode sont de type :
 Connexion : permet d’établir une connexion avec la source de

données
 Command : cet objet permet d’exécuter des traitements

(procédures stockées) ou de modifier / lire des données sur la


source, extraire des informations sur les paramètres. C’est lui
qui contiendra la requête SQL
 DataReader : permet de parcourir, en lecture seule,

l’ensemble des enregistrements récupérés par la requête. Il est


créé par l’objet Command

Rania Yangui EDBD 34


Mode déconnecté
 Dans ce mode, le traitement des données se fait en 3 étapes :
 Récupération des données à partir de la source

 Modification des données en mode déconnecté

 Intégration des données modifiées à la source avec éventuellement

résolution des conflits


 Les objets utilisés dans ce mode sont :
 Connexion : permet d’établir la connexion

 DataAdapter : Il sert de liaison entre la source de données et l’objet

dataSet. Il permet d'approvisionner le DataSet en données (contient


la requête Select), et répercuter les modifications apportées dans la
source de données.
 DataSet : a la structure d’une base de données mais en local. Il peut

être rempli par l’objet DataAdapter ou bien créé indépendamment


d’une source de données

Rania Yangui EDBD 35


DataSet
 Un DataSet est un cache de données en mémoire pour stocker temporairement
des données utilisées dans votre application. Il permet d'importer la partie
désirée de la BD en local.
 Le DataAdapter permet de relier ("Binder") un DataSet sur une base de donnée
(en lecture et en écriture ).
 Pour utiliser un DataSet, il faut importer l’espace de nom System.data
 Un DataSet peut être composé de :
 DataTable

 DataRow

 DataColumn

 DataRelation

 Constraint

 DataView

Rania Yangui EDBD 36


Etablir une connexion avec une BD
 Afin d’établir une connexion avec la BD, il faut créer un objet connexion en
instanciant une classe Connection spécifique au fournisseur d’accès de votre
BD : OracleConnection
 Parmi les propriétés de cette classe

 Parmi les paramètres de la chaîne de connexion ConnectionString

 Provider: OraOLEDB.oracle

Rania Yangui EDBD 37


Etablir une connexion avec une BD
 La propriété state de la classe connection peut avoir les valeurs suivantes :
 Closed : fermée

 Connecting : En cours de connexion

 Open : ouverte

 Broken : Interrompue

 Parmi les méthodes des classes de connexion, on cite :

 Après avoir créé l’objet Connexion , il faut l’ouvrir avec Open conn.open()

Rania Yangui EDBD 38


Exemple
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
……………………………
……………………………
OleDbConnection conn = new OleDbConnection();
Source=C:\AccesBD\Gestion.accdb";
conn.ConnectionString= ChaineConnexion;
conn.open();

Rania Yangui EDBD 39


Data Reader
 Avec un objet DataReader, on extrait des données en lecture seule : une
requête SQL charge le dataReader.
 Pour gérer un DataReader on a besoin d’un objet Command.
 Dans ce cas, il faut suivre les étapes suivantes :
 Créer un objet Connection

 Ouvrir la connexion

 Créer un objet Command

 Exécuter la méthode ExecuteReader pour créer l’objet DataReader

 Parcourir les enregistrements par la méthode read.

 L’objet Command contient les commandes envoyées aux SGBD (requêtes


simples, procédures stockées)
 Les résultats sont retournés sous la forme de flux qui peuvent être lus par un
objet DataReader, ou placés dans un objet DataSet (méthode Fill DataAdapter)
 Pour créer un objet Command, il faut instancier la classe OracleCommand

Rania Yangui EDBD 40


Data Reader
 Parmi les méthodes intéressantes des objets de type command

Rania Yangui EDBD 41


Data Reader: Exemple
 1ère méthode
string sql1 = "Select * from Produits";
OleDbCommand mycommand = new OleDbCommand(sql1,conn);
 2ème méthode
OleDbCommand mycommand = new OleDbCommand();
MyCommand.Connection = conn;
MyCommand.CommandText = "Select * from Produits";

Rania Yangui EDBD 42


Data Reader
 Avec ExecuteScalar de l'objet Command on peut récupérer les résultats
d'une requête SQL qui contient une instruction COUNT (comptage),
AVG (moyenne), MIN (valeur minimum), MAX (valeur maximum),
SUM (somme)
 Exemple1
string sql2 = "Select count(*) from Produits";
OleDbCommand mycommand2 = new OleDbCommand(sql2,conn);
int nbproduits = (int) mycommand2.ExecuteScalar();
Console.WriteLine("le nombre de produits est: " + " "+
nbproduits.ToString());

Rania Yangui EDBD 43


Data Reader
 Exemple2: selectionner des enregistrements
string sql2 = "SELECT nom, prenom, codeprg FROM ETUDIANTS where
codeprg =420";
string ChaineConnexion = "";
OracleConnection conn = new OracleConnection(ChaineConnexion);
conn.Open();
System.Console.WriteLine("statue de la connexion" + " "+ conn.State);
OracleCommand ObjSelct = new OracleCommand(sql2, conn);
OracleDataReader ObjeRead = ObjSelct.ExecuteReader();
while (ObjeRead.Read()) {
Console.WriteLine("{0} - {1} - {2}", ObjeRead.GetString(0),
ObjeRead.GetString(1), ObjeRead.GetInt32(2)); }
ObjeRead.Close()
System.Console.Read();
conn.Close();

Rania Yangui EDBD 44


Travailler avec un DataSet
 Pour créer un objet dataSet il faut instancier la classe DataSet
DataSet donnees = new DataSet();
 Parmi les propriétés de l’objet DataSet

 Une fois créé, on doit lui ajouter des tables et des relations.
 Pour créer un objet DataTable, il faut instancier la classe DataTable puis
le lier à l’objet DataSet

Rania Yangui EDBD 45


Travailler avec un DataSet
 Exemple:
DataTable personne = new DataTable();
donnees.Tables.Add(personne);

Rania Yangui EDBD 46


DataTable
 Parmi les propriétés de l’objet DataTable

 Pour ajouter un objet dataColumn à un objet dataTable, il faut instancier


la classe DataColumn puis la lier à un objet DataTable
 En créant un objet de type DataColumn, on doit spécifier plusieurs
informations : Le nom de la colonne, Le type de la colonne, etc.

Rania Yangui EDBD 47


DataTable
 Exemple:
Dataset donnees = new dataset();
DataTable personne = new dataTable(″personne″);
donnees.DataTables.Add(personne);
DataColumn col1 = New (″pers_num″, typeof(System.Int32));
Col1.AutoIncrement = true;
Col1.AutoIncrementSeed = 1;
Col1.AutoIncrementStep = 1;
donnees.Tables(″personne″).Columns.Add(col1);
donnees.Tables(″personne″).PrimaryKey = New
DataColumn(){col1}

Rania Yangui EDBD 48


DataTable
DataColumn col2 = New DataColumn(″pers_nom″,
typeof(System.String));
Columns.Add(col3);
Col2.Unique = true;
Col2.DefaultValue = ″inconnu″;
donnees.Tables(″personne″).Columns.Add(col2);
DataColumn col3 = New
DataColumn(″pers_cat_num″,typeof(System.Int32));
donnees.Tables(″personne″).Columns.Add(col3);

Rania Yangui EDBD 49


DataTable
 Exemple:
DataColumn col2 = New DataColumn(″pers_nom″,
typeof(System.String));
Columns.Add(col3);
Col2.Unique = true;
Col2.DefaultValue = ″inconnu″;
donnees.Tables(″personne″).Columns.Add(col2);
DataColumn col3 = New
DataColumn(″pers_cat_num″,typeof(System.Int32));
donnees.Tables(″personne″).Columns.Add(col3);

Rania Yangui EDBD 50


Data Relation
 La création d’une relation se fait en créant un objet DataRelation et en
spécifiant les champs des tables qui sont liés.
 Pour créer un objet DataRelation, il faut instancier la classe

DataRelation
 Lors de la création d’une relation, on doit spécifier son nom, le champ «

clé primaire » et le champ « clé étrangère »


 Exemple

DataRelation rel = New DataRelation(″personne_categorie″,


donnees.Tables(″categorie″).Columns(″cat_num″),
donnees.Tables(″personne″).Columns(″pers_cat_num″));
donnees.Relations.Add(rel);

Rania Yangui EDBD 51


Remplir un DataSet à partir d’une BD
 Une requête SQL charge le DataSet avec des enregistrements
 Pour alimenter un DataSet, on a besoin d’un objet de type DataAdapter
qui fait l’intermédiaire entre la BD et le DataSet.
 Dans ce cas, il faut suivre les étapes suivantes :
 Créer un objet Connexion

 Ouvrir la connexion

 Créer un objet DataAdapter

 Remplir les DataTable d’un objet DataSet grâce à la méthode Fill

du DataAdapter
 Les DataGrid et les ListBox peuvent afficher des données à partir des
DataSet.

Rania Yangui EDBD 52


DataAdapter
 L’objet DataAdapter fonctionne comme un pont (intermédiaire) entre le
DataSet et les données source afin de peupler le DataSet par les données
issues de la source de données (SELECT) et de mettre à jour la BD par
les données du DataSet.
 La méthode Fill du DataAdapter appelle la commande SELECT.
 En utilisant la méthode Update, appelle la commande INSERT,
UPDATE ou DELETE pour chaque ligne modifiée.
 Méthodes importantes :
 Fill : Ajoute ou actualise des lignes de DataSet pour qu'elles

correspondent à celles de la source de données.


 Dispose : Libère les ressources utilisées par DataAdpter

 Update Appelle les instructions INSERT, UPDATE ou DELETE

respectives pour chaque ligne insérée, mise à jour ou supprimée dans


DataSet

Rania Yangui EDBD 53


Remplir un DataSet à partir d’une BD
 Exemple 1:
string sql1 = "Select * from Produits";
OleDbDataAdapter ProductAdapter = new OleDbDataAdapter(sql1, conn);
DataSet mydataset = new DataSet();
//la méthode Fill prend comme arguments : un objet de type dataset et
chaine (nom du DataTable crée)
ProductAdapter.Fill(mydataset, "Produits");
//Récupérer le contenu du dataTable Produits dans la variable table
DataTable table = mydataset.Tables["Produits"];
// Affichage du contenu du DataTable Produits sur la console
foreach (DataRow row in table.Rows)
{ foreach (DataColumn col in table.Columns)
{ Console.WriteLine("{0} = {1}", col.ColumnName, row[col]); }
Console.WriteLine("============================");
Rania Yangui EDBD 54
Remplir un DataSet à partir d’une BD
 Exemple 2:
string sql1 = "Select * from Produits";
DataTable table = new DataTable("Produits");
OleDbDataAdapter ProductAdapter = new OleDbDataAdapter(sql1, conn);
DataSet mydataset = new DataSet();
ProductAdapter.Fill(table);
mydataset.Tables.Add(table);

Rania Yangui EDBD 55


Travailler avec les données du DataSet
 Chaque DataTable contient une collection de DataRow qui sont
les différents enregistrements de la table
 Plusieurs opérations sont possibles :
 Parcourir les données

 Insertion de données

 Modification des données

 Suppression des données

Rania Yangui EDBD 56


Parcourir les données d’un DataSet
 Deux modes de parcours existent :
 Parcours linéaire qui permet d’accéder aux enregistrements

d’une seule table via leur indice selon un accès direct


Exemple:

Rania Yangui EDBD 57


Parcourir les données d’un DataSet
 Deux modes de parcours existent :
 Parcours hiérarchique permettant d’utiliser les relations

mises en place entre les tables d’un DataSet

Rania Yangui EDBD 58


Insertion des données dans une DataSet
 Pour insérer un nouvel enregistrement, on doit :
 Créer un objet DataRow à partir du DataTable

 Configurer les valeurs des différentes colonnes

 Ajouter le DataRow au DataTable

 Exemple
private static void InsertOrders(DataTable table)
{ // Add one row once.
DataRow row1 = table.New Row();
row1[0] = "00001";
row1[1] = "Ferrero Rocher";
row1[2] = "G";
table.Rows.Add(row1); }

Rania Yangui EDBD 59


Modification des données dans une DataSet
 La modification de données est possible en modifiant la collection Rows
de l’objet DataTable.
 La modification se fait en trois étapes :

 Appel de la méthode « BeginEdit » sur l’objet DataRow qui permet

de commencer une opération de modification


 Modification des données

 Appel de la méthode « EndEdit » pour valider les modifications ou

de la méthode « CancelEdit » pour les annuler


 Exemple

table.Rows[0].BeginEdit();
table.Rows[0][1] = "K richene";
table.Rows[0][2] = "Monsieur";
table.Rows[0][3] = false;
table.Rows[0].EndEdit();

Rania Yangui EDBD 60


Exporter les données d’un DataSet vers une
BD
 L’exportation des données d’un DataSet vers une BD se fait également à
l’aide d’un objet DataAdapter et d’un objet CommandBuilder
 La création d’un objet CommandBuilder se fait par instanciation de la
classe OleDbCommandBuilder
 La méthode update de l’objet DataAdapter permet d’exporter les
données du dataSet vers la Base de données

Rania Yangui EDBD 61


Exporter les données d’un DataSet vers une BD
 Exemple:
OleDbCommandBuilder builder = new
OleDbCommandBuilder(ProductAdapter);
DataRow row1 = table.NewRow();
row1["Code_client"] = "C2456";
row1["Nom_client"] = "Ahmed Dammak";
row1["Statut"] = "Monsieur";
row1["Marie"] = true;
row1["Adresse"] = "18, rue des grecs";
row1["CP"] = "2020";
row1["Ville_client"] = "Tunis";
table.Rows.Add(row1);
ProductAdapter .Update(mydataset, table.TableName);

Rania Yangui EDBD 62


Rania Yangui EDBD 63

Vous aimerez peut-être aussi