M22 Programare Client/Server
M22 Programare Client/Server
[Link]
Formateur : Driouch Bouazza
Establishment: OFPPT/CFMOTI
18/02/2010 V1.5
[Link]
DRIOUCH B. [Link] 1
Plan
Definiț ie (Generalitate, Arhitectura N-tier)
.Net Framework / [Link]
Conexiune la o bază de date (Conexiune)
Mod conectat (Comandă, Cititor de date)
Mod Deconectat (DataSet, DataAdapter)
Mod Deconectat (DataTable, Relaț ie)
Control utilizator
Utilizarea Procedurii de Stocare ș i Tranzacț ie
Tip de set de date
Prezentare
Multe aplica ț ii func ț ionează după un
mediu client/servitor, aceasta înseamnă că ma ș inile
clienț ii contactent serverul nostru, o maș ină de obicei foarte
puternică în termeni de capacităț i de intrare-ieș ire, care le furnizează
servicii. Aceste servicii sunt programe care furnizează
informaț ii precum ora, fiș iere, o conexiune,…
Serviciile sunt exploatate de programe, numite
programe clienț i, care se execută pe maș inile clienț ilor. Pe
vorbeș ti astfel despre client FTP, client de mesagerie, ..., atunci când se
denumeste un program, care ruleaza pe o masina clienta,
capabil să prelucreze informa ț iile pe care le recuperează de la
server (în cazul clientului FTP este vorba despre fiș iere, în timp ce
pentru clientul de mesagerie se referă la corespondenț a electronică).
DRIOUCH B. [Link] 3
Avantages / Inconvénients
Modelul client/server este în mod special
recomandat pentru reț ele care necesită un mare
nivel de fiabilitate, principalele sale avantaje sunt:
•resurse centralizate
o securitate mai bună
o administra ț ie la nivel de server
•o re ț ea evolutivă
Arhitectura client/servitor are totuș i câteva
lacune printre care:
un cost ridicat
o verigă slabă
DRIOUCH B. [Link] 4
Funcț ionare
Un sistem client/server funcț ionează conform
schemă următoare:
Arhitectură la 2 ș i 3 niveluri
Framework Dotnet
.NET este o platformă completă pentru a dezvolta, a implementa ș i a rula
aplicaț ii Web, Windows, mobile ș i server. Platforma se bazează
despre no ț iunea de framework care este un cadru de lucru care oferă instrumente ș i
specificaț ii necesare pentru a dezvolta ș i a desfăș ura aplicaț ii.
DRIOUCH B. [Link] 8
Componente .Net
CLR (Common Language Runtime): reprezintă maș ina virtuală
de la platformă (un pic ca JVM pentru java). Este responsabil pentru
executarea aplicaț iilor ș i gestionează toate aspectele de securitate: colectarea gunoiului
Colector, gestionarea evenimentelor etc.
Un ansamblu de biblioteci de clase: situat deasupra CLR, această
rubrica oferă un strat pentru gestionarea datelor. Aici găsim
Windows Forms (WinForms), un ansamblu de clase care permite
concepț ia IHM pentru Windows (puț in ca AWT sau Swing).
Adonet (Date ș i xml): o nouă generaț ie de componente de acces la
baze de date
Avem [Link] care oferă un set de clase pentru design.
de site dinamic, crearea de IHM pentru web, WebForms ș i
concepț ia serviciilor web.
În vârful stivei avem limbajele suportate de .NET, cum ar fi C#,
[Link], C++, J# care sunt produse Microsoft ș i altele precum
Cobol, Delphi, etc… ; .NET oferă astfel o alegere de limbaj, spre deosebire de
la concurentul său J2EE.
DRIOUCH B. [Link] nouă
Componente .Net
DRIOUCH B. [Link] 10
[Link]
Ce ne aduce ADO .NET?
O arhitectură mai optimizată: Cu .Net, noi
furnizorii de date văd lumina zilei. De exemplu, .NET
Frameworkul include furnizorul de date SQL Server
.NET în modul nativ prin namespace-ul [Link].
Un suport mai bun pentru modul offline: Astăzi
Microsoft încurajează modul deconectat ș i propune
clase specializate care suportă ambele moduri: conectat (prin
obiectul DataReader) ș i deconectat (prin intermediul obiectului DataSet).
Un suport mai bun pentru XML: XML-ul este folosit în cadrul
Framework .NET ca standard de descriere ș i
persistenț a datelor.
DRIOUCH B. [Link] 11
DRIOUCH B. [Link] 12
Modelul de obiect ADO .NET
DRIOUCH B. [Link] 13
DRIOUCH B. [Link] 14
DRIOUCH B. [Link] 15
Crearea conexiunii
Pentru a muta datele între o bază de date ș i aplicaț ia dumneavoastră,
trebuie să aveț i o conexiune prealabilă la baza de date. Pentru
pentru a crea o conexiune la o bază de date, trebuie să identificaț i numele
server de baze de date, numele bazei de date ș i informaț iile
de conexiune necesare.
În func ț ie de tipul de bază de date la care accesa ț i, dumneavoastră
pute ț i folosi un obiect SqlConnection sau OleDbConnection. Folosi ț i un
obiect SqlConnection pentru conectarea la bazele de date SQL Server
versiunea 7.0 sau ulterioară ș i un obiect OleDbConnection pentru conexiune la
toate celelalte baze de date.
Pentru a crea un obiect SqlConnection, treceț i o ș ir de conexiune care
furnizează parametrii necesari pentru a crea o conexiune la o sursă de
date.
DRIOUCH B. [Link] 16
Crearea conexiunii
Parametrii pentru conexiune
DRIOUCH B. [Link] 17
DRIOUCH B. [Link] 18
Exemple (Command)
Imports System
Imports [Link]
Clasa Publică CommandeSQL
Sub Public Shared Main()
Dim strConnexion As String = "Data Source=localhost; Integrated"
Securitate=SSPI; Catalog iniț ial=GestStg
Dim strRequete As String = "INSERARE ÎN Modul VALORI"
(‘[Link]',3)
Încercaț i
Dim oConnection As New SqlConnection(strConnexion)
Dim oCommand As New SqlCommand(strRequete, oConnection)
[Link]()
oComandă.ExecuteNonQuery()
[Link]()
Prinde e Excepț ie
[Link](("Următoarea eroare a fost întâlnită :" + [Link]))
Sfârș it Încercare
[Link]()
Sfârș it Sub 'Principal
Sfârș it clasă 'CommandeSQL
DRIOUCH B. [Link] 19
Mod conectat
obiectul DataReader
Obiectul DataReader permite recuperarea dintr-o sursă de date
un flux doar pentru citire, doar în faț ă
rezultă din executarea metodei ExecuteReader
pe un obiect Command.
Obiectul DataReader stochează în memorie doar un singur rând la o dată.
permite, astfel, cre ș terea performan ț elor unei
aplicaț ie ș i de a reduce încărcătura acesteia.
Se recomandă utilizarea acestui obiect dacă :
• Nu trebuie să realizaț i un cache al datelor
• Tratati un joc de înregistrări prea mare pentru a fi stocat în
memorie
• Doriț i să accesaț i rapid datele în modul numai citire în
înainte doar
DRIOUCH B. [Link] 20
Mod conectat
Implicit, un DataReader încarcă o linie întreagă în
memorie la fiecare apel al metodei Read. Este posibil
de a accesa valorile coloanelor fie prin numele lor, fie prin
referinț ele lor ordinare. O soluț ie mai performantă este
propusă care permite accesul la valori în tipurile lor de
date native (GetInt32, GetDouble, GetString) De exemplu
ș i prima coloană a liniei indicate de 0 este de tip int,
deci este posibil să o recupera ț i cu ajutorul metodei
GetInt32 de la obiectul DataReader.
Metoda Close închide un obiect DataReader. Să precizăm că
ș i obiectul Command utilizat conț ine parametrii de ieș ire sau
valori de returnare, acestea nu vor putea fi recuperate decât la
consecinț ele închiderii DataReader-ului.
DRIOUCH B. [Link] 21
Exemple (DataReader)
Crearea conexiunii ș i a obiectului Command
Dim conn As New SqlConnection("sursă de date=localhost\SQLExpress ; "
securitate integrată=true ; catalog iniț ial=GestStg
Dim cmdStg As New SqlCommand("select * from Stagiaire", conn)
[Link]()
Crearea unui DataReader ș i afiș area datelor
Dim dr As SqlDataReader
dr = [Link]()
În timp ce [Link]()
[Link](dr("nom") & " - " & dr("moyenne"))
Ciclul
Închiderea DataReader-ului ș i a conexiunii
[Link]()
[Link]()
[Link]()
DRIOUCH B. [Link] 22
Gestionarea erorilor
În timpul utilizării conexiunilor cu obiectul DataReader, ar trebui să
folosi ț i întotdeauna o instruc ț iune Try…catch…Finally pentru a garanta
închiderea conexiunilor în caz de eș ec de orice fel. Altfel, conexiunea
poate rămâne deschisă pe termen nedefinit.
Codul următor al unui obiect DataReader interceptă erorile ș i închide
conexiune
Încearcă
[Link]()
Dr = [Link]()
utilizarea datelor returnate în dataReader
Prinde e Ca Excepț ie
Gestionarea erorii
În sfârș it
[Link]()
[Link]()
Sfârș it Încercare
DRIOUCH B. [Link] 23
Exercițiu
Realizaț i o aplicaț ie cu schema relaț ională următoare
Stagiaire (IdStg, nomp, moyenne)
Module (IdMod, Libelle, Coeff)
Note (IdStg, IdMod, Note)
Ș i la conceperea feronerie următoare (listăVizualizare, ComboBox)
Pagina de întâmpinare
Menu
Liste Note/Module
Modifier Adăugaț i Modificator Adăugaț i
Ș terge
Adăugaț i Modificator
DRIOUCH B. [Link] 24
Mode Déconnecté
DataSet:
Obiectul DataSet reprezintă o copie locală a datelor provenind din
mai pu ț in o sursă de date. Obiectul DataSet poate utiliza un obiect
DataAdapter pentru a încărca date dintr-o sursă de date ș i
se poate deconecta apoi de aceasta din urmă. Utilizatorul poate apoi
utiliza ș i manipula datele. Atunci când datele trebuie să fie puse la
zi în sursa de date, un obiect DataAdapter este utilizat pentru a se
reconectează-te la sursa de date ș i actualizează-o.
DRIOUCH B. [Link] 25
Set de date
Colecț ia "DataTableCollection"
Această colecț ie poate conț ine de la zero la n obiecte de tip DataTable. Fiecare
obiectul DataTable reprezintă o tabelă a unei surse de date. Fiecare
DataTable este compus dintr-o colecț ie Colonne ș i o colecț ie Rânduri
care pot con ț ine respectiv zero à n objete DataRow ș i
ColoanăDeDate.
Colecț ia "DataRelationCollection"
Această colecț ie poate conț ine de la zero la n obiecte de tip DataRelation. Un
obiectul DataRelation define ș te o rela ț ie părinte-copil între două tabele la
partind valori din cheile externe.
La collection "ExtendedProperties"
Această colecț ie corespunde unui obiect de tip PropertyCollection care poate
conț ine de zero până la n proprietăț i definite de utilizator. Această colecț ie
poate fi utilizată pentru a stoca informa ț ii personalizate legate de
DataSet utilizat (data ș i ora generării datelor, ordinea selectată trecută
pentru a genera datele.).
DRIOUCH B. [Link] 26
DataAdapter
Un obiect DataSet trebuie să fie capabil să interacț ioneze cu o sau mai multe surse de
données. Pour réaliser cette action le framework Microsoft .Net fournit un objet
numit DataAdapter. Obiectul DataAdapter serve ș te ca legătură între un obiect
DataSet este o sursă de date. Un furnizor de date .NET va fi
servi ț i un obiect DataAdapter pentru a umple un DataSet cu date, apoi
a repercuta modificările realizate asupra unei surse de date. Este
posibil de a defini acț iunile care trebuie realizate de DataAdapter folosind una
des patru proprietăț i următoare. Fiecare proprietate va executa fie o comandă SQL
deci este o procedură stocată.
DRIOUCH B. [Link] 27
DataTable (AutoIncrement)
Dim MaTable ca un nou DataTable
Adăugare coloană
Dim MaColonne As New DataColumn("id", "[Link]")
Cu MaColonne
.Unique = True
.AutoIncrement = Adevărat
.AllowDBNull = Falsă
.ReadOnly = True
Sfârș it Cu
[Link](MaColonne)
MaColonne = New DataColumn("nom", "[Link]")
[Link](MaColonne)
Adăugare linie
Dim MaLigne Ca DataRow
MaLigne = [Link]
MaLigne("nom") = " Ali"
[Link](MaLigne)
DRIOUCH B. [Link] 28
DataRelation
Definiț ia unei chei primare:
[Link]("Stagiaire").CheiaPrimară=
New DataColumn(){[Link]("Stagiaire").Columns("IndexNom")}
- Să presupunem că MonData este un set de date cu cele trei tabele ale bazei
GestSTG
Dim rel Ca DataRelation
rel = New DataRelation("stgNote", [Link]("Stagiaire").Columns("idstg"),
[Link]("Note").Columns("idstg")
[Link]ă(rel)
rel = New DataRelation("modNote", [Link]("Module").Columns("idmod"),
[Link]("Note").Coloane("idmod")
[Link](rel)
DRIOUCH B. [Link] 29
Acces la un DataTable
Fiecare obiect DataSet este compus din cel puț in un obiect DataTable pe care îl
puteț i face referire prin nume sau prin poziț ie ordinală :
[Link]('Autori')
Ou
[Link](0)
DRIOUCH B. [Link] 31
ConstructorDeComenzi
După completarea unui DataSet cu DataAdapter folosind obiectul SelectCommand, se poate
utilizaț i datele pentru tratamentele de actualizare (Adăugaț i, Modificaț i ș i Ș tergeț i), ș i la sfârș it
tratamente diferite trebuie să apelăm o a doua oară DataAdapter pentru a reflecta
modificarea Dataset-ului pe baza de date sursă, care face apel la celelalte trei obiecte
(InsertCommand, UpdateCommand ș i DeleteCommand) în func ț ie de starea (linie Adăuga ț i, Modifica ț i sau)
supprimer) de fiecare linie a DataTable-ului folosit
Pentru a efectua această operaț iune, trebuie să construim cele trei obiecte (InsertCommand, UpdateCommand ș i
DeleteCommand), la difficulté de leur construction nous fait appel a un autre objet CommandBuilder
care permite construcț ia lor pe baza SelectCommand
Utilizarea CommandBuilder
Dim StgCon As New SqlConnection("Data source=.\\SQLExpress; integrated security=true;initial "
catalog=GestStg")
Dim StgDA As New SqlDataAdapter("", StgCon)
Dim StgDS Ca Nou DataSet
Dim StgCB As SqlCommandBuilder
[Link] = New SqlCommand("Select idstg,nom,moyenne from stagiaire", StgCon)
[Link](StgDS, "stg")
Modificarea datelor în DataSet
StgCB = Nou SqlCommandBuilder(StgDA)
[Link]([Link]("stg"))
DRIOUCH B. [Link] 32
DataRowetDataColumn
Utilizaț i un obiect DataRow ș i proprietăț ile ș i metodele sale pentru a extrage ș i
evaluarea valorilor unui obiect DataTable. Colecț ia DataRow reprezintă
obiecte DataRow reale prezente în obiectul DataColumn care descriu
schema obiectului DataTable. Proprietatea Rows a obiectului DataTable oferă
o accesare programatică a DataRowCollection. Proprietatea Columns de
obiectul Tabel de date furnizat un acces par programare au
Colecț ia de coloane de date.
Dim col As DataColumn
Pentru fiecare col în [Link](0).Columns
[Link]([Link])
Următorul
numărul de linii sau coloane al unui obiect DataTable:
[Link]('Authors').[Link]
[Link]('Autori').[Link]
accesa aceste câmpuri prin poziț ie ordinală (de bază 0) sau prin nume :
[Link](0).Rânduri(x)(1)
[Link](0).Rows(x)(‘’nom_champ’’)
DRIOUCH B. [Link] 33
Încercaț i
Gestion Eroare
Dim conn As New SqlConnection(…)
Dim da As New SqlDataAdapter(…, conn)
Dim ds Ca Un Nou DataSet()
[Link](ds)
Prinde ex1 ca [Link]
Selectaț i cazul [Link]ăr
Cazul 17
[Link] = [Link] & (‘’nom de serveur non valide’’)
Caz 156, 170 'sintaxă SQL incorectă
[Link] = [Link] & ('sintaxă incorectă')
Cazul 207 'nume de câmp incorect în select
[Link] = [Link] & (‘’nom de colonne non valide’’)
Caz 208 'nume de tabel incorect în select
[Link] = [Link] & (‘’nom d’objet non valide’’)
Caz 18452
[Link] = [Link] & (‘’nom de l’utilisateur non valide’’)
Cazul 18456
[Link] = [Link] & (‘mot de passe non valide’’)
Cazul 4060
[Link] = [Link] & (‘‘bază de date invalidă’’)
Sfârș it Select
Prinde ex2 ca [Link]
[Link] = [Link] & (‘’Exception inattendue : ‘’ & [Link] & ‘’ , ‘’)
Sfârș it încercare
DRIOUCH B. [Link] 34
Gestion Eroare
Exemplul următor arată cum să parcurgi colecț ia
Erori pentru a căuta detalii despre erorile SQLServer
survenues :
DRIOUCH B. [Link] 35
Exercițiu
Care este rezultatul codului următor :
Dim r As DataRow
Dim str As String
Pentru fiecare r din [Link]('Stagiaire').Rows
Str &=r(1)
Str &=r(‘’nume’’)
Următorul
Dim dt ca DataTable=[Link]('Stagiaire')
[Link] = "idstg"
[Link] = "nom"
[Link] = dt
Reproducerea Seriei M22 N1 în modul deconectat.
DRIOUCH B. [Link] 36
Control utilizator (componentă)
În programare, termenul componentă este utilizat în general
pentru a desemna un obiect care este reutilizabil ș i care poate interacț iona cu
alte obiecte.
Un component trebuie să definească proprietă ț i în loc de câmpuri
publice, deoarece designerii vizuali, cum ar fi Visual Studio .NET,
afi ș ează proprietă ț i ș i nu câmpuri în fereastra de
proprietăț i.
Proprietăț ile sunt ca niș te câmpuri inteligente. O proprietate
de obicei, deț ine un membru de date privat însoț it de
func ț ii de accesare ș i este accesată din punct de vedere sintactic
ca un câmp al unei clase
Vedeț i Atelier UserControle (Ceas) pe partea de descărcare
du site [Link]
DRIOUCH B. [Link] 37
Atelier UserContrôle
1- etapa lansaț i [Link] ș i creaț i un proiect de tip "aplicaț ie Windows"
ș i îl salvează sub numele MonPrimulMeuControl. [Link] creează un formular care va
servi pentru a testa ceasul nostru
2- adăugaț i un control utilizator gol
DRIOUCH B. [Link] 38
4- testaț i controlul.
Pentru a testa controlul, trebuie să compila ț i proiectul, iar acesta va crea pe cutie
d'outils controlul Ceasului pe care îl pute ț i insera apoi în formular
Formular1
Afiș aț i formularul Form1 ș i verificaț i în paleta de controale, este?
vezi controlul tău
DRIOUCH B. [Link] 39
Integrați tranzacțiile
Tranzacț iile sunt grupuri de operaț iuni combinate în unităț i de lucru
logici. Ele sunt folosite pentru a controla ș i a men ț ine coeren ț a ș i
integritatea fiecărei acț iuni a unei tranzacț ii, în ciuda eventualelor erori
întâlnite pe sistem.
Avec un SGBDR qui prend en charge la gestion des transactions vous pouvez
crea ț i tranzac ț ii explicite à ajutor cu instruc ț iuni SQL ÎNCEPE
TRANSACTIE, COMITE TRANSACTIE sau ANULEAZA TRANSACTIE
Pentru a efectua o tranzacț ie :
1. Apelaț i metoda BeginTransaction a obiectului SqlConnection pentru a marca
începutul tranzac ț iei. Metoda BeginTransaction returnează o
referinţă la tranzacţie.
2.
Asignaț i obiectul Transaction la proprietatea Transaction a SqlCommand-ului
executa. Dacă o comandă este executată pe o conexiune pe care o
tranzac ț ia este activă ș i dacă obiectul tranzac ț iei nu a fost afectat la
proprietateaTransactiona obiectuluiComand, o excepț ie este ridicată.
3. Executaț i comenzile necesare.
4. Apela ț i metoda Commit a obiectului SqlTransaction pentru a finaliza
tranzacț ie, sau metoda Rollback pentru a o anula. Dacă conexiunea este închisă
ai fost eliberat înainte ca una dintre metodele Commit sau Rollback să fi fost
executată, tranzacț ia este anulată.
DRIOUCH B. [Link] 40
DRIOUCH B. [Link] 41
DRIOUCH B. [Link] 42
scheme-urile XSD (DataSet tipizat)
DataSet este de fapt un fi ș ier XML care define ș te diferitele tabele care
componentele surselor de date pentru munca dumneavoastră (ComboBox, DataGrid,
CrystalReport…). Ce care evită orice problemă legată de schimbarea conexiunii
la baza de date.
DRIOUCH B. [Link] 43
State (CrystalReports)
În orice aplicaț ie este nevoie de raport de ieș ire imprimabil, fie rapoarte
de listare, de calcule sau de grafic.
Pentru asta, adaugă un nou element de tip CrystalReport (ext rpt), în
exploratorul câmpurilor poate configura toate câmpurile de bază de date, câmpurile
de formule, câmpuri de parametru, câmpuri de nume de grup, câmpuri de total cumulat
ș i altele.
Exemple: pentru a avea un raport cu toț i stagiarii, împreună cu notele ș i materiile lor,
începe prin a parametriza câmpul bazei de date cu DataSet tipizat, ca parametru
câmpul numelui grupului pentru a specifica gruparea după id_stg ș i a le trasa
elemente de care avem nevoie pe CrystalReport, pentru a afiș a acest raport, trebuie să folosim un
CrystalReportViewer într-o formulară ș i a adăugat următorul cod la pornirea
Forms:
Imports [Link]
Dim DS As New DSet ‘ instanț ierea dataset-ului
Dim DAstg As New stagiaireTableAdapter
Dim DAmat As New matiereTableAdapter
Dim DAnot As New noteTableAdapter
Dim etatn Ca Un Nou EtatNote
[Link]([Link]) ‘ completarea Datatables în DataSet
[Link]([Link])
DAnot umple ([Link])
[Link](DS) ' legătura între CR ș i DataSet
[Link] = etatn ‘ lien entre CRViewer et CR
DRIOUCH B. [Link] 44
State (CrystalReports)
Pentru a afi ș a un singur extras pentru un
singura stagiară, trebuie să lucrezi pe
câmpuri de parametru pentru a crea un
parametru. Dă-i un nume ș i un
tip
Click dreapta într-un loc gol
în raport pentru a afi ș a Expertul
Selec ț ie, după alegerea elementului
face ț i clic pe OK pentru a preciza egalitatea
între elementul selectat ș i
parametru creare
DRIOUCH B. [Link] 45
State (CrystalReports)
Ș i pentru program, trebuie să facem următoarele schimbări pentru
a lua în considerare parametru:
Importuri [Link]
Dim DSet1 Ca Nou DSet
Dim MatiereTableAdapter1 Ca Nou matiereTableAdapter
Dim StagiaireTableAdapter1 Ca Noua stagiaireTableAdapter
Dim NoteTableAdapter1 ca un nou noteTableAdapter
Dim releve Ca Nou ReleveSTG
Pornirea ferestrei cu CrystalReportViewer
[Link]([Link])
[Link]([Link])
[Link]([Link])
[Link](DSet1)
[Link]("idstg", idstg) ‘idstg: valoarea parametrului
[Link] = releve
DRIOUCH B. [Link] 46
State (CrystalReports)
În cele din urmă putem
însoț it raportul nostru
printr-un diagramă
Histogramă
Click dreapta -> Inserare...
Nota pe Modul
în relevé Stagiaire.
DRIOUCH B. [Link] 47
Dezvoltare (Instalare)
Există mai multe metode de publicare.
normal, cu proiect de desfă ș urare, alte unelte
externes…
Pe pagina de proprietate a proiectului dumneavoastră există o parte
Publica ț i că trebuie configurat înainte de lansarea dvs.
publicaț ie
DRIOUCH B. [Link] 48
DRIOUCH B. [Link] 49