• Aucun résultat trouvé

[PDF] Support de cours accès aux données en VB.Net | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Support de cours accès aux données en VB.Net | Cours informatique"

Copied!
22
0
0

Texte intégral

(1)

ADO.NET

ADO.NET. Permet d’accéder aux bases de données à partir de VB.NET. ADO veut dire Activex Database Objet .

C'est la couche d'accès aux bases de données, le SGBD (Système de Gestion de Base de Données) de VB.

ADO.NET à un langage unique pour ouvrir, interroger, modifier plusieurs types de bases de données.

Le langage de requête est le SQL.

Généralités

Activex Database Objet

En VB il y a 2 manières d'écrire un programme qui utilise une base de données:

- Écrire du code pour créer des objets Ado.net, pour ouvrir la base, pour créer la liaison entre la base et un DataSet avec des critères de sélection écrits en SQL.

- Utiliser l’assistant de configuration de source de base de données qui crée les objets et le code à votre place. On peut même lier une table à une liste par exemple qui sera 'remplie' automatiquement par la table (On parle de Binding).

(2)

ADO.NET

Les Managed Providers

Pour avoir accès aux données il faut charger les DRIVERS (ou providers).

OLE DB Managed Provider est fourni dans 'System'; après avoir importé le

NameSpace

System.Data.OLEDB, on peut travailler sur des bases

Access

par

exemple.

SQL Server Managed Provider est fourni dans 'System'; après avoir importé le

80

SQL Server Managed Provider est fourni dans 'System'; après avoir importé le

NameSpace

System.Data.SqlClient,

on peut travailler sur des bases

SqlServer

.

Exemple, pour travailler sur une base Access, il faudra taper:

Imports System.Data.OLEDB

(3)

ADO.NET

Les Objets ADO.NET

Il faut disposer d'un objet Connexion pour avoir accès à la base de données

• On met dans la propriété ConnectionString les paramètres de la base de données (nom de la base de

données, chemin, mot de passe..).

• En fonction de la BD les paramètres sont différents.

Avec la méthode Open on ouvre la base.

Avec la méthodes Close on ferme la base. On peut ensuite travailler de 2 manières:

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

Avec un objet Command on peut manipuler directement la BD (en SQL avec UPDATE, INSERT, DELETE CREATE DROP..), on utilise la propriété ExecuteNonQuery pour cela.

(4)

ADO.NET

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

Avec un objet DataReader on extrait les données en lecture seule: une requête SQL (sur un objet

command) charge le DataReader. c'est rapide; 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: une requête SQL (sur un objet command) 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

82

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.

Noter bien le sens des flèches:

le DataReader est en lecture seule, les données lues

dans la BD sont accessibles dans le DataReader.

le DataSet peut lire et écrire des données dans la BD, il faut un DataAdapter en plus de la connexion.

(5)

ADO.NET

Ce schéma souligne aussi les objets intermédiaires nécessaires: • Un objet connexion dans tous les cas,

Un objet Command pour le DataReader,

Un objet DataAdapter plus un objet Command pour le DataSet .

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.

Enfin 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.

Mode connecté ou déconnecté:

Le DataReader fonctionne en mode connecté. La connexion entre la BD et le DataReader est

ouverte tant que le DataReader fonctionne.

Le DataSet peut travailler en mode déconnecté: on ouvre la connexion, on charge le DataSet, on

ferme la connexion (il faut le faire, ce n'est pas automatique), on travaille sur le DataSet, on peut le réouvrir plus tard pour les mises à jour.

(6)

ADO.NET

Remarque: En fonction du provider, le nom des objets change:

•Avec le provider OleDb, après Imports System.Data.OleDb

on utilisera OleDbConnexion, OleDbAdapter...

•Avec le provider SQL, après Imports System.Data.SqlClient

on utilisera SqlConnexion, SqlAdapter...

Le DataReader

84

Le DataReader

Le DataReader permet donc de lire très rapidement une table, enregistrement par enregistrement, du début à la fin. Il n'y a pas possibilité d'écrire dans la base.

Le DataSet

Le DataSet a la structure d'une base de données mais en local; il contient: Des DataTable qui contiennent des DataRowet des DataColumn.

Pour utiliser DataSet, DataTable, DataRow.. il faut importer l'espace de nom Data: Imports System.Data

(7)

ADO.NET

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.

Une requête SQL charge le DataSet, on travaille sur les lignes et colonnes du DataSet en local ( sur des enregistrements ou des champs), 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 (DataTable) de 2 colonnes avec les données extraites.

DataSet aura une table (DataTable) de 2 colonnes avec les données extraites. Exemple :

Avec ADO.NET je lance une requête SQL demandant toutes les fiches de la table 'nom' dont le champ 'prénom' est ‘Mohamed', je récupère un DataSet local contenant toutes les fiches (Le DataColumn "Prénom" ne contient que des ‘Mohamed'). Je peux modifier en local le DataSet, (modifier une date de naissance par exemple) et mettre à jour automatiquement la base de données distante.

Il existe aussi les DataView qui représentent une vue d'un DataTable. (Un DataView peut contenir un champ d'une table d'un DataSet, ou les enregistrements répondant à un critère).

(8)

VB.NET

Exemple

:Etablir une connexion Base Access via VB.net

Code :

Imports System.Data.OleDb Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Module1.connexion() End Sub

86

End Sub End Class Code : Imports System.Data.OleDb Module Module1

Public Sub connexion()

Dim cn As New

OleDb.OleDbConnection

cn = New OleDb.OleDbConnection("provider=Microsoft.jet.oledb.4.0; data source=mabase.mdb") End Sub

(9)

Exemple complet

Me

Le mot clé Me permet de faire référence à l'instance spécifique d'une classe ou d'une structure dans laquelle le code s'exécute actuellement. Me se comporte comme une variable objet ou une variable structure faisant référence à l'instance actuelle. L'utilisation de Me est particulièrement utile pour le passage des informations concernant l'instance d'une classe ou d'une structure en cours d'exécution, à une procédure se trouvant dans une autre classe, une autre structure ou un autre module.

Focus() Lorsqu'une fenêtre ou un contrôle est actif on dit qu'il a le focus. Un contrôle qui a le focus est celui qui reçoit les évènements clavier, souris..

Comment donner le focus à un contrôle ?

Avec la méthode Focus. TxtNom.Focus()

TxtNom.Focus()

Me.txtnom.Focus()

Nothing : C’est le mot clef en VB pour null. Exemple: Vérifier si un objet est null en VB.Net, If (items is Nothing) Then

'do stuff End If

Update() 'mise à jour des données du dataAdapter(dta)à partir du commandbuilder (cmdb)

dta.Update(dts, "table " )

(10)

Exemple complet

Met à jour la base après modification du DataSet

(11)

Exemple complet

Private SubForm1_Load(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handles MyBase.Load

'ouverture de la connection(à partir du répertoire de l'application)

conn = "provider = microsoft.jet.oledb.4.0 ; data source = "& Application.StartupPath & "\employés2.mdb;"

cnx = NewOleDbConnection cnx.ConnectionString = conn cnx.Open()

sql = "select temployés2.* from temployés2"

cmd = New OleDbCommand(sql) dta = NewOleDbDataAdapter(cmd) cmd.Connection() = cnx

'chargement du DataSet à partir du DataAdapter

dta.Fill(dts, "temployés2")

'chargement de la DataTable à partir du DataSet

dtt = dts.Tables("temployés2")

89

dtt = dts.Tables("temployés2")

'si la table est vide alors If dtt.Rows.Count= 0 Then

'désactivation des boutons pour éviter une erreur si la table est vide

btnajou.Enabled = False

btnenr.Enabled = True Me.Show()

Me.txtnom.Focus()

Else

'affichage des données dans les textbox

Me.txtref.Text = dtt.Rows(rownum).Item("numemployé")

Me.txtnom.Text = dtt.Rows(rownum).Item("nom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("prénom")

Me.txtjob.Text = dtt.Rows(rownum).Item("emploi") btnenr.Enabled = False

(12)

Exemple complet

Private Sub Form1_Closed(ByValsenderAs Object, ByValeAsSystem.EventArgs)Handles MyBase.Closed dts.Clear()

cnx.Close() cnx =Nothing End Sub

Private Sub btnprec_Click(ByValsender As System.Object, ByVale As System.EventArgs) Handles btnprec.Click

'si début du fichier ou table vide message: sortie de procédure Ifrownum = 0 Or rownum > dtt.Rows.Count - 1 Then

90

Ifrownum = 0 Or rownum > dtt.Rows.Count - 1 Then

MessageBox.Show("Vous êtes sur le premier enregistrement ou la table ne contient aucun enregistrement !",

"Info...", MessageBoxButtons.OK, MessageBoxIcon.Information)

Exit Sub End If

'aller à la ligne précédente

rownum -= 1

'affichage des données dans les textbox

Me.txtref.Text = dtt.Rows(rownum).Item("numemployé")

Me.txtnom.Text = dtt.Rows(rownum).Item("nom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("prénom")

Me.txtjob.Text = dtt.Rows(rownum).Item("emploi")

(13)

Exemple complet

Private Sub btnsui_Click(ByValsender As System.Object, ByVale As System.EventArgs) Handles btnsui.Click

'si fin du fichier ou table vide message:sortie de procédure

Ifrownum = dtt.Rows.Count - 1 Orrownum > dtt.Rows.Count - 1 Then

MessageBox.Show("Vous êtes sur le dernier enregistrement ou la table ne contient aucun enregistrement !",

"Info...", MessageBoxButtons.OK, MessageBoxIcon.Information)

Exit Sub End If

'aller à la ligne suivante 'aller à la ligne suivante

rownum += 1

'affichage des données dans les texbox

Me.txtref.Text = dtt.Rows(rownum).Item("numemployé")

Me.txtnom.Text = dtt.Rows(rownum).Item("nom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("prénom")

Me.txtjob.Text = dtt.Rows(rownum).Item("emploi")

(14)

Exemple complet

Private Subbtnajou_Click(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handlesbtnajou.Click

Ifbtnajou.Text = "Ajouter"Then

'désactivation des boutons de déplacement

btnprec.Enabled = False 'précédent

btnsui.Enabled = False 'suivant 'activation du bouton valider

btnenr.Enabled = True

'vider les textbox

Me.txtref.Text = ""

Me.txtnom.Text = ""

Me.txtprenom.Text = ""

Me.txtjob.Text = ""

'changement du texte du bouton pour l'annulation de la procédure

Me.btnajou.Text = "Annuler"

Else

'si btnajou.text = "Annuler" alors annulation de la procédure d'ajout (pas l'ajout!!) si la table est vide désactivation des boutons

Ifrownum > dtt.Rows.Count - 1 Then

92

Ifrownum > dtt.Rows.Count - 1 Then

btnenr.Enabled = False

btnajou.Text = "Ajouter"

Else

'aller au début du fichier

rownum = 0

'affichage des données dans les textbox

Me.txtref.Text = dtt.Rows(rownum).Item("numemployé")

Me.txtnom.Text = dtt.Rows(rownum).Item("nom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("prénom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("emploi") btnenr.Enabled = False

btnajou.Text = "Ajouter"

'activation des boutons de déplacement

btnprec.Enabled = True 'précédent

btnsui.Enabled = True 'suivant

End If End If End Sub

(15)

Exemple complet

Private Subbtnenr_Click(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handlesbtnenr.Click

'si un champ n'est pas rempli fin de procédure

If Me.txtnom.Text = ""Or_

Me.txtprenom.Text = ""Or_

Me.txtjob.Text = ""Then

MessageBox.Show("Vous devez remplir tous les champs !", "Erreur...", MessageBoxButtons.OK, MessageBoxIcon.Error)

Me.txtnom.Focus()

Exit Sub End If

'création d'une nouvelle ligne avec les données des textbox

dtr = dts.Tables("temployés2").NewRow dtr("nom") = Me.txtnom.Text

dtr("prénom") = Me.txtprenom.Text dtr("emploi") = Me.txtjob.Text

'ajout de la ligne dans le DataSet

dts.Tables("temployés2").Rows.Add(dtr)

'création et exécution du commandbuilder pour mettre à jour le DataAdapter

cmdb = NewOleDbCommandBuilder(dta)

'mise à jour des données du DataAdapter à partir du commandbuilder 'mise à jour des données du DataAdapter à partir du commandbuilder

dta.Update(dts, "temployés2")

'on vide le dataset pour le recréer avec les nouvelles données

dts.Clear()

dta.Fill(dts, "temployés2") dtt = dts.Tables("temployés2")

'aller au début du fichier

rownum = 0

'affichage des données dans les texbox

Me.txtref.Text = dtt.Rows(rownum).Item("numemployé")

Me.txtnom.Text = dtt.Rows(rownum).Item("nom")

Me.txtprenom.Text = dtt.Rows(rownum).Item("prénom")

Me.txtjob.Text = dtt.Rows(rownum).Item("emploi")

'activation des boutons

btnprec.Enabled = True 'précédent

btnsui.Enabled = True 'suivant

btnajou.Enabled = True

btnenr.Enabled = False 'valider

btnajou.Text = "Ajouter"

(16)

Exercices d’application

Exercice 1: Ecrire un programme VB.net permettant

d’ajouter le contenu d’une zone de saisie à une zone

de texte multi lignes

(17)

Exercices d’application

Exercice 3:

Ecrire un programme VB.net

permettant de calculer l’IMC

(indice de la

masse corporelle)

(18)

Exercices d’application

Exercice 1: Ecrire un programme VB.net permettant d’ajouter le

contenu d’une zone de saisie à une zone de texte multi lignes

Exercice 3: Ecrire un programme VB.net permettant de calculer l’IMC

(indice de la masse corporelle)

96

Exercice 2: Ecrire un programme VB.net permettant d’afficher le

(19)

Exemple complet

Exercices d’application

txtMultilignes

btnAjouter

Public Class

Form1

' évt btnAjouter_Click

Private Sub

btnAjouter_Click1(

ByVal

sender

As Object

,

ByVal

e

As

System.EventArgs) _

Handles

btnAjouter.Click

' ajout du contenu de txtAjout à celui de txtMultilignes

txtMultilignes.Text &= txtAjout.Text

txtAjout.Text =

""

End Sub

End Class

(20)

Exemple complet

Public Class Form1

' clic sur btn quitter

Private Sub cmdQuitter_Click(ByVal sender As Object, ByVal e As System.EventArgs) _

Handles cmdQuitter.Click

' clic sur bouton Quitter - on quitte l'application

Application.Exit()

End Sub

' modification champ txtSaisie

Private Sub txtSaisie_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _

Handles txtSaisie.TextChanged

' le contenu du TextBox a changé - on le copie dans le Label lblControle lblControle.Text = txtSaisie.Text

End Sub

' clic sur btn effacer

Private Sub cmdEffacer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Exercices d’application

98

Private Sub cmdEffacer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _

Handles cmdEffacer.Click

' on efface le contenu de la boîte de saisie txtSaisie.Text = ""

End Sub End Class

(21)

Exemple complet

Private Sub Form1_Load(ByValsender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBoxTaille.Text = "" Exercices d’application TextBoxTaille.Text = "" TextBoxPoids.Text = "" labelImc.Text = "" labelPi.Text = "" labelM.Text = "" labelS.Text = "" labelO.Text = "" End Sub

Private Sub Quitter_Click(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handles

Quitter.Click

Me.Close()

(22)

Exemple complet

Private SubButton1_Click_1(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) HandlesButton1.Click

DimsPoidsAs Single 'Variable Single contenant le poids

DimsTailleAs Single'Variable Single contenant la taille

'******contrôle de validité des entrées************ 'Les valeurs saisies sont-elles numérique?

If Not(IsNumeric(TextBoxTaille.Text)) Then

MsgBox("Entrez une valeur numérique pour la taille")

Exit Sub End If

If Not(IsNumeric(TextBoxPoids.Text)) Then

MsgBox("Entrez une valeur numérique pour le poids")

Exit Sub End If

'Convertir les textes saisis en single ' et les mettre dans les variables

sTaille = CType(TextBoxTaille.Text, Single) / 100 sPoids = CType(TextBoxPoids.Text, Single)

'Les valeurs saisies sont-elles cohérentes? Exercices d’application

100

'Les valeurs saisies sont-elles cohérentes?

IfsTaille < 0.5 OrsTaille > 2.5 Then

MsgBox("Entrez une taille valide")

Exit Sub End If

IfsPoids < 20 OrsPoids > 200 Then

MsgBox("Entrez un poids valide")

Exit Sub End If

'Effectuer les calculs et afficher les résultats.

labelImc.Text = (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString labelPi.Text = (Math.Round(22 * (sTaille * sTaille), 2)).ToString labelM.Text = (Math.Round(18.5 * (sTaille * sTaille), 2)).ToString labelS.Text = (Math.Round(25 * (sTaille * sTaille), 2)).ToString labelO.Text = (Math.Round(30 * (sTaille * sTaille), 2)).ToString

End Sub

Références

Documents relatifs

L’ensemble des établissements que nous avons visités et fréquentés au cours de cette recherche affichaient la même réglementation à l’égard de la pratique de la

2) Fast cooling strategies: In the literature, the research on resource allocation using Gibbs sampling methods only focused on the classical logarithmic cooling strategy.. Under

The experimental data indicates that the composite laminates with higher crystalline content (cooled slowly and in air, respectively) display lower loss modulus, suggesting that

Then, in Section III, we propose the main stability results for a general class of impulsive systems with several aperiodic and asynchronous sequences of impulses and derive

In this resource paper, we describe the new YAGO version, YAGO 4, which aims to combine the best of the two worlds: It collects the facts about instances from Wikidata, but it

Fig. 7: An Example of non-declared sponsored post: 1) A verified Mega influencer holding a box on her hand and promoting products. 2) The product page is tagged in the photo

La fouille a cepen- dant permis d’identifier nettement au moins quatre objets en argile crue distincts au sein de cette couche de destruction : deux grandes urnes sur pied 9 et

In mission mode, the digital logic of the system controls the PUF avoiding to expose brute data from the PUF to rest of the system. During Enrollment, one should set the PUF