CoursDocuments

Accès au donnée en C#

1- ADO.NET (Activex Database Object)(1) 

Présentation Initialement chaque type de gestionnaire de base de données avait ses instructions, sa manière de fonctionner → ADO.NET a un langage unique pour ouvrir, interroger, modifier une base de données quelle que soit la base de données (langage de requête SQL) ADO.NET est indépendant de la base de donnée 

Pour avoir accès à partir de C# aux bases de données il faut: 

  • Utiliser ADO.NET. 
  • Charger les DRIVERS (ou PROVIDERS) 

-VI Accès aux données en C# 

05/05/2016 

VI 

1- ADO.NET (Activex Database Object)(2) 

Les Managed Providers Chaque fournisseur de données permet la communication avec un type de base de données à travers une API. 

  • OLE DB Managed Provider est fourni dans ‘System’; après avoir importé le NameSpace System.Data.OLEDB, on peut travailler sur des bases Access. 
  • SQL Server Managed Provider est fourni dans ‘System’; après avoir importé le NameSpace System.Data.SqlClient, on peut travailler sur des bases SqlServeur. 
  • Un composant ODBC et un composant ORACLE sont disponibles sur le site MSDN , il faudra charger la référence de la Dll puis le NameSpace. 

VI- L’ Accès aux données en C# 

  1. ADO.NET 
  2. Utilisation du DataReader 

05/05/2016 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

ACCÈS AU DONNÉES EN C#

  1. Utilisation du DataSet 
  2. Remplissage de contrôles avec des 

données d’une BD 

05/05/2016

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(3) 

1- ADO.NET (Activex Database Object)(4) 

05/05/2016

05/05/2016

On envoie une requête Sql ‘SELECT’ à la base , on récupère le résultat dans un objet. 

On manipule directement la base. (sans retour de résultats) 

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(5) 

1- ADO.NET (Activex Database Object)(6) 

Communication des Objets ADO.NET 

05/05/2016

05/05/2016

Toutes les classes permettant d’utiliser ces fournisseurs se trouvent dans l’espace de nom System.Data Exemple 

Pour travailler sur une base Access, il faudra taper: using System.Data.OLEDB 

Les Objets ADO.NET Pourdialogueravec la base de données, tous ces fournisseurs imp lémententsix classes de base: 

05/05/2016

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(7) 

1- ADO.NET (Activex Database Object)(8) 

05/05/2016

05/05/2016

Avec un objet DataReaderon extrait les données en lecture seule. Une requête SQL charge le DataReader (à travers un objet command). On peut lire uniquement les données et aller à l’enregistrement suivant. Il travaille en mode connecté. Pour gérer un DataReader on a besoin d’un objet Command. 

Avec un objet DataSet on manipule les données: (à travers un objet command), une requête SQL charge le DataSet avec des enregistrements ou des champs, on travaille sur les lignes et colonnes du DataSet en local, en mode déconnecté (une fois que le DataSet est chargé, la connexion à la base de données est libérée). Pour alimenter un DataSet on a besoin d’un objet DataAdapter qui fait l’intermédiaire entre la BD et le DataSet. 

  • Pour avoir accès à la base de données, il faut disposer d’un objet Connexion. 
  • Dans la propriété ConnectionString, on met les paramètres de la base de données (nom de la base de données, chemin, mot de passe..) 
  • Par exemple: ‘Provider=’indiquant le moteur de BD et ‘Data source=’ indiquant le chemin et le nom de la BD. Il peut être nécessaire de donner aussi ‘Password=’ le mot de passe , ‘User ID=’ Admin pour l’administrateur par exemple. 
  • Ces paramètres sont différents selon la BD,un site nommé ConnetionStrings.comdonne une mine de renseignements pour écrire les paramètres pour une BD. 
  • Il faut mettre ces paramètres avec le constructeur, ou dans la propriété ConnectionString. 
  • L’objet Command permet d’envoyer des ordres en SQL à la BD et de la modifier, il permet aussi, quand on utilise un DataSet, d’envoyer une requête SELECT en SQL afin de remplir le DataSet avec le résultat de la requête. 
  • Certains contrôles comme les DataGrid, les ListBox par exemple peuvent afficher des données à partir d’un DataSet. 
  • Pour mettre à jour la base après modification du DataSet ou de la Grid il faut un objet CommandBuilder

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(9) 

Communication des Objets ADO.NET (2) 

L’objet Connection (2) 

Propriétés et méthodes importantes pour l’objet Connexion: 

1- ADO.NET (Activex Database Object)(10) 

L’objet Connection (1) 

L’objet Command (1) 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(11) 

1- ADO.NET (Activex Database Object)(13) 

L’objet Command (2) 

Remarque 

En fonction du provider, le nom des objets change: 

  • Avec le provider OleDb, après using System.Data.OleDb, on utilisera OleDbConnexion, OleDbAdapter… 
  • Avec le provider SQL, après using System.Data.SqlClient, on utilisera SqlConnexion, SqlAdapter… 

1- ADO.NET (Activex Database Object)(12) 

1- ADO.NET (Activex Database Object)(14) 

L’objet Command (3) 

Le mode connecté et le mode déconnecté(1) 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

1- ADO.NET (Activex Database Object)(15) 

2- Utilisation du DataReader(1) 

05/05/2016

05/05/2016

Pour chaque provider il y a un objet ‘DataReader’ spécifique: SqlDataReader, OleDbDataReader 

Soit la base Access nommée ‘base.accdb‘ qui contient une table ‘Fournisseur‘. Dans cette table existe un champ ‘NomFournisseur‘. On veux récupérer tous les noms et les afficher rapidement dans une ListBox. 1. Il faut importer les NameSpaces nécessaires. using System.Data using System.Data.OleDb 2. Il faut créer un objet connexion et donner les paramètres Provider= et Data source= (Dans le cas d’une base Access 2007 et plus, le provider (le moteur à utiliser) est le moteur OLEDB ace 12).) 

OleDbConnection cn = New OleDbConnection(« Provider= Microsoft.ace.OLEDB.12.0;Data source=C:\\base.accdb »); 

05/05/2016

05/05/2016

2- Utilisation du DataReader(2) 

Le mode connecté et le mode déconnecté(2) 

2- Utilisation du DataReader(3) 

Démarche 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

L’objet DataReader 

Exemple(1): 

  • Le DataReader permet donc de lire très rapidement une table, enregistrement par enregistrement, du début à la fin: la seule possibilité est de se déplacer en avant. 
  • En contrepartie de sa rapidité il monopolise la connexion. 
  • Il faut créer un objet Connexion puis un objet Command, 
  • ensuite on exécute la propriété ExecuteReaderpour créer l’objet DataReader; 
  • enfin on parcourt les enregistrements avec la méthode Read. 

05/05/2016

05/05/2016

2- Utilisation du DataReader(4) 

2- Utilisation du DataReader(76) 

Suite de l’exemple(2): 

Le même exemple complet 

3.Il faut créer un objet Command: 

OleDbCommand cmd= cn.CreateCommand(); 4.Il faut donner dans la propriété CommandText la requête SQL permettant d’extraire ce que l’on désire. cmd.CommandText = « SELECT nomFournisseur FROM Fournisseur » ; 5.Il faut ouvrir la connexion: cn.Open() ; 6.Il faut créer un objet DataReader: OleDbDataReader dRead = cmd.ExecuteReader(); 7.On crée une boucle permettant de lire les enregistrements les uns après les autres, on récupère le premier champ d’indice 0 qui est une String, on la met dans la ListBox While( dRead.Read()) ListBox1.Items.Add(dRead.GetString(0)); 

BD Access BD Sql Server 

Avec ExecuteSNonQueryde l’objet Command, on peut exécuter des requêtes Sql qui ne retournent pas de résultat comme une requête d’insertion, de suppression ou de mise à jour. 

Exemple: Insertion d’un nouveau fournisseur: 

OleDbConnection cn=new OleDbConnection(); OleDbComand cmd=cn.CreateCommand(); 

cmd.CommandText = “insert into Fournisseur values (1,’Ali’,’Salah’,Bizerte’,’721458584’)”; 

cn.Open(); 

cmd.ExecuteNonQuery(); 

2- Utilisation du DataReader(5) 

3- Autres utilisations de l’objet Commande 

Suite de l’exemple (3): 

ExecuteNonQuery 

Remarquons que le champ récupéré est récupéré typé (ici une string grâce à GetString); il y a d’autres types: GetDateTime, GetDouble, GetGuid, GetInt32, GetBoolean, GetChar, GetFloat, GetByte, GetDecimal etc..; il est possible de récupérer sans typage: on aurait écrit myReader(0) ou utiliser GetValue (on récupère un objet). Read( ) avance la lecture des données à l’enregistrement suivant , il retourne True s’il y a encore des enregistrements et False quand il est en fin de fichier; cela est utilisé pour sortir de la boucle while. 

8.On ferme pour ne pas monopoliser. dRead.Close(); cn.Close(); 

05/05/2016

3- Autres utilisations de l’objet Commande 

4- Utilisation des exceptions 

05/05/2016

05/05/2016

int Resultat =(int) cmd.ExecuteScalar(); 

}Catch (OleDbException ex){ 

MessageBox.show(ex.Message); 

MyConnexion.Close(); 

05/05/2016

05/05/2016

5- Utilisation du DataSet(1) 

Compter ou faire du calcul 

Présentation 

Avec ExecuteScalarde 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) ou SUM (somme) 

Exemple: compter le nombre de fournisseurs: 

cmd.CommandText = « SELECT COUNT(*) FROM FOURNISSEUR »; 

cn.Open(); 

Le DataSet a la structure d’une base de données mais en local; il contient des DataTable qui contiennent des DataRow et des DataColumn. 

Pour utiliser DataSet, DataTable, DataRow.., il faut importer l’espace de nom Data: using System.Data On peut créer un Dataset de toutes pièces, mais la plupart du temps, on charge le DataSet à partir d’une base de données. 

5- Utilisation du DataSet(2) 

Une requête SQL charge le DataSet, on travaille sur les lignes et colonnes du DataSet en local et en mode déconnecté (une fois que le DataSet est chargé, la connexion à la base de données peut être libérée). 

La structure de données du DataSet reflétera automatiquement et exactement celle des données extraites. Si j’extrais 2 colonnes de données avec l’instruction Sql fournis à l’objet Command, le DataSet aura une table de 2 colonnes avec les données extraites. 

Exceptions 

Présentation 

Chaque SGDB a des erreurs spécifiques. Pour les détecter , 

Il faut utiliser les types d’erreurs spécifiques: SqlExceptionet OleDbExceptionpar exemple: 

Exemple d’interception d’erreur: 

Try{cn.Open(); 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

5- Utilisation du DataSet(3) 

5- Utilisation du DataSet(5) 

Eléments du DataSet (2): 

5- Utilisation du DataSet(4) 

5- Utilisation du DataSet(6) 

Eléments du DataSet (3): 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

Pour remplir un DataSet, il faut créer un objet Connexion puis un objet DataAdapter qui par sa propriété Fill charge le DataSet. Les données sont extraites à l’aide de requête SQL sur l’objet Command, et on utilise un CommandBluider pour mettre à jour la base de données à partir du DataSet. 

Un DataSet possède aussi la propriété Constraints qui contient les Constraint (Clé primaire ou clé étrangère), et la propriété Relations qui contient les DataRelations(Relation entre les tables). 

On peut créer des DataTables ‘autonomes’ et y mettre une table provenant d’un dataSet: 

  • Chaque DataTable contient une propriété Columns qui contient les DataColomn (les colonnes ou champs des BD) et une propriété Rows qui contient des DataRow (Les lignes ou enregistrements des BD) 
  • DataColumn contient des informations sur le type du champ. 
  • DataRow permet d’accéder aux données. 

05/05/2016

05/05/2016

05/05/2016

On peut créer des DataView : Vue, représentation d’une table. A partir d’une table, on peut créer plusieurs DataView avec des représentations différentes: DataView trié, DataViewdont les lignes ont été filtrées (RowFilter) 

Enfin une DataTableou un DataView peut être affichés dans un contrôle (DatagridViewpar exemple). 

il y a 2 manières de ‘travailler’: 

  • On utilise les membres du DataSet pour lire ou modifier les données. 
  • On lie le DataSet, une DataTableou un DataView à un contrôle DataGrid ou ListBox..Et tout s’affiche automatiquement. 

Le DataSet est organisé comme une base de données en mémoire, il possède: 

  • Une propriété Tables qui contient des DataTable (Comme les tables d’un BD) 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

Démarche : 

Eléments du DataSet : 

05/05/2016

05/05/2016

5- Utilisation du DataSet(7) 

5- Utilisation du DataSet(9) 

1) Importer l’espace de nom permettant d’utiliser les DataSet et OleDB 

using System.Data; using System.Data.OleDb; 2) Déclarer les objets Ado: 

//Déclaration Objet Connexion private OleDbConnection ObjetConnection ; // Déclaration Objet Commande private OleDbCommand ObjetCommand ; // Déclaration Objet DataAdapter private OleDbDataAdapter ObjetDataAdapter

Exemple illustratif: 

Soit une base de données Access nommée ‘Nom.mdb‘: table : FichePatientavec les champs (‘Nom’, ‘Prenom). On veut se connecter à cette base, extraire les enregistrements de la table ‘FichePatient’ et les mettre dans un DataSet. Chaque ligne du DataSetcontient un patient. 

3 ) Ouverture //Initialisation de la chaîne de paramètres pour la connexion strConn = « Provider=Microsoft.Jet.OLEDB.4.0; » + « Data Source= c:\nom.mdb »; 

//Initialisation de la chaîne contenant l’instruction SQL strSql = « SELECT FICHEPATIENT.* FROM FICHEPATIENT“; 

//Instanciation d’un Objet Connexion ObjetConnection = New OleDbConnection(); 

//Donner à la propriété ConnectionString les paramètres de connexion ObjetConnection.ConnectionString = strConn; 

//Ouvrir la connexion ObjetConnection.Open(); 

5- Utilisation du DataSet(8) 

5- Utilisation du DataSet(10) 

4 ) Initialisation et chargement du DataSet //Instancier un objet Commande ObjetCommand = New OleDbCommand(strSql); //Instancier un objet Adapter ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand); //initialiser l’objet Command ObjetCommand.Connection= ObjetConnection; //A l’aide de la propriété Fill du DataAdaptercharger le DataSet ObjetDataAdapter.Fill(ObjetDataSet, « FICHEPATIENT »); //Mettre dans un Objet DataTableune table du DataSet ObjetDataTable = ObjetDataSet.Tables[« FICHEPATIENT »]; 

Remarque En réalité, il est indispensable d’user de Try Catch pour capter les exceptions surtout pour ObjetConnection.Open() et pour update. 

2) Déclarer les objets Ado(suite): 

//Déclaration Objet DataSet private DataSet ObjetDataSet = New DataSet(); //String contenant la ‘Requête SQL’ private string strSql; // Déclaration Objet DataTable private DataTable ObjetDataTable; // Déclaration Objet DataRow (ligne) private DataRow ObjetDataRow; //Numéro de la ligne en cours private int RowNumber ; //Paramêtres de connexion à la DB private string strConn; /*Pour recompiler les données modifiées avant de les remettre dans 

//Déclaration Objet DataSet private DataSet ObjetDataSet = New DataSet(); //String contenant la ‘Requête SQL’ private string strSql; // Déclaration Objet DataTable private DataTable ObjetDataTable; // Déclaration Objet DataRow (ligne) private DataRow ObjetDataRow; //Numéro de la ligne en cours private int RowNumber ; //Paramêtres de connexion à la DB private string strConn; /*Pour recompiler les données modifiées avant de les remettre dans 

le « DataAdapter« */ private OleDbCommandBuilder ObjetCommandBuilder ; 

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

05/05/2016

5- Utilisation du DataSet(11) 

5- Utilisation du DataSet(13) 

5 ) Voir un enregistrement 

Pour afficher les noms et prénom des patients: ‘TXTNom’ et 

‘TXTPrenom’ RowNumber: contient le numéro de la ligne en cours (allant de 0 à 

Rows.Count-1) //Mettre dans un Objet DataTable une table du DataSet 

ObjetDataTable = ObjetDataSet.Tables[« FICHEPATIENT »]; If (RowNumber < 0) return; //Lors de l’ouverture de la BD, s’il n’y a aucun enregistrement If (RowNumber > ObjetDataTable.Rows.Count – 1) 

return; //ObjetTable.Rows[Numéro ]de lignes.Item[Nom de colonne]donne le 

contenu d’un champ dans une ligne donnée TXTNom.Text = 

(ObjetDataTable.Rows[RowNumber][« Nom »]).ToString(); TXTPrenom.Text = 

(ObjetDataTable.Rows[RowNumber][« Prenom »]).ToString(); //Item peut avoir en paramètre le nom de la colonne ou sont index 

7 ) Modification d’un enregistrement: //Extraire l’enregistrement courant ObjetDataRow = ObjetDataSet.Tables[« FICHEPATIENT »].Rows[RowNumber]; 

//On vide le DataSetet on le ‘recharge’ de nouveau. ObjetDataSet.Clear(); ObjetDataAdapter.Fill(ObjetDataSet, « FICHEPATIENT »); ObjetDataTable = ObjetDataSet.Tables[« FICHEPATIENT »]; 

5- Utilisation du DataSet(12) 

5- Utilisation du DataSet(14) 

6 ) Déplacement 

Pour voir la ligne suivante par exemple RowNumber ++; //on incrémente le numéro de la ligne en cours 

// puis on affiche RowNumber –; //pour la précédente. RowNumber = 0; //pour la première. RowNumber = ObjetDataTable.Rows.Count – 1;//pour la dernière. 

Remarque : Il n’y a pas d’enregistrement courant, pas de pointeur sur un 

enregistrement, c’est vous même qui gérez RowNumberune simple variable qui contient le numéro de l’enregistrement (l’index du DataRow) sur lequel vous travaillez. 

7 ) Modifier un enregistrement (suite) Remarque Quand la commande Update est effectuée, si l’enregistrement ne 

Catch

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

05/05/201610 

//Modifier les valeurs des champs en récupérant le contenu des TextBox ObjetDataRow[« Nom »] = TXTNom.Text; ObjetDataRow[« Prenom »] = TXTPrenom.Text; 

répond pas à la spécification de la base telle que: 

  • doublon alors que c’est interdit, 
  • pas de valeur pour une clé primaire, 
  • champ ayant la valeur Null alors que c’est interdit… 

 

//Pour modifier les valeurs changées dans le DataAdapter ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter); //Mise à jour ObjetDataAdapter.Update(ObjetDataSet, « FICHEPATIENT »); 

→Une exception est levée; si nous ne l’avons pas prévue cela 

plante!! → Il faut donc mettre la ligne contenant l’Update dans un Try 

 

5- Utilisation du DataSet(15) 

5- Utilisation du DataSet(17) 

11) Trier, Filtrer, rechercher: 

  • Il existe une méthode Select pour les DataTables mais qui retourne un tableau de DataRowqui répondent au critère de sélection. 

String expression = « NOM=‘Ali’ » ; //’expression à rechercher String sortOrder = « Nom DESC  » ; DataRow []Trouve; //résultat dans des DataRow Trouve = ObjetDataTable.Select(expression, sortOrder); DataTable tab= New DataTable(); tab = ObjetDataTable.clone(); //même structure et non contenu foreach (DataRow r in Trouve) 

tab.ImportRow(r); //copie de r danstab DataGridView1.DataSource = tab 

  • Il existe une méthode compute(expression, filtre) qui réalise expression sur les lignes répondant au filtre spécifique 

Object somme = ObjetDataTable.Compute(« Sum (PRIX) », « Categorie=5 »); On peut aussi utiliser Count() et dans le second paramètre (le filtre)) utiliser des 

And. 

8 ) Ajout d’ un enregistrement 

ObjetDataRow = ObjetDataSet.Tables[« FICHEPATIENT »].NewRow(); ObjetDataRow[« Nom »] = TxtNom.Text; ObjetDataRow[« Prenom »] = TxtPrenom.Text; ObjetDataSet.Tables[« FICHEPATIENT »].Rows.Add(ObjetDataRow); //Pour modifier les valeurs changées dans le DataAdapter ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter); //Mise à jour ObjetDataAdapter.Update(ObjetDataSet, « FICHEPATIENT »); //On vide le DataSetet on le ‘recharge’ de nouveau. ObjetDataSet.Clear(); ObjetDataAdapter.Fill(ObjetDataSet, « FICHEPATIENT »); ObjetDataTable = ObjetDataSet.Tables[« FICHEPATIENT »]; 

5- Utilisation du DataSet(16) 

6- Remplir des contrôles avec un DataSet (1) 

On peut remplir un DataGridViewou une ListBox avec un DataSet: 

DataTable matable; matable = ObjetDataSet.Tables[« FICHEPATIENT »]; DataGridView1.DataSource = matable; 

Remplir une Listbox ligne par ligne 

DataTable matable; matable = ObjetDataSet.Tables[« FICHEPATIENT »]; foreach (DataRow Ligne In Matable.Rows) 

List1.Items.Add(ligne[ » Nom « ]); 

9 ) Effacement de l’enregistrement en cours

ObjetDataSet.Tables[« FICHEPATIENT »].Rows[RowNumber].Delete() ObjetCommandBuilder = New OleDbCommandBuilder(objetDataAdapter) ObjetDataAdapter.Update(objetDataSet, « FICHEPATIENT ») 

10)Fermeture //Objets connectés ObjetConnection = null; ObjetCommand = null; ObjetDataAdapter = null; 

//Objetsdéconnectés ObjetDataSet = null; ObjetDataTable = null; ObjetDataRow = null; 

6- Remplir des contrôles avec un DataSet (2) 

6- Remplir des contrôles avec un DataSet (3) 

Indiquer quelle colonne afficher ListBox1.DisplayMember = « NOM »; 

Il faut indiquer à la ListBox que la Value de chaque ligne est ‘NumInt’ en utilisant la propriété ListBox1.ValueMember

Quand l’utilisateur clique sur une ligne de la ListBox, cela déclenche l’évènement ListBox1_SelectedIndexChanged, là on récupère la valeur de NumInt correspondant; elle se trouve dans ListBox1.SelectedValue. (C’est un Int32) 

6- Remplir des contrôles avec un DataSet (4) 

6- Remplir des contrôles avec un DataSet (5) 

 

Remplir une ListBoxavec une colonne d’une table d’une BD Exemple: Dans une base de données Accès nommée ‘BaseNom’, j’ai une table ‘NomPatient’ avec plusieurs colonnes, je veux afficher la colonne des noms dans une listBox: 

  1. Durand Luc 1 Mme Dupont Josette 2 M. Thomas Guy 3 

Dans la zone déclaration de la fenêtre: OleDbConnection ObjetConnection; OleDbCommand ObjetCommand; OleDbDataAdapter ObjetDataAdapter; DataSet ObjetDataSet= new DataSet(); String strSql ; DataTable ObjetDataTable; String strConn ; 

strConn = « Provider=Microsoft.Jet.OLEDB.4.0; » + « Data Source= 

05/05/201612 

05/05/201612 

05/05/201612 

On peut utiliser un ‘DataSet’, créer une ‘DataTable‘ et la lier au contrôle. Le DataSetest une représentation en mémoire des données; Une fois chargé on peut travailler en mode déconnecté. Pour le remplir il faut un DataAdapter. 

ObjetCommand.Connection() = ObjetConnection; ObjetDataAdapter.Fill(ObjetDataSet, « FICHEPATIENT »); ObjetDataTable = ObjetDataSet.Tables[« FICHEPATIENT »]; 

Indiquer au ListBox d’afficher la table « fichepatient » (indiquer la 

source) ListBox1.DataSource = ObjetDataSet.Tables[« FICHEPATIENT »]; 

c:\Basenom.mdb; »; strSql = « SELECT FICHEPATIENT.* FROM FICHEPATIENT“; ObjetConnection = New OleDbConnection; ObjetConnection.ConnectionString = strConn; ObjetConnection.Open(); ObjetCommand = New OleDbCommand(strSql); ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand); 

Récupérer la valeur d’un autre champ On a souvent besoin de récupérer le numéro interne (un ID) quand l’utilisateur clique sur un des noms; le numéro interne servira à travailler sur ce patient. 

Exemple: comment récupérer le numéro interne 3 quand l’utilisateur 

clique sur ‘Thomas’? 

 

//Ensuite on peut récupérer sans problème NumInt (et l’afficher par 

exemple dans une TextBox) 

If (ListBox1.SelectedIndex != -1) 

TextBox1.Text = ListBox1.SelectedValue.ToString(); 

On peut filtrer le DataView: dv.RowFilter =  » Prenom = ‘Philippe’  » ; //bien respecter les ‘. et les 

majuscules/minuscules. Le DataView ne contient plus que les rows dont la col = »Philippe ». 

On peut afficher dans une grille. DataGridView1.DataSource = dv; 

On peut rechercher dans le DataViewavec Find: 

DataView dv = New DataView(Mytable); dv.Sort = « CustomerID  » ; //Cherche le customer named « DUPONT » dans la première 

colonne; int i = dv.Find(« DUPONT »); 

FindRows lui retourne des DataRowViews Ensuite on peut lier le DataViewà une DataGridView. 

//On crée un DataView, on y met une table. DataView dv=new DataView(); dv.Table = ObjetDataSet.Tables[« FICHEPATIENT »]; oudv =New DataView(ObjetDataSet.Tables[« FICHEPATIENT »]); //on met une 

table dans le dataview on peut trier le DataView: dv.Sort = « Nom DESC « ; ‘on trie sur le champ Nom en ordre décroissant 

(ASC pour un tri croissant). 

=

Récupérer la valeur d’un autre champ (2) 

ListBox1.DisplayMember = « NOM“; 

ListBox1.ValueMember = « NUMINT » ; 

ListBox1.DataSource = ObjetDataSet.Tables[« FICHEPATIENT »]; 

  • Le DataView est un objet qui ressemble à une table mais qui correspond à une représentation et permet les tris ou l’utilisation d’un filtre: 
  • On peut aussi passer la table dans un DataView et utiliser Find, Sort, RowFilter sur le DataView. 

télécharger gratuitement cours D’Accès au donnée en C# 

Articles similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Bouton retour en haut de la page

Adblock détecté

S'il vous plaît envisager de nous soutenir en désactivant votre bloqueur de publicité