Tehnologii Microsoft Pentru Aplicatii cu Baze de Date

TEHONLOGII MICROSOFT PENTRU APLICATII CU BAZE DE DATE

Introducere

Această aplicație a fost dezvoltată pentru a putea fi folosită cu ușurintă, avand nevoie doar de un browser web pentru a o accesa.

Această aplicație folosește platforma .NET 4 o tehnologie utilizata in cele mai inalte standarde deprogramare și este dezvoltata in Silverlight 4

Obiectivele principale ale aplicatiei sunt urmatoarele: Ținerea contabilități, incasări și plăți, pentru o intreprindere de dimensiuni reduse sau o persoana fizică autorizată precum si crearea de facturi pentru serviciile prestate.

Prezenta lucrare se intitulează „Tehnologii Microsoft pentru aplicații cu baze de date” fiind structurată în 4 capitole cu mai multe subcapitole urmata de bibliografia folosită în realizarea lucrării.

În primul capitol

In cel de-al doilea capitol..

Platforma .NET

.NET este un cadru (Framework) de dezvoltare software unitară care permite realizarea, distribuirea și rularea atât a aplicațiilor-desktop Windows cat și aplicațiilor WEB.Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP, SOAP, WDSL, UDDI, WPF, LINQ) și limbaje de programare (VB, C++, C#, F#) asigurând totodată atât portabilitatea codului compilat între diferite calculatoare cu sistem Windows, cât și reutilizarea codului în programe, indiferent de limbajul de programare utilizat.

.NET Framework este o componentă livrată împreună cu sistemul de operare Windows. Pentru a dezvolta aplicații pe platforma .NET este bine sa avem 3 componente esențiale:

un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl, Fortran, Cobol, Lisp, Pascal etc),

un set de medii de dezvoltare (Visual Studio .NET, Visio)

o bibliotecă de clase pentru crearea serviciilor Web, aplicațiilor Web și aplicațiilor desktop Windows.

Când dezvoltăm aplicații .NET, putem utiliza:

servere specializate – un set de servere Enterprise .NET (din familia SQL Server 2008, Exchange 2000 etc.), care pun la dispoziție funcții de stocare a bazelor de date, email, aplicații B2B (Bussiness to Bussiness – comerț electronic între partenerii unei afaceri).

servicii Web (în special comerciale), utile în aplicații care necesită identificarea

utilizatorilor (de exemplu, .NET Passport – un mod de autentificare folosind un singur

nume și o parolă pentru toate site-urile vizitate)

servicii incluse pentru dispozitive non-PC (Pocket PC Phone Edition, Smartphone,

Tablet PC, Smart Display, XBox, set-top boxes, etc.)

NET Framework

Componenta .NET Framework, ajunsa astăzi la versiunea 4.5 stă la baza tehnologiei .NET, este ultima interfață între aplicațiile .NET și sistemul de operare și actualmente conține: limbajele C#, VB.NET, C++ si, odată cu versiunea 2010, introduce noul limbaj F#. Pentru a fi integrate în platforma .NET toate aceste limbaje respectă niște specificații OOP numite Common Type System (CTS). Ele au ca elemente de bază: clase, interfețe, delegări, tipuri valoare și referință, iar ca mecanisme: moștenire, polimorfism și tratarea excepțiilor.

Platforma comună de executare a programelor numită Common Language Runtime (CLR), utilizată de toate cele 4 limbaje. CTS face parte din CLR. Ansamblul de biblioteci necesare în realizarea aplicațiilor desktop sau Web numit Framework Class Library (FCL)

Componenta .NET Framework este formată din compilatoare, biblioteci și alte executabile utile în rularea aplicațiilor .NET

Argumente pentru .NET

În primul rând pentru că oferă instrumente pe care le putem folosi și în alte programe, oferă acces ușor la baze de date, permite realizarea desenelor sau a altor elemente grafice. Spațiul de nume System.Windows.Forms conține instrumente (controale) ce permit implementarea elementelor interfeței grafice cu utilizatorul.

Folosind aceste controale, se pot proiecta și dezvolta rapid și interactiv, elementele interfeței grafice. Tot .NET oferă clase care efectuează majoritatea sarcinilor uzuale cu care se confruntă programele și care plictisesc și fură timpul programatorilor, reducând astfel timpul necesar dezvoltării aplicațiilor.

Microsoft Visual Studio este un mediu de dezvoltare integrat (IDE) de la Microsoft. Acesta poate fi utilizat pentru a construi aplicații consolă, interfața grafică, aplicații de tip Windows Forms, site-uri web, aplicații web, servicii web ce sunt suportate platformele: Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework și Microsoft Silverlight.

Versiuni

NET Framework 1.0 – prima versiune de .NET Framework, lansată pe 13 Februarie 2002 și disponibilă pentru Windows 98, Me, NT 4.0, 2000 și XP. .NET Framework 1.1 – lansată pe 3 aprilie 2003, este prima versiune de .NET inclusă ca parte a sistemului de operare Windows. Schimbări față de versiunea 1.0:

Suport pentru controalele ASP.NET; Suport pentru Internet Protocol version 6; Numeroase schimbări API.

.NET Framework 2.0 – a fost lansat împreună cu Visual Studio 2005, Microsoft SQL Server 2005 și BizTalk (Microsoft BizTalk Server – server de management al afacerilor. Oferă posibilitatea administrării proceselor de afaceri prin schimbul de documente între diferite aplicații, situate în cadrul sau în afara organizației.) 2006. Îmbunătățiri:

Modificarea controalelor ASP.NET;

Noi caracteristici pentru personalizarea ASP.NET, cum ar fi suport pentru teme și skinuri;

Data tables.

.NET Framework 3.0 – lansat pe 21 noiembrie 2006, conține patru componente noi foarte importante:

Windows Presentation Foundation (WPF), numită și Avalon – reprezintă o nouă interfață de lucru cu utilizatorul bazată pe cod XML și grafică vectorială;

Windows Communication Foundation (WCF), numită Indigo – sistem de mesagerie ce permite programelor să comunice similar serviciilor web;

Windows Workflow Foundation (WF) – tehnologie pentru definirea, execuția și management-ul fluxului de lucru;

Windows CardSpace (InfoCard)- componenta software care stochează identitatea digitală a unei persoane (utilizată pentru diferite tranzacții cum ar fi, de exemplu, logarea pe un site);

.NET Framework 3.5 – ca și versiunea anterioară, .NET Framework 3.5 utilizează CLR din versiunea 2.0. Îmbunătățiri:

Noi caracteristici de limbaj pentru C#3.0 și VB.NET 9.0;

Suport pentru colecțiile de tip tree;

Language Integrated Query (LINQ) (Language Integrated Query – set de operatori de interogare folosiți pentru a proiecta, filtra și interoga date într-un tabel, XML sau bază de date.) împreuna cu distribuitorii săi :

LINQ to Objects

LINQ to XML

LINQ to SQL

ASP.NET AJAX (AJAX – prescurtare de la asynchronous JavaScript + XML. Grup de tehinici de dezvoltare web, utilizate pentru dezvoltarea de aplicații web interactive); Sincronizarea ADO.NET cu API;

.NET Framework 4.0 – lansat pe 20 mai 2009. Câteva caracteristici: Suport pentru sistemele distribuite sau multi-core;

Simplificarea, înbunătățirea și extinderea capabilităților legate de securitate

Suport pentru IronPython (Implementare .NET Framework a limbajului Python)

Înbunătățirea timpului de start și o creștere a rapidității atunci când se lucrează cu Multithreading

Accesarea evenimentelor ETW (Event Tracing for Windows) în scopuri de diagnostică. Includerea unui nou Garbage Collector optimizat

Multe alte înbunătățiri aduse la nivele precum WPF, ADO.NET Data, WCF Communications.

BAZE DE DATE

Introducere

Baza de date (BD, Database – DB) constituie o aplicație fundamentală în toate domeniile de activitate, care, așa cum ii spune și numele, stochează toate tipurile de date iar mai apoi permite accesul altor programe la aceste date.

Inițial a apărut necesitatea computerizării sistemului de îndosariere. Bazele de date au oferit o modalitate eficientă de tratare distribuită a datelor, într-o resursă comună partajată în care se include și descrierea acestora în așa-numitul catalog de sistem sau dicționar de date sau metadate. Astfel, bazale de date asigură independența program-date, dar și controlul accesului și manipulării datelor.

Sistemul de baze de date, ca și aplicație software, poate fi considerata cea mai importantă realizare din domeniul ingineriei programării pe calculator.

Complexitatea și dimensiunea bazelor de date evoluează rapid, determinând reproiectarea algoritmilor de stocare și acces al fișierelor și chiar schimbarea unor principii de administare a acestora. Simultan este necesară pregătirea de personal specializat în domeniul bazelor de date: administratori, proiectanți, programatori.

Scopul întregii activități de proiectare, programare și administrare a unei baze de date constă în punerea la dispoziția utilizatorului final a unor baze de date permanent actualizate, coerente și ușor accesibile.

Sistemul de gestiune a bazelor de date (SGBD, Database Management System – DBMS) administrează și controlează accesul la acestea. Bazele de date pot fi centralizate sau distribuite în rețea, iar modalitățile de gestionare diferă de la caz la caz, în funcție de aplicația pe care o deservește.

Prin bază de date se înțelege orice colecție partajată de date, între care există relații logice, cu o descriere a datelor, proiectată pentru a satisface necesitățile informaționale ale unei organizații sau grup de utilizatori.

Baza de date este gândită ca o resursă unică, utilizată simultan de mai mulți utilizatori, fie ei pe același calculator, în aceeași rețea sau în Internet, în care datele sunt integrate.

Baza de date include o definiție internă a fiecărui obiect, folosită de programele de aplicație și o definiție externă a obiectului oferită utilizatorilor. Acest fapt reprezintă procesul de abstractizare a datelor în bazele de date și asigură transparența pentru utilizatorii finali, interesați doar de anumite modificarea structurii datelor sau a modalităților de stocare a lor fără a afecta vederile externe. Numai eliminarea anumitor elemente (câmpuri, atribute etc.) poate deranja eventualele programe de aplicații, care le utiliza în momentul respectiv. Acest neajuns este evitat prin tratarea corespunzătoare a tranzacțiilor în BD.

Pentru realizarea unei BD este necesară identificarea următoarelor elemente specifice: entități, atribute, relații.

O entitate este un obiect distinct inclus în baza de date (persoane, locuri, firme, documente, concepte, date contabile, coduri, etc.). De exemplu, angajații unei organizații pot fi incluși în BD ca o entitate distinctă denumită personal.

Un atribut este o proprietate, care descrie un anumit aspect al unei entități. De exemplu, numele, prenumele, salariul constituie atribute ale entității personal.

O relație reprezintă o asociație între mai multe entități. De exemplu, entitatea personal gestionează entitatea contracte pentru o firmă.

Baza de date poate fi modelată grafic sub forma unei diagrame Entitate-Relație (ER), în care entitățile sunt reprezentate, prin convenție, sub formă de dreptunghiuri, relațiile ca romburi, iar atributele ca ovale, toate legate între ele sub forma unui graf neorientat.

Sistemul de programare software, care permite definirea, crearea, administrarea și accesarea bazei de date este numit sistem de gestiune a bazei de date (SGBD).

Dintre funcțiile unui SGBD se remarcă:

asigurarea securității și confidențialității accesării bazei de date;

personalizarea bazei de date simultan cu realizarea independenței program-date; o menținerea coerenței bazei de date chiar și în cazul efectuării unor tranzacții

concurente.

În prezent, se dezvoltă SGBD multiutilizator pentru baze de date cu capacități mari de stocare pentru aplicații grafice, video, multimedia în general de utilizator (GUI – Graphic User Interface) atractive.

Limbajele bazelor de date

Implementarea și utilizarea bazei de date includ mai multe aspecte: definirea bazei de date folosind un limbaj de definire a datelor (DDL – Data

Definition Language) pentru descrierea bazei de date în schema bazei de date; manipularea datelor din baza de date prin intermediul unui limbaj de manipulare a datelor (DML- Data Manipulation Language); controlul accesului la baza de date, prin politica de securitate implementată, reguli de integritate, controlul concurenței și al refacerii bazei de date în cazul apariției unor defecțiuni hardware sau software.

DDL reprezintă un limbaj descriptiv utilizat pentru denumirea entităților bazelor de date și a relațiilor logice dintre acestea, specificarea tipurilor și structurilor de date precum și a modurilor de vizualizare dintre acestea, specificarea tipurilor și structurilor de date precum și a modurilor de vizualizare personalizate. Rezultatul compilării instrucțiunilor bazelor de date este un set de tabele, care se constituie în catalogul de sistem. DML este folosit pentru efectuarea operațiilor specifice de manipulare a datelor din baza de date: inserarea de noi date; modificarea datelor existente:

extragerea de date din baza de date;

ștergerea unor date din baza de date.

Limbajele de manipulare a datelor din baza de date sunt de două tipuri:

DML procedurale, care definesc procedurile prin care se efectuează anumite operații; DML neprocedurale sau declarative, care specifică numai ce operații trebuie efectuate asupra datelor. Acea parte a unui limbaj DML utilizată pentru regăsirea datelor în baza de date se numește limbaj de interogare.

SQL este un exemplu de limbaj de interogare a bazelor de date neprocedural, care constituie limbajul standard pentru SGBD relaționale.

DDL și DML sunt considerate sublimbaje de date care pot fi încorporate într-un limbaj de nivel înalt denumit și limbaj gazdă.

Un alt limbaj de manipulare a datelor din baza de date este limbajul QBE (Query by Example).

SQL și QBE sunt limbaje din a patra generație (4GL – Fourth Generation Language), care definesc ce trebuie făcut și nu cum se procedează. Limbajele din generația a treia sunt procedurale și complicate sintactic.

Limbajele 4GL sunt de mai multe tipuri:

limbaje de prezentare (de interogare, generatoare de rapoarte, generatoare grafice etc) limbaje de specialitate (de exemplu, pentru calcul tabelar) generatoare de aplicații (care construiesc aplicații folosind datele din BD) limbaje de nivel foarte înalt (care generează codul-sursă al aplicației).

Componentele unui SGBD

SGBD se aplică într-un anumit mediu care include diferite componente hardware și software, date, proceduri și persoane. Ca elemente hardware, se utilizează rețele de calculatoare și servere dedicate acestor Baze de date.

Componenta software cuprinde programele SGBD și cele de aplicații, scrise într-un limbaj de nivel înalt, din generația a treia (Pascal, C, C++, Turbo C etc) sau a patra (SQL, MySQL și altele), împreună cu sistemul de operare propriu-zis (OS – Operating System) și componența sa de rețea NOS – Nework Operating System), folosind modelul client-server.

Datele constituie componenta principală a oricărui sistem de baze de date. Structura bazei de date se numește schema BD. Aceasta stochează în mai multe fișiere tabelele din baza de date. Pentru tabel se folosește și termenul echivalent de relație. În tabel, apar mai multe înregistrări sau linii, fiecare cu un anumit număr de câmpuri sau coloane în care se introduc valorile atributelor. Baza de date include și meta-datele, care descriu datele propriu-zise, de exemplu, tipul datelor (întreg, șir de caractere etc), lungimea câmpului etc. Meta-datele sunt stocate în catalogul de sistem care conține:

denumirile, tipurile și dimensiunile articolelor din baza de date;

denumirile relațiilor sau tabelelor;

constrângerile de integritate impuse datelor;

numele utilizatorilor autorizați să acceseze baza de date;

indexurile și structurile de stocare folosite.

Procedurile sunt reprezentate de regulile și instrucțiunile utilizate pentru implementarea, întreținerea și accesarea bazelor de date:

pornirea și oprirea SGBD;

deschiderea sesiunilor de lucru;

utilizarea programelor de aplicație pentru accesarea bazelor de date;

tratarea defecțiunilor hardware și software prin identificarea componentei defecte, eventual depanarea automată a acesteia, și refacerea bazelor de date;

reorganizarea bazelor de date prin modificarea structurii tabelelor și optimizarea modului de stocare a datelor prin arhivare în capacitatea de stocare secundară.

Persoanele implicate în mediul SGBD se împart în patru categorii:

proiectanți;

programatori;

administratorii de date și de baze de date;

utilizatori.

Proiectanții bazei de date se ocupă fie de proiectarea logică reprezentată de identificarea entităților, atributelor, relațiilor și constrângerilor din bazele de date, atât la nivel conceptual independent de modalitatea de implementare sau de orice considerent de ordin fizic, cât și pe baza unui model de date relațional, în rețea, ierarhic sau orientat pe obiect, fie de proiectarea fizică, constând în transpunerea modelului de date în tabele și stabilirea constrângerilor de integritate, alegerea structurilor de stocare și a metodelor de acces și impunerea măsurilor de securitate.

Programatorii realizează aplicații specifice care oferă diverse servicii utilizatorilor finali ai bazelor de date (interogare a bazei de date, generare de rapoarte, formulare, de vizualizări grafice sau de aplicații).

Administratorii de date se ocupă de gestionarea datelor (planificare, dezvoltare și întreținerea resurselor de date). Administratorii bazelor de date sunt direct răspunzători de realizarea și întreținerea fizică a acesteia, având o orientare putin mai tehnică decât administratorul de date.

Utilizatorii reprezintă clienții bazei de date, beneficiarii directi ai datelor stocate în baza de date. Marea majoritate a acestora nu cunosc detaliile SGBD și folosesc pentru accesarea bazei de date diverse aplicații software cu meniu-uri accesibile. Utilizatorii specializați utilizează limbaje de interogare a bazei de date de nivel înalt și pot să își dezvolte propriile aplicații software.

Arhitectura bazelor de date

Inițial grupul DBTG (Data Base Task Group) a propus o arhitectură a sistemelor de baze de date cu două nivele: schema BD reprezentând nivelul inferior, de implementare și întreținere, și subschema BD pentru realizarea vederilor utilizatorilor.

Personalizarea acestor vederi în sistemele multiutilizator este posibilă prin introducerea unui al treilea nivel, intermediar, care să separe detaliile de implementare de cele impuse în vizualizare. Astfel ANSI (American National Standards Institute) și SPARC (Standards Planning and Requirements Committee) au propus arhitectura cu trei nivele ANSI/X3/SPARC sau ANSISPARC, care include:

nivelul intern

nivelul conceptual

nivelul extern.

Nivelul extern este format din vederile utilizatorilor, fiecare incluzând anumite entități, relații și atribute, eventual cu reprezentări diferite ale acelorași date, cu combinații ale acestora sau cu atribute derivate, pe baza unor scheme externe.

Nivelul conceptual reprezintă o vedere generală a bazelor de date și descrie ce date și relații sunt stocate în bazele de date, într-o structură logică denumită și schemă conceptuală. Aceasta nu depinde nici de modul de implementare a bazei de date, nici de cerințele de vizualizare ale utilizatorilor. Schema conceptuală cuprinde toate entitățile, atributele, relațiile și constrângerile datelor, informațiile semantice despre date, normele de securitate și regulile de integritate.

Nivelul intern reprezintă implementarea fizică a bazei de date, pe baza unei scheme interne cuprinzând structurile de date și de organizare a fișierelor. Acest nivel este responsabil de alocarea spațiului de stocare a datelor și indexurilor, de descrierea și plasarea înregistrărilor în spațiul alocat, de codarea și compresia datelor.

Nivelul intern interacționează direct cu nivelul inferior, cel fizic, gestionat de sistemul de operare. Schema internă este legată de cea conceptuală printr-o interfață de transpunere conceptual/intern, care transformă ca format cererea procesului client și răspunsul procesului server între cele două nivele.

Schemele externe sunt deduse din cea conceptuală prin transpunerea extern / conceptual.

Informațiile incluse la un anumit moment în baza de date reprezintă starea sau instanța bazei de date și indiferent de cum se modifică datele, ele corespund aceleiași scheme a bazeo de date.

Imunitatea schemelor externe față de modificările efectuate în schema conceptuală reprezintă independența logică de date a bazei de date.

Imunitatea schemei conceptuale față de schimbările intervenite în schema internă este denumită independența fizică de date a bazei de date.

Modelarea bazelor de date

Un model de date este alcătuit din totalitatea conceptelor utilizate pentru descrierea datelor din bazele de date, a relațiilor dintre ele și a constrângerilor impuse lor.

La nivel extern se utilizează modele logice de date bazate pe înregistrări:

modelul de date relațional, bazat pe conceptul de relații matematice, reprezintă datele din baza de date și relațiile dintre ele sub formă de tabele;

modelul de date în rețea reprezintă datele ca o colecție de înregistrări (noduri) iar relațiile dintre acestea prin direcțiile sau muchiile unui graf ;

modelul de date ierarhic, similar modelului în rețea, folosește conceptul de nodpărinte și permite unui nod din graf să posede numai un singur părinte, realizând o structură arborescentă.

Pe nivelul conceptual se folosesc modele de date bazate pe obiecte, dintre care cele mai utilizate sunt:

modelul Entitate-Relație (ER), tehnică principală de proiectare conceptuală.

modelul orientat pe obiecte, care extinde definiția entității prin luarea în considerare și a comportamentului acesteia, pe lângă atributele, care descriu starea ei.

Pe nivelul intern se folosesc modele fizice a BD, care descriu modul de stocare a datelor în memoria calculatorului, structurile, ordinea și căile de accesare ale înregistrărilor. Diferit de această etapă de modelare logică pe cele trei nivele, procesul de modelare a datelor independent de modul de implementare, de SGBD țintă, programe aplicație, limbaje de programare sau aspecte fizice, reprezintă modelarea conceptuală a BD.

SGBD relațional (SGBDR) reprezintă elementul dominant în procesul actual de prelucrare a datelor din BD, constituindu-se în cea de a doua generație de SGBD bazate pe modelul de date relațional propus în 1970 de E.F. Codd.

Din prima generație fac parte SGBD ierarhice și în rețea. Limbajul standard al SGBDR este SQL. În modelul relațional, datele sunt structurate logic simplu, sub formă de tabele (relații, fișiere). Această structurare a BD sub formă de tabele este valabilă numai pe nivelele superioare (extern, conceptual) nu și pe nivelul intern.

Relația este un tabel cu coloane și linii. Fiecare tabel are o denumire, fiind format din mai multe înregistrări (tuplu-uri, rânduri, linii) fiecare cu mai multe atribute (câmpuri, coloane).

Tuplul este un rând sau o linie din tabel. Ordinea tuplurilor nu este importantă, deși poate afecta eficiența accesării tabelului. Nu trebuie să existe dubluri ale tuplurilor. Numărul de tupluri dintr-un tabel reprezintă cardinalitatea relației.

Atributul este o coloană a unei relații, având o denumire proprie, distinctă. Ordinea atributelor nu este importantă.

Domeniul este mulțimea valorilor pe care le poate lua un atribut. Numărul de atribute ale unei relații reprezintă gradul relatiei.

Baza de date relațională constă într-un set de relații normalizat.

Normalizarea este o operație complexă de prelucrare a relațiilor în vederea eliminării dublării datelor din BD.

Prima proprietate de normalizare impune ca fiecare celulă a unui tabel să conțină o singură valoare.O relație care satisface această condiție este în prima formă de normalizare.Fiecare tuplu este identificat unic prin atributele sale.

Un atribut sau un set de atribute care identifică în mod unic un tuplu dintr-o relație se numește supercheie. O supercheie pentru care nici un subset de atribute nu este o supercheie se numește cheie candidat. Se pot găsi mai multe chei candidat pentru aceeași relație.

Cheia candidat aleasă pentru identificarea unică a tuplurilor dintr-o relație se numește cheie primară. Cheile candidat care nu au fost alese ca și chei primare sunt considerate chei alternative. O cheie formată din mai multe atribute se numește cheie compusă.

Setul de atribute care constituie o cheie candidat a altei relații se numește cheie străină.

Modelul sau schema conceptuală a bazei de date se reprezintă printr-o mulțime de relații specificate prin numele lor, urmat de atributele fiecăreia între paranteze, cheia primară fiind subliniată. Alte reguli impuse de utilizatorii sau administratorii unei BD se numesc constrângeri de întreprindere.

Limbaj SQL (STRUCTURED QUERY LANGUAGE)

SQL (Structured Query Language – Limbaj Structurat de Interogare) este un limbaj de programare specific lucrului cu bazele de date, devenit un standard în domeniu (standardizat ANSI-ISO), fiind cel mai popular limbaj utilizat pentru crearea, modificarea, regăsirea și manipularea datelor de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaționale. Pe lângă versiunile standardizate ale limbajului, există o mulțime de dialecte și variante, unele proprietare, fiind specifice anumitor SGBD-uri și de asemenea conținând extensii pentru a suporta SBD-urile (Sistemele de Baze de Date) obiectuale (obiectual-relaționale).

Un sistem de management al bazei de date necesită un limbaj de interogare pentru a permite utilizatorului să acceseze datele. SQL (limbaj de interogare structurată) este limbajul utilizat de majoritatea sistemelor de bază de date relațional.

Limbajul SQL a fost dezvoltat într-un prototip de sistem de management a bazelor de date relaționale – System R – de IBM la mijlocul anilor 1970. În 1979, Corporația Oracle introduce prima implementare a SQL în variantă comercială.

La început sistemele de management a bazei de date au utilizat un limbaj separat pentru fiecare categorie în parte. SQL le-a unificat pe toate acestea într-un singur limbaj. SQL a devenit un limbaj standard industrial pentru bazele de date relaționale.

Institutul Național American de Standarde (ANSI) a adoptat SQL ca limbaj standard pentru RDBMS în anul 1986. Organizația Internațională de Standarde (ISO) a adoptat de asemenea SQL ca limbaj standard pentru RDBMS. Toate RDBMS-urile suportă unele forme de SQL și toți vânzătorii de RDBMS intenționează să se alinieze la standardele ANSI.

SQL este prezentat în limba engleză. Folosește cuvintele select, insert, delete, update, drop, declare, set, join, union,where, if ca părți ale setului de comenzi.

SQL este un limbaj neprocedural: specifică ce informații dorești, nu cum să le obții. Cu alte cuvinte SQL nu iți cere să specifici metoda de acces la date. Toate cererile SQL folosesc optimizarea cererilor – o parte a RDBMS – pentru a determina rapid remedierea datelor specificate. Aceste trăsături ușurează obținerea rezultatelor dorite.

Procesarea SQL asupra înregistrărilor nu se poate face decât asupra unei singure înregistrări la un moment dat. Cea mai comună formă a unui set de înregistrări este un tabel. SQL poate fi folosit de un șir de utilizatori incluzând DBA, programatori de aplicații, personal de management și multe alte tipuri de utilizatori.

SQL pune la dispoziție comenzi pentru o varietate de scopuri incluzând:

date interogate

inserarea, extragerea și ștergerea rândurilor într-un tabel

crearea, modificarea și ștergerea obiectelor de tip bază de date

controlul accesului la baza de date și la obiectele de tip bază de date

garantarea consistenței bazei de date

modifică structura unei baze de date

schimbă valorile de configurare pentru securitatea sistemului

adaugă drepturi utilizatorilor asupra bazei de date

actualizează conținutul unei baze de date

Limbajul SQL (Structurat, Interogare, Limbaj) interoghează baza de date, creează tabele, adaugă, șterge și combină date, declanșează acțiuni în funcție de modificările aduse bazei de date, memorează interogările în program.

O instrucțiuni SQL este formată din cuvinte rezervate și cuvinte definite de utilizator. Cuvintele rezervate constituie partea fixă și se scriu exact cum este necesar. Cuvintele definite de utilizator reprezintă denumirile diverselor obiecte din baza de date.

Deși standardul nu o cere, majoritatea dialectelor cer terminator de instrucțiune („;”).

Majoritatea componentelor nu sunt sensibile la tipul de litere (excepție importantă: când datele au caracter literal, de exemplu, dacă se stochează numele „POPA” și cautăm „Popa”, nu vom găsi înregistrarea respectivă).

În concluzie, SQL înseamnă un limbaj structurat pentru adăugare, modificare, ștergere, joncțiune, memorare, declanșare și interogare.

Microsoft Silverlight

Introducere

Microsoft Silverlight este un cadru de aplicație pentru scrierea și rularea aplicațiilor de tip Rich Internet cu caracteristici și scopuri similare cu cele din Adobe Flash.

Mediul de run-time pentru Silverlight este disponibil ca un plug-in pentru browsere web care ruleaza pe Windows si Mac OS X. Exemple de browsere suportate includ Internet Explorer, Mozilla Firefox, Apple Safari, Google Chrome. Desi versiuni mai vechi ale Silverlight se concentrau pe redarea continutului media (streaming), versiunile mai noi permit folosirea de animații, grafică și multimedia, și oferă dezvoltatorilor oportunitatea de a dezvolta aplicații in limbaje CLI, de exemplu C#, Visual Basic, C++/CLI, etc.

Combină mai multe tehnologii într-o singură platformă și are următoarele trăsături:

se bazează pe tehnologia WPF (Windows Presentation Foundation) care extinde elementele din browser pentru crearea de elemente grafice interactive, animații, media și XAML (Extensible Application Markup Language) care oferă o sintaxa de marcare pentru crearea de elemente. Spre exemplu, obiectul TextBlock este un element care afișeaza text într-o aplicație Silverlight.

Are suport cross-browser, cross-platform. Puteți dezvolta aplicația cu Silverlight fără a ține cont de browser-ul sau platforma utilizatorilor.

Oferă suport pentru HTTP peste TCP. Se poate conecta la servicii ASP.NET AJAX, WCF, SOAP. Silverlight poate accesa servicii web direct sau folosind un proxy generat de metadatele publicate de serviciul web. Poate intelege o varietate de formate de date folosite de servicii:XML, JSON, RSS și Atom.

Include LINQ (Language-INtegrated Query), pentru accesul la date folosind o sintaxă nativă intuitivă în limbaje .NET Framework.

Aplicațiile Silverlight rulează în browser. Pentru a rula aplicația, browser-ul trebuie să aibe instalat un plug-in de la Microsoft specific pentru Silverlight. În cazul în care utilizatorii nu au plug-in-ul sunt intrebați automat dacă vor să il instaleze, fără el, neavând acces la nici o parte a aplicație.

Silverlight este doar un plug-in pentru browser cu ajutorului căruia se pot realiza o serie de aplicații grafice interactive, animații vectorizare, cu includere de fisiere audio si video în interioruli unui website. Deși toate acestea erau posibile și cu alte tool-uri cum ar fi Adobe Flash, Java, Shockware, nici unul dintre acestea nu erau integrate într-un mediu de programare la fel de modern și des utilizat ca .NET. Silverlight oferă posibilitatea de a scrie codul din spatele interfeței grafice în C#.

Versiuni

Silverlight 1, prima versiune de Silverlight a fost lansat în 2007. Acesta a constat din prezentarea cadrului de bază care este responsabil pentru interfața cu utilizatorul (UI), interactivitate și date introduse de utilizator, controalele de bază UI, grafică și animație, redare media prin administrarea drepturilor digitale (DRM) și integrarea DOM.

Silverlight 2 a inclus o versiune a NET Framework, implementat complet Common Language Runtime (CLR). Versiunea NET Framework 3.0 urma să poată executa programe scrise în oricare limbaj NET.

Silverlight 3 a fost anunțat pe 12 septembrie 2008 și a prezentat la MIX09 din Las Vegas pe 18 martie 2009. Suportă accelerarea grafică a hardware-ului – permite descărcarea compunerii video și grafice compunere a fi pe un GPU. Acest lucru poate reduce dramatic utilizarea procesorului și permite rdarea video-urilor HD pentru a funcționa pe calculatoare mai vechi.

Silverlight 4- versiunea finală a fost lansat pe 15 aprilie 2010. Silverlight 4 aduce funcționalități noi precum suportul pentru printare, funcția drag and drop sau cea de WCF RIA care face mai ușoară recuperarea, manipularea și salvarea datelor pe server. O altă noutate este funcția Pivot care reprezintă o modalitate de a vizualiza și de a lucra foarte ușor cu seturi mari de date, această nouă funcție reușind să valorifice cantitatea tot mai mare de informație disponibilă. Printre companiile care folosesc Silverlight ca aplicație de business se numără companii precum Dell, Siemens, Bank of America, Xerox, Asociated Press sau SAP.

Silverlight 5 a fost lansat pe 9 decembrie 2011. Noile caracteristici incluse sunt decodarea media hardware pentru H.264, Vector Post-scriptum pentru a îmbunătăți calitatea de ieșire, dimensiunea fișierului și o grafică mai bună cu suport 3D care utilizează API-ul XNA pe platforma Windows pentru a câștiga nivel de acces scăzut la GPU pentru vertex shaders și de nivel scăzut primitiv 3D. Silverlight 5 poate funcționa pe procesoare pe 64 de biți înseamnă că poate fi rulat sub un browser pe 64 de biți.

XAML (Extensible Application Markup Language)

Extensible Application Markup Language este un limbaj markup declarativ. În mod specific, permite inițializarea de obiecte și setarea proprietatilor acestora, folosind o structură de limbaj ce descrie relații ierarhice între obiecte. În timp ce fisierele XAML în sine permit crearea interfeței utilizator, într-un mod similar cu fisierele HTML, există fisiere de cod, care corespund fiecărui fisier XAML, ce permit separarea logicii de tratare a evenimentelor și manipulare obiectelor ce constituie interfața grafică.

Standardele XML permit introducerea de date în noduri ca atribute sau sub formă de conținut. O facilitate foarte utila prezentă în limbajul XAML este sintaxa elementelor proprietate, care permite acordarea de valori complexe proprietăților, cum ar fi, de exemplu, definirea unui fundal ca un gradient dat prin culorile în anumite puncte "ancora". Sintaxa de baza presupune adăugarea în interiorul nodului obiect, a unuia sau a mai multor noduri de forma NumeObiect.NumeProprietate, iar în interiorul acestora, a unor noduri ValoareProprietate. Această sintaxă are atât avantajul de a permite definirea unor proprietăți practic oricât de complexe, cât și acela al faptului că lasă loc pentru conținutul propriu-zis al obiectului părinte. Astfel, definirea proprietăților poate fi interpretată ca un header, după care se poate adăuga conținutul.

Un alt tip de proprietate implementat în XAML este cel al proprietăților atașate, adică al unor proprietăți pe care elementul respectiv nu le deține în mod nativ, dar dacă îi sunt atașate le poate interpreta prin referire la proprietățile elementului părinte. Spre exemplu proprietățile Top și Left (distanța față de marginea de sus, respectiv din stânga a containerului), sunt dependente de contextul în care se aflî elementul respectiv.

O ultimă notă asupra sintaxei XAML va face referire la tratarea evenimentelor. Acestea sunt definite în XAML în mod foarte asemănător cu HTML. Asocierea dintre lansarea unui eveniment și metoda ce îl tratează se face prin adăugarea la elementul vizat a unei proprietăți de forma NumeEveniment="FunctieHandler()".

Crearea unui proiect Silverlight

Din meniul Visual Studio vom selecta File->New Project. Vom numi aplicația Proiect demonstrativ. (Fig 4-1)

După ce am apasat butonul „OK”, Visual Studio ne va afișa o fereastră de dialog prin intermediul căreia putem alege să ne creem doar un proiect Silverlight specificat la pasul anterior sau, dacă se consideră necesar, adaugarea automată a unui proiect de tip (fig. 2).

ASP.NET Web Application Project

ASP.NET Web Site

ASP.NET MVC Web Project

pentru găzduirea proiectului Silverlight. Deasemeni putem alege versiunea de Silverlight pe care o dorim. Noi vom folosi Silverlight 4. (Fig 4-2)

Visual Studio crează o soluție care are o aplicație client Silverlight și un server de aplicatii web ASP.NET în ea.

Prin crearea unei aplicații Silverlight, se adaugă implicit un fișier MainPage.xaml și App.xaml, desigur, cu fișierele care conțin codul asociat corespunzător (care pot să fie scrise în C#, Visual Basic, Ruby sau Python). Solution Explorer în cazul proiectului nostru arată în felul următor (Fig 4-3):

Fișierele XAML sunt niște fisiere de tip XML, care în plus față de acestea pot să specifice si sa creeze interfața cu utilizatorul pentru aplicațiile Silverlight și/sau WPF. Fișierul App.xaml este folosit de obicei pentru declararea de resurse la nivel de aplicație (stiluri, efecte etc.), în timp ce fișierul App.xaml.cs (App.xaml.vb etc.) asociat este folosit pentru tratarea evenimentelor aplicației (Application_Startup, Application_Exit și Application_UnhandledException, etc.).

Fisierul MainPage.xaml este în mod implicit primul control UI care este încarcat în momentul în care aplicația este rulată. Putem să personalizăm conținutul acestei pagini pentru a obține interfața cu utilizatorul dorită prin adăugarea de controale. Fișierul asociat care conține codul este utilizat pentru manipularea evenimentelor controalelor adăugate anterior în MainPage.xaml.

MainPage este un control de tip utilizator, care implementează două namespace-uri implicite și care este caracterizat printr-o înalțime și o lațime (customizabile, desigur). În interiorul acestui control există un container, numit LayoutRoot.

<UserControl x:Class="StartingSilverlight.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">

</Grid>

</UserControl>

În interiorul acestui container vom adăuga controalele noastre.

Pentru prima aplicație Silverlight, vom crea un program ce ne va aduge dintr-o baza de date un tabel. Astfel, vom adăuga un Canvas. În interiorul Canvas-ului vom mai adăuga un DataGrid, și un Button.

Pentru tratarea evenimentului care apare în momentul apăsării butonului btnAction, deschidem fișierul atașat Page.xaml.cs și modificăm metoda btnAction_Click după cum este prezentat mai jos:

private void butSayHello_Click(object sender, RoutedEventArgs e)

{

txtMesaj.Text = "Salutare " + txtNume.Text + " !"; }

Astfel, la rulare, se va deschide browser-ul default in care deja avem pornita aplicatia noastra. Dupa completarea numelui și apăsarea butonului, ni se va afișa mesajul (Fig. 4-4).

La rularea proiectului, Visual Studio compilează automat tot codul și toate fișierele XAML. Rezultatul este un assembley .NET, care la final este „împachetat” împreună cu toate resursele aplicației într-un fișier cu extensia .xap. Fișierele .xap folosesc algoritmul de arhivare .zip pentru a minimiza mărimea fișierului pe care utilizatorii/clienții trebuie să îl descarce.

Figure 4-5

Dupa cum se poate observa și în imaginea de mai sus (Fig. 4-5), totul este cuprins într-o singură fereastră. Avem în dreapta Solution Explorer și tabul de Properties pentru obiectul selectat, în stânga jos avem codul XAML pentru fereastra noastra iar în stânga sus avem designul corespondent al paginii.

Mai departe, vom pune în aplicația noastră un DataGrid și vom demonstra cum putem aduce în el un tabel dintr-o bază de date. Pentru conectarea la o bază de date în Web.config ne vom crea un connectionStrings.

<connectionStrings>

<add name="conString4Silverlight" connectionString=

"Data Source=beni\sqlexpress;Initial Catalog=BazaTest;Persist Security Info=True;UserID=sa;Password=Parola123" providerName="System.Data.SqlClient"/>

</connectionStrings>

La SilverlightApplication.Web vom mai adauga: LINQ to SQL Classes (DataClasses1.dbml), Silverlight -enable WCF Service (Service.svc). Vom afișa întrun grid datele din tabela Tasks.

În Service.svc.cs creem o funcție care selecteaza datele:

using System;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Activation;

using System.Collections.Generic;

using System.Text;

namespace StartingSilverlight.Web

{ public class Service1 : IService1

{

public List<TasksGetResult> GetTasks()

{

DataClasses1DataContext db = new DataClasses1DataContext(); var rez = from p in db.TasksGet() select p; return rez.ToList();

}

}

}

Dupa ce vom da Build Web, vom adăuga serviciul ca referința la aplicația client (Fig 4-6) .

Figure 4-6

Figure 4-7

ServiceReferences.ClientConfig

<configuration>

<system.serviceModel>

<bindings>

<customBinding>

<binding name="CustomBinding_Service">

<binaryMessageEncoding />

<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

</binding>

</customBinding>

</bindings>

<client>

<endpoint address=http://localhost:63436/Service.svc binding="customBinding"

bindingConfiguration="CustomBinding_Service"

contract="ServiceReference1.Service"=

"CustomBinding_Service"/>

</client>

</system.serviceModel>

</configuration>

În MainPage.xaml vom adăuga un DataGrid:

<UserControl xmlns:data="clrnamespace:System.Windows.Controls;assembly= System.Windows.Controls.Data" x:Class="StartingSilverlight.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">

<Grid x:Name="LayoutRoot">

<data:DataGrid x:Name="dg"HeadersVisibility="All" ColumnWidth="85" RowHeight="30"

IsReadOnly="True" CanUserResizeColumns="False">

</data:DataGrid>

</Grid>

</UserControl>

În MainPage.cs vom crea o funcție care va popula datagrid-ul astfel:

using System;

using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.ServiceModel;

namespace StartingSilverlight

{ public partial class MainPage : UserControl

{

public MainPage()

{InitializeComponent();

} private void butSayHello_Click(object sender, RoutedEventArgs e) {

EndpointAddress adresa = new EndpointAddress(new

Uri(Application.Current.Host.Source, "../Service1.svc")); ServiceReference1.Service1Client dateServiciu = new

ServiceReference1.Service1Client("BasicHttpBinding_IService1", adresa);

dateServiciu.GetTasksCompleted += new

EventHandler<ServiceReference1.GetTasksCompletedEventArgs>(dateServiciu_GetTasksCompleted

); dateServiciu.GetTasksAsync();

} void dateServiciu_GetTasksCompleted(object sender, ServiceReference1.GetTasksCompletedEventArgs e)

{

tabel.ItemsSource = e.Result;

}

}

}

Rulând aplicația vor fi afiște datele din tabela noastra.

Aplicatia „Gestiune Online”

Introducere

Aceasta aplicatie a fost creata pentru a veni in ajutorul micilor intreprinzatori. Persoana fizice autorizte sau chiar firme de mici dimensiuni.

Principalele obiective ale aplicației sunt:

Ținerea unei contabilități simple de genul Registru Încasări – Plăți în sistem real pentru Persoanele Fizice Autorizate.

Emiterea de formulare de facturi pentru serviciile prestate sau pentru produsele vândute.

Menținerea unui centralizator cu nomenclatorul de produse și clienții din baza de date.

Un simplu organizator de task-uri util pentru evidențierea obiectivelor propuse si indeplinirea lor.

Figure 5-1 Diagrama aplicatiei

Structura bazei de date

Aplicația este realizată în Silverlight 4 folosind Microsoft Visual Studio 2010, iar pentru baza de date s-a folosit SQL Server 2008 R2.

Principalele tabele (Fig. 5-1) în care se stochează informația sunt denumite reprezentativ pentru ceea ce conțin, și anume:

Cheltuieli – tabela de cheltuieli,

Facturi – tabela de facturi,

Nomenclator – tabela de nomenclator de produse și servicii,

Parametri – tabela ce conține anumiți parametri folosiți,

pozFacturi – tabelă folosită în cazul în care o factură introdusă are mai multe poziții,

rapFacturi – tabelă folosită pentru generarea facturi,

Tasks – tabela task-uri ,

Terti – tabela ce conține clienții, terții.

Fig. 5-2 Diagrama bazei de date

De asemenea pentru modelarea datelor din baza de date folosim proceduri stocate. Utilizarea procedurilor stocate presupune parcurgerea următoarelor etape:

1.Crearea procedurii (prin intermediul comenzii CREATE PROCEDURE)(Fig. 5-2)

2.Executarea de către utilizator (prin intermediul unei comenzi EXEC)

3.Compilarea (în timpul unei comenzi EXEC serverul va compila și optimiza procedura)

4.Executarea de către server (conform planului de execuție compilat al procedurii)

Pentru a crea o procedură stocată se poate iniția o nouă interogare în baza de date (NewQuery) și se va utiliza comanda:

CREATE PROCEDURE nume_procedura AS instrucțiuni_SQL

Pentru a modifica o procedură stocată se va utiliza comanda:

ALTER PROCEDURE nume_procedura AS instrucțiuni_SQL

Procedurile create au următoarele funcții: aduce date din tabele menționate mai sus,adaugă șterge și modifică datele ce le utilizăm în aplicația noastră.

Descrierea aplicației

Aplicatia fiind o aplicație web folosește arhitectura client – server. Clientul emite o cerere către web-serverul care găzduieste aplicația. Web-serverul construiește pagina și o trimite ca răspuns la client.

O pagină Silverlight, este de fapt un UserControl format din: partea vizuală – controalele propriu-zise care vor fi vizualizate de către utilizator codul .NET care va fi executat pe server atunci când se face o cerere către respectiva pagină.

Accesul la aplicație se face pe baza unui user și a unei parole criptate în baza de date (Fig. 5-3).

Fig. 5-4 Logarein aplicatie

Dupa ce ne logăm cu user și parola, aplicația pornește pagina de start MainPage.xaml care conține meniul Aplicației (Fig. 5-4).

Fig. 5-5 Pagina principala

Aceasta pagina conține în primul rând o secțiune cu datele firmei pentru care se ține contabilitatea, o secțiune cu Task-uri la zi și încă 3 butoane care ne vor deschide alte pagini. În continuare voi prezenta pe rând fiecare dintre aceste secțiuni.

Date firmă

Aceasta secțiune cuprinde datele firmei pentru care se ține contabilitatea și pe care se facturează. Aceste date sunt încărcate automat din baza de date din tabela Parametri. Deasemeni apasând butonul Modică, aceastea pot fi modificate și salvate în baza de date.

Când apăsăm butonul „Modifica” o să devină active textboxurile cu datele firmei si noi o să le putem modifica dupa cum se poate vedea in imaginile de mai jos.(Fig 5.5) Iar apoi vor putea fi salvate apăsând butonul „SAVE”

Fig. 5-6 Modificare date firmă Fig. 5-7 Salvare date firma

Task-uri

Aceasta secțiune reprezintă un organizator simplu care afișează într-un listbox atât taskurile cu data scadentă depășită (acestea vor aparea cu simbolul !!! înainte) cât și task-uri scadente în următoarele 7 zile (Fig. 5-7).

Fig. 5-8Lista cu task-uri

Atunci când dăm click pe un task, în chenarul de mai jos ne este afișată descrierea detaliată a task-ului respectiv. Dacă apăsăm buton „done” și task-ul era cu ziua scadentă depășită, acesta dispare din listă. Daca aceasta nu avea ziua scadentă depășită, va rămâne în lista până când va trece ziua scadentă, dar în fața lui va aparărea atributul „(done)” ca în imaginea din dreapta de mai sus (Fig. 5-7).

La fel de simplu putem adăuga un task nou, apăsând buton „+” din dreapta. Aceasta va afisa o fereastră peste secțiune de task-uri în care vom selecta Data Scadentă și vom scrie Denumirea task-ului și Task-ul propriu-zis (Fig. 5-8) .

Fig. 5-9Adaugare task

Aceasta parte am adăugato în ideea ca va fi folositoare pentru notarea activitatilor pe care o persoana trebuie sa le desfășoare în cadrul activitătii prestate cum ar fii depunerea declarațiilor la Finanțe, plata facturilor, comenzi cerute de anumiți clienți pentru o perioada mai îndelungată, etc.

Nomenclator

Apasând butonul Nomenclator, ni se deschide o noua fereastră (fig. 14) care, ca și tip, este un ChildWindow. Această fereastră este defapt un centralizator cu toate produsele din stocul de vânzare al firmei și toate serviciile prestabilite pe care firma le poate presta.

În stânga avem o listă cu toate aceste produse și servicii aranjate în ordinea în care au fost introduse. Dând click pe un produs din listă, în dreapta vor fi afișate detalii despre acel produs. Deasemeni, după ce am selectat un produs din listă, putem să îl stergem folosind butonul Delete de la tastatura sau butonul „–” de pe fereastra, sau putem să îl modificăm apăsând butonul în formă de creion.

Putem deasemeni să adăugăm un nou produs sau serviciu în nomenclator. Apăsând butonul plus, textbox-urile din dreapta devin goale și editabile, astfel ca putem introduce un nou produs.

Toate aceste operații sunt făcute folosind Proceduri stocate în baza de date specifice pentru select, update, delete și insert. Folosind fisierul de tip dbml cu numele LinqDB, aceste proceduri sunt apelabile din program prin serviciul WCF dbService.

[OperationContract]

List<NomenclatorGetResult> NomenclatorGet();

[OperationContract]

void NomenclatorSave(int cod,string tip, string denumire, string UM,int stoc, float pret_stoc, string furnizor);

[OperationContract]

void NomenclatorUpdate(int nr,string tip, string denumire, string UM,int stoc, float pret_stoc, string furnizor);

[OperationContract]

void NomenclatorDelete(int nr);

Contabilitate

O altă funcție a programului este cea numită „Contabilitate” la aceasta avem acces apăsând butonul cu același nume de pe prima pagina. Aici ne sunt afișate cheltuielile si încasarile pe o anumită perioadă selectată de utilizator. (Fig. 5-9).

Figure 5-10 Contabilitate

Afișarea datelor

Atunci când pagina se încarcă, programul calculează automat, pe o perioadă nelimitată, sumele de mai jos, și anume: Încasări, Cheltuieli, Diferența dintre Încasări și Cheltuieli, suma datorată pentru Impozit pe perioada respectivă, suma datorată la Casa de asigurări de Sănătate și Profitul General (fig. 16).

Acest calcul poate fi făcut pe orice perioada. E nevoie doar să selectăm perioada și să apăsăm butonul „Calcul”.

Selectând o perioadă de sus, avem trei opțiuni de afișat în DataGrid:

Cheltuieli – afișează toate ieșirile pe perioada respectivă introduse de la butonul „Adauga chetuiala”

Încasări – afișează toate intrările pe perioada respectiva introduse de la Facturare

Registru – afișeaza, la fel ca în registrul fizic de încasări și plăți un centralizator ordonat dupa data care cuprinde atât intrările cât și ieșirile. Acest centralizator a fost realizat folosind un query de UNION:

(select [Document] as Nr, Data, isnull((select Firma from Terti where id=che.idTert),Tert) as Tert,Reprezentand as Explicatii,Suma as Platit, 0 as Incasat from cheltuieli che where @dataStart<=Data and Data <=@dataEnd

union

select 'factura ' + Ltrim(Str(NrFactura)) as Nr, Data, (select max(Firma) from Terti where id=fa.idClient) as Tert,isnull((select Denumire from nomenclator where cod=fa.codServiciu),Serviciu) as Explicatii, 0 as Platit, (Pret*Cantitate) as Incasat from facturi fa where @dataStart<=Data and Data <=@dataEnd ) order by Data

Adăugarea unei cheltuieli

Folosind butonul „Adauga cheltuiala” putem introduce în baza de date o nouă înregistrare de ieșire. Deasupra butonului ne va aparea o mica fereastră în care vom fi nevoiți să introducem data pe care e inregistrată cheltuiala, terțul (într-un AutoCompleteBox în cazul în care e un Tert din baza noastra de date), documentul doveditor, explicatii a ce reprezintă cheltuiala și suma, după care apăsăm butonul Save. Se va face automat refresh atât la tabel cât și la calculul de jos.

Fig. 5-11 Adaugare cheltuiala

Stergerea unei cheltuieli sau a unei încasări se face selectând înregistrarea din tabel și apăsând butonul „Delete” de la tastatură.

Facturare

Apăsând butonul „Facturare” din meniul principal, ni se deschide o fereastră în care avem de introdus datele de facturare (Fig. 18).

Figure 5-12 Facturare

Alegerea clientului

Clientul pe care va fi emisă factura, poate să fie sau nu în baza noastra de terți. În cazul în care el e în baza noastra de terți, simpla tastare a numelui său în căsuța corespunzătoare, va afisa o listă de tip AutoComplete filtrată de ceea ce am scris în textbox (Fig 5-12).

Dacă clientul nu se află în baza, acesta trebuie adăugat, folosind butonul „+” din dreptul. Atunci când apăsăm plus, va apare o fereastră deasupra în care va trebui să introducem datele clientului, dupa care vom apăsa butonul „Salveaza clientul”. Reusita salvării va fi confirmată într-un label de Status sus cu mesajul „Salvare reusita”.

Fig. 5-13 Adaugare factura Fig. 5-14Adaugare tert

Pentru folosirea câmpului de tip AutoComplete, am folosit o procedura stocata care îmi aduce în program toți clienții într-o listă.

[OperationContract]

List<TertiGetResult> TertiGet();

public List<TertiGetResult> TertiGet()

{

LinqDBDataContext bd = new LinqDBDataContext(); var rez = from p in bd.TertiGet() select p; return rez.ToList();

}

Lista de clienți am stocat-o într-o listă de obiecte TertiGetResult

System.Collections.ObjectModel.ObservableCollection<Contabilitate__PFA.serviciuWeb.TertiG etResult> listaClienti = new ObservableCollection<serviciuWeb.TertiGetResult>();

void LoadData()

{

EndpointAddress adresa = new EndpointAddress(new

Uri(Application.Current.Host.Source, "../Services/dbService.svc")); serviciuWeb.IdbServiceClient dateServiciu = new

ServiciuWeb.IdbServiceClient("BasicHttpBinding_IdbService", adresa);

dateServiciu.TertiGetCompleted += new

EventHandler<serviciuWeb.TertiGetCompletedEventArgs>(dateServiciu_ClientiGetCompleted); dateServiciu.TertiGetAsync();

}

void dateServiciu_ClientiGetCompleted(object sender, serviciuWeb.TertiGetCompletedEventArgs e)

{ listaClienti.Clear(); listaClienti = e.Result;

List<string> temp = new List<string>();

for (int i = 0; i < listaClienti.Count; i++) temp.Add(listaClienti[i].Firma);

acbClienti.ItemsSource = temp;

}

În cazul în care se adăugă un nou client, câmpul acbClienți își face Refresh automat pentru a putea găsi deja clientul abia introdus. La fel se procedează și în cazul alegerii serviciului.

Alegerea serviciului

La fel cum am procedat la alegerea clientului, se va proceda și la serviciu (fig. 20) . Aceasta poate căutat în baza de date sau poate fi introdus folosind butonul „+” corespunzător. Spre deosebire de alegerea clientului, aici nu e obligatoriu ca serviul sau produsul vandut sa adaugat în baza de date dacă nu îl avem. Totuși, dacă am ales serviciul din baza de date, se vor completa automat câmpurile UM si Pret cu TVA (pot fi modificate).

Odată completate toate câmpurile, putem apăsa butonul „Salvare” care va salva Factura respectivă în baza de date sau putem apasă butonul „Facturare” care va salva factura și va scoate formularul de factură. Aceste date sunt salvate în baza de date prin ServiceReference folosind o altă procedură stocată.

dateServiciu.FacturaSaveAsync(nrFact, nrPoz, idClient, txtData.SelectedDate.Value, codServiciu, Serviciu, PretUnitar, cant);

Aceasta modalitate ne oferă posibilitatea de a scoate o factură cu o singură poziție în conținut. Mai departe voi prezenta cum trebuie procedat pentru a scoate o factură cu mai multe poziții.

Mai multe poziții pe factură

Dacă dorim să adăugăm mai multe poziții pe aceeași factură, vom folosi butonul „+ mai multe” (Fig 5-14). Acesta va crea o listă în care vom putea adăuga pe rând câte poziții dorim, după care, la fel ca în cazul facturării simple, vom apăsa butonul „Salvare” sau „Factureaza”.

Figure 5-15 Adaugare mai multe pozitii

Această facilitate a fost realizată folosind o tabelă temporară pozFactură, în care se copiază pe rând fiecare poziție din factură. Atunci când utilizatorul apasă butonul de salvare sau facturare, toate acele poziții sunt copiate în tabela Facturi folosind o alta procedură stocată.

CREATE procedure [dbo].[CopyPozFacturi]

as begin

insert into facturi

select * from pozFacturi

delete from pozFacturi end

În imaginea de mai jos se poate observa o parte din tabela Facturi în care găsim înregistrări atât cu o poziție cât și cu mai multe (fig. 22). Astfel facturile cu numărul 1și 4 au câte o poziție fiecare, factura numărul 2 are 5 poziții și factura cu numărul 3 are 3 poziții.

Querry-ul de mai jos se ocupa de salvarea unei poziții de factură:

CREATE procedure [dbo].[FacturaSave] (@nrfact int,@nrPoz int, @idClient int,@data datetime,@codServ int, @serviciu char(50),@pret_unitar float,@cantitate float)

as begin

declare @nr int

set @nr=(select max(nr)+1 from facturi)

insert into facturi

values(@nr,@nrfact,@nrPoz,@idClient,@data,@codServ,@serviciu,ROUND(@pret_ unit ar,3),@cantitate)

end

Mai jos e o listă cu toate funcțiile de serviciul web care aduce, inserează și modifică datele din baza de date:

[ServiceContract]

public interface IdbService { [OperationContract]

List<TertiGetResult> TertiGet();

[OperationContract]

void TertiSave(int id, string Firma, string Registru, string CIF, string Sediu, string Judet, string Cont, string Banca);

[OperationContract]

List<FacturaGetResult> FacturaGet();

[OperationContract]

void FacturaSave(int nrFactura,int nrPoz, int idClient, DateTime data, int codServ,string serviciu, float pret_unitar, float cantitate);

[OperationContract]

List<pozFacturaGetResult> pozFacturaGet();

[OperationContract] void CopyPozFacturi(); [OperationContract]

void pozFacturaSave(int nrFactura, int nrPoz, int idClient, DateTime data, int codServ, string serviciu, float pret_unitar, float cantitate); [OperationContract]

List<ParametriGetResult> ParametriGet();

[OperationContract]

void ParametriSave(string name,string value);

[OperationContract]

List<NomenclatorGetResult> NomenclatorGet();

[OperationContract]

void NomenclatorSave(int cod,string tip, string denumire, string UM,int stoc, float pret_stoc, string furnizor); [OperationContract]

void NomenclatorUpdate(int nr, string tip, string denumire, string UM, int stoc, float pret_stoc, string furnizor); [OperationContract]

void NomenclatorDelete(int nr);

[OperationContract]

void RaportFactura(int nrFactura); [OperationContract]

List<CheltuieliGetResult> CheltuieliGet(DateTime dataStart, DateTime dataEnd); [OperationContract]

List<IncasariGetResult> IncasariGet(DateTime dataStart, DateTime dataEnd);

[OperationContract]

List<RegistruGetResult> RegistruGet(DateTime dataStart, DateTime dataEnd);

[OperationContract]

void CheltuieliSave(int nr, int idTert, string tert, DateTime data, string document, string explicatii, double suma);

[OperationContract]

List<TasksGetResult> TasksGet();

[OperationContract]

void TasksSave(int nr, DateTime data, string denumire,string text);

[OperationContract] void TaskDone(int nr);

[OperationContract]

void LogIn(string user, string pass);

}

Am șters spațiile libere dintre fiecare funcție pentru a economisi spatiu.

Raportul de factură

Atunci când utilizatorul apasă butonul de facturare, aplicație execută Procedura stocată RaportFactura care copiază toate datele necesare pentru factura cu numărul @nrfact în tabela rapFactura.

ALTER procedure [dbo].[RaportFactura]

(@nrfact int) as begin delete from rapFactura

insert into rapFactura select nrFactura, Data,

(select max(Firma) from Terti where id=fa.idClient) as Firma,

(select max(Registru) from Terti where id=fa.idClient) as Registru, (select max(CIF) from Terti where id=fa.idClient) as CIF,

(select max(Sediu) from Terti where id=fa.idClient) as Sediu,

(select max(Judet) from Terti where id=fa.idClient) as Judet,

(select max(Cont) from Terti where id=fa.idClient) as Cont,

(select max(Banca) from Terti where id=fa.idClient) as Banca, codServiciu,

isnull((select max(Denumire) from nomenclator where cod=fa.codServiciu),Serviciu) as Denumire,

Pret, Cantitate,

isnull((select max(UM) from nomenclator where cod=fa.codServiciu),'RON') as UM, nrPozitie

from Facturi fa where NrFactura=@nrfact

end

După ce procedura a fost executată, programul deschide o pagina aspx ce conține un ReportViewer în care va fi încărcat Formularul de factură. Pentru a putea fi deschisa o pagină aspx din partea de .Web a proiectului, în fișierul Default.aspx a trebuit adăugată următoarea structură:

<form id="RaportFactura" action="Formulare/RaportFactura.aspx" method="post" target="_blank" >

<input runat="server" type="hidden" id="nrClient" /> </form>

Atunci când utilizatorul apasă butonul de facturare, următorul cod ne trimite la pagina aspx ce contine Raportul de factura.

HtmlDocument doc = HtmlPage.Document;

HtmlElement h1 = doc.GetElementById("nrClient"); h1.SetAttribute("value","1"); doc.Submit("RaportFactura");

În pagina RaportFactura.aspx am adăugat doar un simplu ReportViewer. Astfel, codul pagini este următorul:

<body>

<form id="form1" runat="server"> <div>

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"

Font-Size="8pt" InteractiveDeviceInfos="(Collection)"

WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="869px" Height="704px">

<LocalReport ReportPath="Formulare\RaportFactura.rdlc"> <DataSources>

<rsweb:ReportDataSource DataSourceId="sqlFactura" Name="DataSet1" /> </DataSources>

</LocalReport>

</rsweb:ReportViewer>

<asp:SqlDataSource ID="sqlFactura" runat="server"

ConnectionString="<%$ ConnectionStrings:contabilPFAConnectionString %>" SelectCommand="SELECT * FROM [rapFactura]"></asp:SqlDataSource> </div>

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager> </form>

</body>

Creare și editarea unui Raport rdlc se poate face tot în Visual Studio 2010. Astfel, acest raport este format din tabele și label-uri care sunt populate cu date din tabela rapFactura (fig. 23).

Fiecare celulă de tabel poate să conțină un câmp sau o expresie formată din mai multe câmpuri. Acestea se editează selectând opțiunea Expression după ce am dat click dreapta pe celula pe care vrem să o edităm (fig. 24).

Exemple de expresii folosite pentru o factură:

Nume firmă =Fields!Firma.Value

Număr factură =Fields!Numar.Value

Data =CDate(Fields!Data.Value).ToShortDateString()

Preț unitar fără TVA =Fields!Pret_cu_TVA.Value*"0.76"

Valoare poziție fără TVA =Fields!Pret_cu_TVA.Value*Fields!Cantitate.Value*"0.76"

Valoare poziție =Fields!Pret_cu_TVA.Value*Fields!Cantitate.Value

Total TVA =(Sum(Fields!Pret_cu_TVA.Value*Fields!Cantitate.Value*"0.24", "DataSet1")).ToString() + " RON"

Pret Total= (Sum(Fields!Pret_cu_TVA.Value*Fields!Cantitate.Value,

"DataSet1")).ToString() + " RON"

Toate aceste date sunt preluate folosind un dataset configurat inițial care arată astfel:

Astfel, rezultatul final al acestui raport se deschide într-o pagină noua de browser și arată în felul următor (fig. 26):

Folosind butonul de export din partea de sus putem face download la factură în format Word sau PDF, gata să fie imprimată, semnată, stampilată și încasată. Pe pagina următoare e aceeași factură exportată în Word.

Concluzie

În concluzie, având în vedere toate aceste rezultate, consider că această aplicație va fi de folos persoanelor care nu își permit să își cumpere un program scump de gestiune și facturare, cu ea reușind sa economisească timp și bani, putând să își concentreze atenția asupra afacerii.

Similar Posts