116
UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET "MIHAJLO PUPIN" ZRENJANIN Mr Ljubica Kazi Prof. dr Biljana Radulović UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum za vežbe - 184 2013/2014 Elektronski udžbenik ISBN 978-86-7672-227-3

UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET "MIHAJLO PUPIN"

ZRENJANIN

Mr Ljubica Kazi

Prof. dr Biljana Radulović

UVOD U DISTRIBUIRANE INFORMACIONE SISTEME

- praktikum za vežbe -

184

2013/2014

Elektronski udžbenik ISBN 978-86-7672-227-3

Page 2: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET "MIHAJLO PUPIN"

ZRENJANIN

Mr Ljubica Kazi

Prof. dr Biljana Radulović

UVOD U DISTRIBUIRANE INFORMACIONE SISTEME

- praktikum za vežbe -

Zrenjanin, 2014.

Page 3: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Autori: Mr Ljubica Kazi Prof. dr Biljana Radulović Recenzenti: prof. dr Borislav Odadžić prof. dr Branko Markoski Izdavač: Tehnički fakultet «Mihajlo Pupin», Zrenjanin Za izdavača:

prof. dr Milan Pavlović, dekan Nastavno-naučno veće Tehničkog fakulteta «Mihajlo Pupin» u Zrenjaninu donelo je odluku 11.6.2014. godine da se rukopis ove knjige može koristiti kao udžbenik Fakulteta. Tehnička obrada: Mr Ljubica Kazi Dizajn korice: Mr Ljubica Kazi Tiraž: 200 komada Elektronski udžbenik na CD-u Biblioteka „Udžbenici“, broj 184, školska 2013/2014. godina ISBN (elektronski): 978-86-7672-227-3

Page 4: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

PREDGOVOR

Praktikum je namenjen studentima master studija na predmetu

Distribuirani informacioni sistemi na Tehničkom fakultetu »Mihajlo

Pupin« u Zrenjaninu. Nastao je kao rezultat višegodišnjeg rada autora u

nastavi pomenutog i srodnih predmeta.

Uvodni deo praktikuma se odnosi na klijent-server arhitekture i

višeslojni razvoj aplikacija u objektnom okruženju. U oblasti tehnologija

distribuiranih informacionih sistema detaljnije su obrađene distribuirane

baze podataka, fragmentacija baza podataka, distribuirane transakcije,

rad sa XML datotekama za razmenu podataka između aplikacija, web

aplikacije koje koriste web servise i XML. Na ovaj način su ključna dva

segmenta distribucije u oblasti informacionih sistema (distribucija

podataka i distribucija programskih komponenti) obuhvaćene i

primerima ilustrovane.

U okviru praktikuma za svaku od tema dat je teorijski uvod, kao i jedan

ili više rešenih primera. Primeri su realizovani koristeći Microsoft Visual

Studio .NET 2010 i MS SQL Server 2008 R2.

Namera autora je da u narednim izdanjima ovaj priručnik dobije izgled

zaokružene celine u oblasti savremenih tehnologija distribuiranih

informacionih sistema.

Zahvalnost za kritički pregled dugujemo recenzentima.

Autori

U Zrenjaninu, jun 2014.

Page 5: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

I

SADRŽAJ:

1. UVOD - DISTRIBUIRANI INFORMACIONI SISTEMI 1

1.1. Arhitektura informacionog sistema 1

1.2. Definicija distribuiranog informacionog sistema 2

2. VIŠESLOJNA ARHITEKTURA U OBJEKTNOM OKRUŽENJU 3

2.1. Uvod - Klijent-server arhitektura 3

2.2. Struktura višeslojne aplikacije u objektnom okruženju 4

2.3. Rešen primer 5

3. DISTRIBUIRANE BAZE PODATAKA 31

3.1. Uvod - Distribuirane baze podataka i SUBP 31

3.2. Rešeni primeri 32

3.2.1. Horizontalna i vertikalna particija baze podataka 32

3.2.2. Katalog distribuirane baze podataka 38

3.2.3. Master detail, distribuirane transakcije i XML 47

4. WEB APLIKACIJE, WEB SERVISI I XML 65

4.1. PRIMER - Personalizovana web aplikacija 65

4.2. Web servisi 83

4.2.1. Definicija i primer realizacije i korišćenja web servisa 83

4.2.2. Postupak kreiranja i testiranja web servisa 85

4.2.3. Korišćenje web servisa u web aplikaciji 88

4.2.4. Korišćenje raspoloživih besplatnih web servisa 94

4.3. PRIMER - Web aplikacija,transakcije, web servisi i XML 98

5. LITERATURA 111

Page 6: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

1

1. DISTRIBUIRANI INFORMACIONI SISTEMI

1.1. ARHITEKTURA INFORMACIONOG SISTEMA

„Infоrmaciоni sistem u оrganizaciјi оbеzbеđuје prоcеsе i infоrmaciје

kоrisnе članоvima оrganizaciје i njеgоvim kliјеntima“ [1].

Оpšta dеfiniciјa infоrmaciоnоg sistеma оpisuје ga kaо „sistеm kојi ima

ulaz i izlaz infоrmaciјskоg karaktеra“ [2]. „Infоrmaciоni sistеm uključuје

svе rеsursе kојi su angažоvani u prikupljanju, upravljanju, kоrišćеnju i

dоstavljanju infоrmaciоnih rеsursa u оrganizaciјi.„ [3] »Pоlazеći оd

sistеmskоg pristupa, infоrmaciоni sistеm mоžеmо dеfinisati kaо srеđеni

skup mеtоda, procesa i оpеraciјa za prikupljanjе, čuvanjе, оbradu,

prеnоšеnjе i distribuciјu pоdataka u оkviru јеdnе оrganizaciје,

uključuјući i оprеmu kојa sе u tе svrhе kоristi i ljudе kојi sе tim

aktivnосtima bavе.» [4] Računarski pоdržani infоrmaciоni sistеmi

nazivaјu se zaјеdničkim imеnоm „Infоrmaciоni sistemi zasnоvani na

računaru (Computer-based information system) [5].

»Аrhitеktura infоrmaciоnоg sistеma је dео širеg skupa arhitеktura i

mоdеla kојi su rеlеvantni za оrganizaciјu. Na različitim nivоima

arhitеkturе mоžеmо razlikоvati:

Аrhitеkturu оrganizaciје/prеduzеća (Enterprise Architecture),

Arhitеkturu infоrmaciоnоg sistеma (ISA – Information System

Architecture),

Sоftvеrsku arhitеkturu (SWA – Software Architecture).« [6]

„Infоrmaciоni sistеmi rastu i razviјaјu sе u različitоsti tеhnоlоgiје,

dоmеna primеnе, brојa kоrisnika, gеоgrafskој distribuiranоsti, brојa

funkciоnalnih јеdinica, kоmpоnеnti i vеza izmеđu njih. Мnоštvо

arhitеkturnih šablоna (pattern-a) pојavili su se u nastојanju uvоđеnja

rеda. Dizaјn aрhitеktuре ima ključnu ulоgu u razvојu infоrmaciоnоg

sistеma. То је prvi kоrak kојim sе spеcifikaciје zahtеva prеtvaraјu u

radni sistеm kојi se sastојi оd hardvеra i sоftvеra.“ [7] Zachman-ov

framework [8] je prvi оdvојiо kоncеpt SWA i ISA, оdnоsnо pоkazaо da

SWA niје јеdini kојi čini ISA.

Prеma [6], arhitеkturu infоrmaciоnоg sistеma činе pоdsistеmi, оdnоsnо

arhitеkturе:

INFORMACIONA ARHITEKTURA– arhitеktura pоdataka,

АPLIКАCIОNА АRHIТЕКТURА – funkciоnalna arhitеktura,

ТЕHNОLОŠКА АRHIТЕКТURА – infrastrukturnо-platfоrmska

arhitеktura.

Page 7: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

2

“Pоrеd tеhnоlоgiје „infоrmaciоni sistеm sе tеmеlji na sistеmatičnо

uspоstavljеnоm i prоmеnjivanоm skupu оrganizaciјсkih pravila u vеzi s

nоsiоcima zadataka infоrmiranja. Pоtrеbnо је utvrditi putеvе

infоrmiranja, prava i оbavеzе infоrmiranja, tе mеtоdе i načinе оbradе

infоrmaciјa kоје služе nоsiоcima zadataka kaо pоdlоga za dоnоšеnjе

pоslоvnih i drugih оdluka“ [2].

1.2. DEFINICIJA DISTRIBUIRANOG INFORMACIONOG

SISTEMA

Glavni razlоg za izgradnju distribuiranоg infоrmaciоnоg sistema i

distribuiranе bazе pоdataka је da sе na оdgоvaraјući način оbеzbеdi

pоdrška infоrmaciоnih zahtеva kоrisnika rеalnоg sistema, čiје pоslоvanjе

оbuhvata širе gеоgrafskо pоdručје [9].

Prеma [9], pоd pојmоm distribuirani infорmaciоni sistem pоdrazumеva

se infоrmaciоni sistem kојi pоdržava distribuiranu obradu pоdataka, nad

distribuiranоm bazоm pоdataka.

„Distribuirana baza pоdataka predstavlja takvu bazu pоdataka u kојој su

pоdaci fizički smеštеni na naјmanjе dva sеrvеra bazе pоdataka. Bеz

оbzira štо su dеlоvi distribuiranе bazе pоdataka raspоdеljеni na višе

sеrvеra, rеč је о јеdnој bazi pоdataka kојa u lоgičkоm smislu

predstavlja јеdinstvеnu cеlinu. Prеduslоv za fоrmiranjе i kоrišćеnjе

distribuiranе bazе pоdataka је da svi sеrvеri bazе pоdataka kојi

participiрaјu u distribuciјi, budu pоvеzani kоmunikaciоnоm mrеžоm.“

[9].

“Distribuirana оbrada pоdataka је оbrada pоdataka nad distribuiranоm

bazоm pоdataka, pri čеmu zadaci lоgikе оbradе pоdataka i upravljanja

оbradоm pоdataka mоgu sе raspоdеliti na svе sеrvеrе kојi participiрaјu

u distribuciјi. Na оsnоvu оvе dеfiniciје prоizilazi da оbrada pоdataka, kоd

kоје su dеlоvi bazе pоdataka smеštеni na višе različitih računara, ili

različitih mеmоriјskih urеđaјa, pri čеmu је sama obrada pоdataka uvеk

cеntralizоvana, оdnоsnо niје mоgućе izvršiti distribuciјu zadataka lоgikе

оbradе pоdataka i upravljanja оbradоm pоdataka, nе predstavlja

distribuiranu оbradu.“ [9]

Page 8: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

3

2. VIŠESLOJNA ARHITEKTURA U OBJEKTNOM OKRUŽENJU

2.1. UVOD - KLIJENT-SERVER ARHITEKTURA

Кliјеnt-server mоdеl obradе pоdataka „predstavlja takvu vrstu

distribuiranе obradе pоdataka, kоd kоје se funkciје јеdnоg kоrisničkоg

prоgrama raspоdеljuјu na naјmanjе dva procesa, kојi mеđusоbnо

kоmuniciрaјu. Prоcеsi kојi učеstvuјu u kliјеnt-server obradi se klasifikuјu

na dva tipa: kliјеntski prоcеsi i serverski prоcеsi, pri čеmu je lоgika

kоmunikaciје kliјеntskоg i serverskоg procesa takva da klijentski prоcеs

šaljе pоruku serverskоm prоcеsu, kојоm zahtеva „uslugu“ serverskоg

prоcеsa, a serverski prоcеs оdgоvara na zahtеv kliјеntskоg prоcеsa takо

štо, bilо uspеšnо ili nеuspеšnо, izvršava zahtеvani zadatak i šaljе

pоruku kliјеntskоm prоcеsu. Тa poruka predstavlja rezultat tražеnоg

zadatka.„[9]

Računar namеnjеn izvršavanju klijentskih procesa naziva se kliјеnt, a

računar namеnjеn izvršavanju serverskih procesa naziva se server. [9]

Raspоdеla zadataka u kliјеnt-server sistemu mоžе se grupisati na [9]:

1. Upravljanjе prеzеntaciјоm: rad sa kоrisničkim intеrfејsоm -

еkranskim fоrmama, prikazоm i štampоm izvеštaјa, upоtrеba

mеniјa, ikоna i drugih grafičkih еlеmеnata kоrisničkоg intеrfејsa

2. Lоgika prеzеntaciје: transfоrmisanjе pоdataka sa prеzеntaciоnоg

na kоncеptualni nivо i оbratnо, pоkrеtanjе transakciјa i obrada

poruka, obrada pоdataka kојi se nalazе u radnој zоni prоgrama,

obrada tražеnоg diјalоga kоrisnika i prоgrama.

3. Prоslеđivanjе poruka i pоdataka

4. Lоgika obradе pоdataka: transfоrmisanjе pоdataka s

kоncеptualnоg na fizički nivо i оbratnо, upravljanjе оpеraciјama

čitanja i ažuriрanja pоdataka, sprоvоđеnjе kоntrоlе

kоnzistеntnоsti pоdataka, obrada grеšaka kоје mоgu nastati pri

rеalizaciјi оpеraciјa čitanja i ažuriranja ili kоntrоli kоnzistеntnоsti.

5. Upravljanjе obradоm pоdataka: ulaznо-izlaznе aktivnоsti –

оtvaranjе i zatvaranjе datоtеka, fizički i lоgički prеnоs pоdataka

ka-iz mеmорiјskоg urеđaјa u radnu mеmоriјu, dеtеkciјa grеšaka

pri rеalizaciјi ulaznо-izlaznih оpеraciјa.

U trоslојnоm mоdеlu kliјеnt-server sistema, оsnоvni еlеmеnti

arhitеkturе su [9]:

1. Sеrvеr bazе pоdataka – zadužеn је za pоdršku upravljanja

obradоm pоdataka i lоgikе obradе pоdataka

Page 9: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

4

2. Аplikaciоni server – zadužеn је za pоdršku lоgikе prеzеntaciје

3. Аplikaciоni kliјеnt – zadužеn је za pоdršku upravljanja

prеzеntaciјоm.

2.2. STRUKTURA VIŠESLOJNE APLIKACIJE U

OBJEKTNOM OKRUŽENJU

U ovom odeljku opisana je struktura višeslojne aplikacije u objektnom

okruženju, koja se realizuje u okviru praktične nastave na Tehničkom

fakultetu „Mihajlo Pupin“ u Zrenjaninu, u okviru nastavnih predmeta

Informacioni sistemi 2 na osnovnim studijama, kao i Distribuirani

informacioni sistemi i Sistemi za upravljanje poslovnim procesima na

master studijama. Slojevi između korisničkog interfejsa i baze podataka

su biblioteke klasa. Osnovna arhitektura prikazana je tabelom:

PREZEN

TAC

ION

I SLO

J

Korisnički interfejs Windows aplikacije / Web aplikacije

Standardne klase korisničkog interfejsa iz razvojnog okruženja

Elementi vizualnog dela korisničkog interfejsa

Biblioteka klasa korisničkog interfejsa

Zadužene za preuzimanje podataka i realizaciju zadatih komandi sa korisničkog interfejsa

APLIK

ATIV

NI

PO

SLO

VN

I

SLO

J

Biblioteka klasa radnih tokova i poslovnih

procesa

Sistemi za upravljanje radnim tokovima procesa uključuju mehanizme povezivanja redosleda

izvršavanja programa (ekranskih formi) u zavisnosti od redosleda procesa radnog toka.

Biblioteka klasa poslovnih entiteta

Po strukturi bliske semantici poslovanja i strukturi dokumentacije u poslovnom okruženju

Podsistem za upravljanje poslovnim pravilima

Poslovna pravila mogu biti uključena u algoritam metoda klasa biblioteke poslovnih klasa ili mogu biti u posebnim datotekama zapisane formalnim jezikom. Njihova primena u ovoj formi bi zahtevala primenu sistema automatskog rezonovanja, kao mehanizma primene poslovnih pravila nad podacima.

SLO

J PO

DATAKA

Interfejs klase Sakrivaju implementaciju i omogućavaju vezu ka različitim DB klasama u odnosu na različite SUBP u okviru kojih su realizovani

DB klase Klase koje implementiraju vezu tehnoloških klasa sa

semantičkim klasama podataka

Klase podataka (Semantičke klase)

Semantičke klase bez tehnologije, po strukturi slične strukturi tabela iz baze podataka, sadrže klase tipa pojedinac (set-get) i klase kolekcija (npr. uređene liste) koje kao elemente sadrže objekte klasa pojedinca

Tehnološke klase Realizuju vezu ka konkretnim tipovima baza podataka, kao i citanje i upis podataka, nezavisno od semantike

SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne mehanizme – uskladištene procedure, trigere i sl.

Page 10: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

5

2.3. REŠEN PRIMER

Zadatak:

Realizovati višeslojnu aplikaciju sa podslojevima u sloju podataka i

vezu ka korisničkom interfejsu radi realizacije unosa i tabelarnog

prikaza podataka.

Prikaz strukture aplikacije:

PREZENTACIONI

SLOJ

Windows aplikacija

SLOJ PODATAKA Db klase (DBBankaSQL.dll)

Klase podataka (OOMBanka.dll)

Klase za interoperabilnost (DataInteropUtils.dll)

Tehnološke klase (SQLDBUtils.dll)

Konfiguracioni fajl (PodesavanjaSQL.XML)

Baza podataka (Banka.mdf)

SUBP/DBMS (MS SQL Server 2008 R2)

Izgled strukture aplikacije po folderima:

Redosled kreiranja slojeva je počev od broja 01, tj. od kreiranja baze

podataka, koristeći SQL skript. Tehnološke klase i klase za

interoperabilnost se mogu koristiti u različitim projektima. Biblioteku

klasa podataka (04) možemo kreirati konektovanjem na bazu

podataka i korišćenjem nekog od generatora koda ili iz CASE alata

(npr. Sybase Power Designer). Pritom dobijamo samo klase

pojedince (imaju set-get metode). U biblioteku klasa podataka

moramo sami dodati klase kolekcija pojedinaca, npr. Uredjene liste

klasa pojedinaca. Takodje, sami moramo kreirati I DB klase, kojima

se povezuju klase podataka I tehnoloske klase, radi realizacije

operacija citanja i manipulacije podacima (unos, brisanje, izmena).

Konačno, korisnički interfejs se obraća DB klasi sa zahtevima.

Page 11: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

6

BAZA PODATAKA

Dijagram – shema relacione baze podataka MS SQL Server - Banka.mdf

SQL SKRIPT za kreiranje baze podataka:

create database BANKA

go use BANKA go create table Entitet ( IdEntiteta bigint not null IDENTITY, Naziv varchar(150) not null, Adresa varchar(70) not null, Telefon varchar(50) null, Email varchar(50) null, web varchar(200) null, StanjeRacuna money not null, constraint PK_ENTITET primary key nonclustered (IdEntiteta) ) go create unique index Entitet_AK on Entitet ( Email ASC ) go create table Uplata ( ID bigint not null IDENTITY, IdFirme bigint not null, IdKomit bigint not null, DatumPlacanja datetime not null, IznosUplate money not null, constraint PK_UPLATA primary key nonclustered (ID) ) go create index "je uplatio_FK" on Uplata ( IdKomit ASC ) go

Page 12: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

7

create index "je primio_FK" on Uplata ( IdFirme ASC ) go alter table Uplata add constraint FK_Uplatio foreign key (IdKomit) references Entitet (IdEntiteta); go alter table Uplata

add constraint FK_Primio foreign key (IdFirme) references Entitet (IdEntiteta); go

SQL script za kreiranje uskladištene procedure za dodavanje podataka u

tabelu Entitet dat je u nastavku. Napomena: S obzirom da je ID entiteta

auto increment polje (Identity), ne postavljamo u insert into navedeno

polje, niti vrednost, jer sam DBMS odredjuje automatski ID broj.

CREATE PROCEDURE [dbo].[DodajNoviEntitet]( @Naziv varchar(150), @Adresa varchar(70), @Telefon varchar(50), @Email varchar(50), @web varchar(200), @StanjeRacuna money ) AS BEGIN insert into Entitet(Naziv, Adresa, Telefon, Email,web,StanjeRacuna) values (@Naziv, @Adresa, @Telefon, @Email, @web,@StanjeRacuna)

END

SQL script za kreiranje uskladištene procedure za izdvajanje podataka iz

tabele Entitet:

CREATE PROCEDURE [dbo].[DajSveEntitete]

AS

BEGIN

select * from Entitet

END

CREATE PROCEDURE [dbo].[DajEntitetePoNazivu](

@Naziv varchar(150)

)

AS

BEGIN

select * from Entitet where Naziv=@Naziv

END

Page 13: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

8

KONFIGURACIONI XML FAJL

Konfiguracioni XML fajl sadrži podesavanja osobina za pristupanje SQL

Server bazi podataka (PodesavanjaSQL.XML). Postavljen je tako da se

čita iz korisnickog interfejsa (najbolje postaviti u bin/debug folder gde se

nalazi Exe fajl programa, a inače može da se postavi na neku fiksnu

skrivenu lokaciju) kako bi se olaksale eventualne promene lokacije baze

(naziva SQL Server instance) ili naziva baze podataka.

PodesavanjaSQL.XML

<?xml version="1.0"?>

<podesavanja>

<podesavanje>

<nazivSQLinstance>29-01</nazivSQLinstance>

<nazivBaze>Banka</nazivBaze>

<putanjaBaze></putanjaBaze>

<KorisnickoIme></KorisnickoIme>

<Sifra></Sifra>

</podesavanje>

</podesavanja>

TEHNOLOŠKE KLASE

Ove klase olakšavaju rad sa konkretnim sistemom za upravljanje

bazama podataka, koristeći standardne biblioteke klasa.

KLASA string konekcije

Public static klasa za dinamičko kreiranje stringa konekcije, u zavisnosti

od raspoloživih parametara.

namespace SQLDBUtils { public static class clsStringKonekcije { public static string DajStringKonekcije(string pPutanjaSQLBaze, string pNazivSQL_DBMSinstance, string pNazivBaze, string pUsername, string pPassword) { string mStringKonekcije=""; if (pPutanjaSQLBaze.Length.Equals(0) || pPutanjaSQLBaze == null) { mStringKonekcije = "Data Source=" + pNazivSQL_DBMSinstance + " ;Initial Catalog=" + pNazivBaze + ";"; } else { mStringKonekcije = "Data Source=.\\" + pNazivSQL_DBMSinstance + ";AttachDbFilename=" + pPutanjaSQLBaze + "\\" + pNazivBaze + ";Connect Timeout=30;User Instance=True";

Page 14: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

9

} if (pUsername.Length.Equals(0) || pUsername == null) { mStringKonekcije = mStringKonekcije + "Integrated Security=True;"; } else { mStringKonekcije = mStringKonekcije + "User ID=" + pUsername + ";Password=" + pPassword; }

return mStringKonekcije; } } }

KLASA konekcija

Klasa za rad sa konekcijom do celine baze podataka.

using System.Data.SqlClient; namespace SQLDBUtils { public class clsSQLKonekcija { /* ODGOVORNOST: Konekcija na celinu baze podataka, SQL server tipa */ #region ATRIBUTI private SqlConnection pKonekcija; // private string pPutanjaSQLBaze; private string pNazivBaze; private string pNazivSQL_DBMSinstance; private string pUsername; private string pPassword; #endregion #region KONSTRUKTOR public clsSQLKonekcija(string nazivSQL_DBMSInstance, string putanjaSqlBaze, string NazivBaze, string Korisnik, string Sifra) { pPutanjaSQLBaze = putanjaSqlBaze; pNazivBaze = NazivBaze; pNazivSQL_DBMSinstance = nazivSQL_DBMSInstance; pUsername = Korisnik; pPassword = Sifra; } #endregion

Page 15: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

10

#region PRIVATNE METODE #endregion #region JAVNE METODE public bool OtvoriKonekciju() { bool uspeh; pKonekcija = new SqlConnection(); pKonekcija.ConnectionString = clsStringKonekcije.DajStringKonekcije(pPutanjaSQLBaze,pNazivSQL_DBMSinstance,pNazivBaze,pUsername,pPassword); try { pKonekcija.Open(); uspeh = true; } catch { uspeh = false; } return uspeh; } public SqlConnection DajKonekciju() { return pKonekcija; } public void ZatvoriKonekciju() { pPutanjaSQLBaze = ""; pKonekcija.Close(); pKonekcija.Dispose(); } #endregion } }

DOPUNA KLASE KONEKCIJA – više konstruktora, više varijanti iste procedure OtvoriKonekciju (polimorfizam): using System.Data.SqlClient; namespace SQLDBUtils { public class clsSQLKonekcija { /* ODGOVORNOST: Konekcija na celinu baze podataka, SQL server tipa */ #region ATRIBUTI

Page 16: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

11

private SqlConnection pKonekcija; // private string pPutanjaSQLBaze; private string pNazivBaze; private string pNazivSQL_DBMSinstance; private string pUsername; private string pPassword; private string pStringKonekcije; #endregion

#region KONSTRUKTOR public clsSQLKonekcija(string nazivSQL_DBMSInstance, string putanjaSqlBaze, string NazivBaze, string Korisnik, string Sifra) { pPutanjaSQLBaze = putanjaSqlBaze; pNazivBaze = NazivBaze; pNazivSQL_DBMSinstance = nazivSQL_DBMSInstance; pUsername = Korisnik; pPassword = Sifra; pStringKonekcije = clsStringKonekcije.DajStringKonekcije(pPutanjaSQLBaze, pNazivSQL_DBMSinstance, pNazivBaze, pUsername, pPassword); } public clsSQLKonekcija(string StringKonekcije) { pStringKonekcije = StringKonekcije; } public clsSQLKonekcija() { } #endregion #region JAVNE METODE public bool OtvoriKonekciju() { bool uspeh; pKonekcija = new SqlConnection(); pKonekcija.ConnectionString = pStringKonekcije; try { pKonekcija.Open(); uspeh = true; } catch { uspeh = false;

Page 17: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

12

} return uspeh; } public bool OtvoriKonekciju(string nazivSQL_DBMSInstance, string putanjaSqlBaze, string NazivBaze, string Korisnik, string Sifra) { pPutanjaSQLBaze = putanjaSqlBaze; pNazivBaze = NazivBaze; pNazivSQL_DBMSinstance = nazivSQL_DBMSInstance; pUsername = Korisnik; pPassword = Sifra;

bool uspeh; pKonekcija = new SqlConnection(); pKonekcija.ConnectionString = clsStringKonekcije.DajStringKonekcije(pPutanjaSQLBaze, pNazivSQL_DBMSinstance, pNazivBaze, pUsername, pPassword); try { pKonekcija.Open(); uspeh = true; } catch { uspeh = false; } return uspeh; } public bool OtvoriKonekciju(string StringKonekcije) { bool uspeh; pKonekcija = new SqlConnection(); pKonekcija.ConnectionString = StringKonekcije; try { pKonekcija.Open(); uspeh = true; } catch { uspeh = false; } return uspeh; } public SqlConnection DajKonekciju() { return pKonekcija; } public void ZatvoriKonekciju() { pPutanjaSQLBaze = ""; pKonekcija.Close(); pKonekcija.Dispose();

Page 18: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

13

} #endregion } }

KLASA tabela

Klasa za rad sa podacima iz tabela, koristeći sql upite. using System.Data.SqlClient; namespace SQLDBUtils { public class clsSQLTabela { /* ODGOVORNOST: Rad sa podacima iz baze podataka, ne mora samo iz jedne tabele */ #region Atributi private string pNazivTabele; private clsSQLKonekcija pKonekcija;

private SqlDataAdapter pAdapter; private System.Data.DataSet pDataSet; #endregion #region Konstruktor public clsSQLTabela(clsSQLKonekcija Konekcija, string NazivTabele) // Konekcija mora biti prethodno otvorena { pKonekcija = Konekcija; pNazivTabele = NazivTabele; } #endregion #region Privatne metode private void KreirajAdapter(string SelectUpit, string InsertUpit, string DeleteUpit, string UpdateUpit) { SqlCommand mSelectKomanda, mInsertKomanda, mDeleteKomanda, mUpdateKomanda; mSelectKomanda = new SqlCommand(); mSelectKomanda.CommandText = SelectUpit; mSelectKomanda.Connection = pKonekcija.DajKonekciju(); mInsertKomanda = new SqlCommand(); mInsertKomanda.CommandText = InsertUpit; mInsertKomanda.Connection = pKonekcija.DajKonekciju();

Page 19: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

14

mDeleteKomanda = new SqlCommand(); mDeleteKomanda.CommandText = DeleteUpit; mDeleteKomanda.Connection = pKonekcija.DajKonekciju(); mUpdateKomanda = new SqlCommand(); mUpdateKomanda.CommandText = UpdateUpit; mUpdateKomanda.Connection = pKonekcija.DajKonekciju(); pAdapter = new SqlDataAdapter(); pAdapter.SelectCommand = mSelectKomanda; pAdapter.InsertCommand = mInsertKomanda; pAdapter.UpdateCommand = mUpdateKomanda; pAdapter.DeleteCommand = mDeleteKomanda; }

private void KreirajDataset() { pDataSet = new System.Data.DataSet(); pAdapter.Fill(pDataSet, pNazivTabele); } private void ZatvoriAdapterDataset() { pAdapter.Dispose(); pDataSet.Dispose(); } #endregion #region Javne metode public System.Data.DataSet DajPodatke(string SelectUpit) // izdvaja podatke u odnosu na dat selectupit { KreirajAdapter(SelectUpit, "", "", ""); KreirajDataset(); return pDataSet; } public int DajBrojSlogova() { int BrojSlogova = pDataSet.Tables[0].Rows.Count; return BrojSlogova; } public bool IzvrsiAzuriranje(string Upit) // izvrzava azuriranje unos/brisanje/izmena u odnosu na dati i upit { // bool uspeh = false; SqlConnection mKonekcija; SqlCommand Komanda; SqlTransaction mTransakcija = null; try { mKonekcija = pKonekcija.DajKonekciju(); // aktivan kod // povezivanje

Page 20: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

15

Komanda = new SqlCommand(); Komanda.Connection = mKonekcija; Komanda = mKonekcija.CreateCommand(); // pokretanje // NE TREBA OPEN JER DOBIJAMO OTVORENU KONEKCIJU KROZ KONSTRUKTOR // mKonekcija.Open(); mTransakcija = mKonekcija.BeginTransaction(); Komanda.Transaction = mTransakcija; Komanda.CommandText = Upit; Komanda.ExecuteNonQuery();

mTransakcija.Commit(); uspeh = true; } catch { mTransakcija.Rollback(); uspeh = false; } return uspeh; } #endregion } }

KLASA transakcija

Klase za rad sa transakcijama. SQL upite koji treba da se izvrše

postavljamo u uređenu listu, pa se izvršavaju “paketno” u okviru

zajedničke transakcije.

using System.Data.SqlClient; namespace SQLDBUtils { public class clsSQLTransakcija { #region ATRIBUTI private SqlConnection pKonekcija; private SqlCommand komanda; private SqlTransaction transakcija; private List<string> objListaUpita; private int RedniBroj; #endregion #region KONSTRUKTOR public clsSQLTransakcija()

Page 21: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

16

{ pKonekcija = new SqlConnection(); komanda = new SqlCommand(); objListaUpita = new List<string> (); RedniBroj = 0; } #endregion #region PRIVATNE METODE #endregion

#region JAVNE METODE public void DodajUpit(string noviUpit) { objListaUpita.Add(noviUpit); RedniBroj++; } public bool IzvrsiTransakciju() { // podrazumeva se da je konekcija otvorena i kao takva prosledjena //pKonekcija.Open(); bool uspeh = false; try { komanda = pKonekcija.CreateCommand(); transakcija = pKonekcija.BeginTransaction(); komanda.Transaction = transakcija; for (int i = 0; i < RedniBroj; i++) { komanda.CommandText = objListaUpita[i].ToString(); komanda.ExecuteNonQuery(); } transakcija.Commit(); //pKonekcija.Close(); uspeh = true; } catch { uspeh = false; } return uspeh; } #endregion } }

KLASE ZA INTEROPERABILNOST

Ove klase služe za omogućavanje rada sa različitim formatima datoteka,

kojima se omogućava razmena podataka između različitih aplikacija, tj.

Interoperabilnost podataka.

Page 22: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

17

Klasa za rad sa tekstualnom datotekom

namespace DataInteropUtils { public static class clsTXT { #region JAVNE METODE public static string ProcitajFajl(string PutanjaFajla) { string sadrzajFajla; System.IO.StreamReader file = new System.IO.StreamReader(PutanjaFajla); sadrzajFajla = file.ReadToEnd(); file.Close(); return sadrzajFajla; } #endregion } }

Klasa za rad sa XML

namespace DataInteropUtils { public static class clsXML { #region JAVNE METODE public static void ObrisiXMLfajl(string PutanjaiNazivXMLFajla) { System.IO.FileInfo pomfile = new System.IO.FileInfo(PutanjaiNazivXMLFajla); pomfile.Delete(); } //------------------------- public static string KreirajXMLfajl(System.Data.DataSet ds, bool ProveraPostojanja, string PutanjaiNazivXMLFajla, string PutanjaiNazivXMLSheme) {

System.IO.FileInfo pomfile = new System.IO.FileInfo(PutanjaiNazivXMLFajla); if ((ProveraPostojanja == true) && (pomfile.Exists)) { return "Ne mozete kreirati fajl jer je vec kreiran. Zadnji put kreiran fajl - datum:" + pomfile.LastWriteTime.Date.Day.ToString() + "." + pomfile.LastWriteTime.Date.Month.ToString() + "." + pomfile.LastWriteTime.Date.Year.ToString() + " vreme:" + pomfile.LastWriteTime.Hour.ToString() + ":" +

Page 23: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

18

pomfile.LastWriteTime.Minute.ToString() + ":" + pomfile.LastWriteTime.Second.ToString(); } else { ds.WriteXml(PutanjaiNazivXMLFajla); ds.WriteXmlSchema(PutanjaiNazivXMLSheme); return "Uspesno ste kreirali XML fajl"; } } //------------------------------- public static System.Data.DataSet UcitajXMLuDataset(string PutanjaINazivXMLfajla)

{ System.Data.DataSet ds = new System.Data.DataSet(); ds.ReadXml(PutanjaINazivXMLfajla); return ds; } #endregion } }

Klasa za rad sa MS Excel datotekama

Dodajemo referencu na ExcelLibrary.dll, raspoloživa besplatno sa:

https://code.google.com/p/excellibrary/downloads/list

using ExcelLibrary; namespace DataInteropUtils { public static class clsXLS { #region JAVNE METODE public static bool SnimiXLS(System.Data.DataSet ds, string nazivXLSfajla) { try { ExcelLibrary.DataSetHelper.CreateWorkbook(nazivXLSfajla, ds); } catch {

Page 24: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

19

return false; } return true; } #endregion } }

KLASE PODATAKA

Sadrže klase tipa pojedinac i klase kolekcija pojedinaca.

Klasa pojedinac – ima samo set-get metode

using System;

namespace OOMBanka { public class Entitet { private long pIDentiteta; private string pNaziv; private string pAdresa; private string pTelefon; private string pEmail; private string pWeb; private decimal pStanjeRacuna; public long IDentiteta { get { return pIDentiteta; } set { if (this.pIDentiteta != value) this.pIDentiteta = value; } } public string Naziv { get { return pNaziv; } set { if (this.pNaziv != value) this.pNaziv = value; } }

Page 25: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

20

public string Adresa { get { return pAdresa; } set { if (this.pAdresa != value) this.pAdresa = value; } }

public string Telefon { get { return pTelefon; } set { if (this.pTelefon != value) this.pTelefon = value; } } public string Email { get { return pEmail; } set { if (this.pEmail != value) this.pEmail = value; } } public string Web { get { return pWeb; } set { if (this.pWeb != value) this.pWeb = value; } } public decimal StanjeRacuna { get {

Page 26: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

21

return pStanjeRacuna; } set { if (this.pStanjeRacuna != value) this.pStanjeRacuna = value; } } } }

KLASA kolekcija pojedinaca – uređena lista

//DODATO using System.Collections; namespace OOMBanka { public class EntitetUredjenaLista {

#region ATRIBUTI private ArrayList listaEntiteta; #endregion #region KONSTRUKTOR public EntitetUredjenaLista() { listaEntiteta = new ArrayList(); } #endregion #region METODE public void ObrisiArrayListuEntiteta() { listaEntiteta.Clear(); } public int DajBrojElemenataListeEntiteta() { return listaEntiteta.Count; } public void DodajElementArrayListeEntiteta(Entitet objNoviEntitet) { listaEntiteta.Add(objNoviEntitet); } public void ObrisiElementArrayListeEntiteta(Entitet objEntitetZaBrisanje) { listaEntiteta.Remove(objEntitetZaBrisanje); } public void ObrisiElementArrayListeEntitetaSaPozicije(int pozicija) {

Page 27: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

22

listaEntiteta.RemoveAt(pozicija); } public void UmetniElementArrayListeEntitetaNaPoziciju(Entitet objNoviEntitet, int pozicija) { listaEntiteta.Insert(pozicija, objNoviEntitet); } public void ObrisiSkupElemenataListePocevOdPozicije(int pocetnapozicija, int duzina) { listaEntiteta.RemoveRange(pocetnapozicija, duzina); } #endregion

} }

DB BIBLIOTEKA KLASA

U ovom primeru data je veza DBklase za tabelu Entitet direktno koristeći

uskladištene procedure iz baze podataka.

using System.Data; using System.Data.SqlClient; // using DataInteropUtils; using SQLDBUtils; using OOMBanka; namespace DBBankaSQL { public class DBEntitet { #region ATRIBUTI private string putanjaFajlaStringKonekcije; // OSTAJE PUBLIC, BEZ SET/GET public Entitet pEntitet = new Entitet (); #endregion #region KONSTRUKTOR public DBEntitet(string pPutanjaFajlaStringaKonekcije) { putanjaFajlaStringKonekcije = pPutanjaFajlaStringaKonekcije;

} #endregion #region PRIVATNE METODE private string DajStringKonekcije(string pPutanjaFajla) { string stringkon=""; // preuzimanje parametara iz XML fajla sa podesavanjima

Page 28: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

23

DataSet ds = clsXML.UcitajXMLuDataset(pPutanjaFajla); string nazivSQLinstance=ds.Tables[0].Rows[0].ItemArray[0].ToString(); string nazivBaze=ds.Tables[0].Rows[0].ItemArray[1].ToString(); string putanjaBaze=ds.Tables[0].Rows[0].ItemArray[2].ToString(); string KorisnickoIme=ds.Tables[0].Rows[0].ItemArray[3].ToString(); string Sifra=ds.Tables[0].Rows[0].ItemArray[4].ToString(); // stringkon = clsStringKonekcije.DajStringKonekcije(putanjaBaze, nazivSQLinstance, nazivBaze, KorisnickoIme, Sifra); return stringkon; } #endregion

#region JAVNE METODE public DataTable DajSveEntitete() { DataTable TabelaPodataka = new DataTable(); try { // PREUZIMANJE PODATAKA // otvaranje konekcije SqlConnection Veza = new SqlConnection(DajStringKonekcije(putanjaFajlaStringKonekcije)); Veza.Open(); // preuzimanje podataka u dr SqlCommand Komanda = new SqlCommand("DajSveEntitete", Veza); Komanda.CommandType = CommandType.StoredProcedure; SqlDataReader dr = Komanda.ExecuteReader(); // PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaPodataka.Load(dr); } else { } } catch (Exception ex) { string greska=ex.Message.ToString(); } return TabelaPodataka; } public DataTable DajEntitetePoNazivu(string naziv) { DataTable TabelaPodataka = new DataTable(); try

Page 29: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

24

{ // PREUZIMANJE PODATAKA // otvaranje konekcije SqlConnection Veza = new SqlConnection(DajStringKonekcije(putanjaFajlaStringKonekcije)); Veza.Open(); // preuzimanje podataka u dr SqlCommand Komanda = new SqlCommand("DajEntitetePoNazivu", Veza); Komanda.CommandType = CommandType.StoredProcedure; Komanda.Parameters.Add("@Naziv", SqlDbType.VarChar).Value = naziv;

SqlDataReader dr = Komanda.ExecuteReader(); // PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaPodataka.Load(dr); } else { } } catch (Exception ex) { string greska = ex.Message.ToString(); } return TabelaPodataka; } public int DodajNoviEntitet() { int brslogova = 0; try { SqlConnection Veza = new SqlConnection(DajStringKonekcije(putanjaFajlaStringKonekcije)); Veza.Open(); SqlCommand Komanda = new SqlCommand("DodajNoviEntitet", Veza); Komanda.CommandType = CommandType.StoredProcedure; Komanda.Parameters.Add("@Naziv", SqlDbType.VarChar).Value = pEntitet.Naziv; Komanda.Parameters.Add("@Adresa", SqlDbType.VarChar).Value = pEntitet.Adresa; Komanda.Parameters.Add("@Telefon", SqlDbType.VarChar).Value = pEntitet.Telefon; Komanda.Parameters.Add("@Email", SqlDbType.VarChar).Value = pEntitet.Email; Komanda.Parameters.Add("@web", SqlDbType.VarChar).Value = pEntitet.Web; Komanda.Parameters.Add("@StanjeRacuna", SqlDbType.Money).Value = pEntitet.StanjeRacuna; brslogova = Komanda.ExecuteNonQuery(); Veza.Close();

Page 30: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

25

Veza.Dispose(); } catch (Exception ex) { string greska= ex.Message.ToString(); } return brslogova; }

#endregion } }

Realizacija DB klase koristeći klase podataka i tehnološke klase:

using DataInteropUtils; using SQLDBUtils; // tehnoloske klase using OOMBanka; //klase podataka namespace DBBankaSQL { public class DBEntitet { #region ATRIBUTI private string putanjaFajlaStringKonekcije; public Entitet pEntitet = new Entitet (); #endregion #region KONSTRUKTOR public DBEntitet(string pPutanjaFajlaStringaKonekcije) { putanjaFajlaStringKonekcije = pPutanjaFajlaStringaKonekcije; } #endregion #region PRIVATNE METODE private string DajStringKonekcije(string pPutanjaFajla) { string stringkon=""; // preuzimanje parametara iz XML fajla sa podesavanjima DataSet ds = clsXML.UcitajXMLuDataset(pPutanjaFajla); string nazivSQLinstance=ds.Tables[0].Rows[0].ItemArray[0].ToString(); string nazivBaze=ds.Tables[0].Rows[0].ItemArray[1].ToString(); string putanjaBaze=ds.Tables[0].Rows[0].ItemArray[2].ToString(); string KorisnickoIme=ds.Tables[0].Rows[0].ItemArray[3].ToString(); string Sifra=ds.Tables[0].Rows[0].ItemArray[4].ToString(); //

Page 31: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

26

stringkon = clsStringKonekcije.DajStringKonekcije(putanjaBaze, nazivSQLinstance, nazivBaze, KorisnickoIme, Sifra); return stringkon; } #endregion #region JAVNE METODE public DataTable DajSveEntitete() { DataTable TabelaPodataka = new DataTable();

try { // PREUZIMANJE PODATAKA // otvaranje konekcije SQLDBUtils.clsSQLKonekcija objKonekcija = new clsSQLKonekcija(DajStringKonekcije(putanjaFajlaStringKonekcije)); objKonekcija.OtvoriKonekciju(); clsSQLTabela objTabela = new clsSQLTabela(objKonekcija, "Entitet"); DataSet dsPodaci = new DataSet(); dsPodaci=objTabela.DajPodatke("select * from Entitet"); TabelaPodataka = dsPodaci.Tables[0]; } catch (Exception ex) { string greska=ex.Message.ToString(); } return TabelaPodataka; } public DataTable DajEntitetePoNazivu(string naziv) { DataTable TabelaPodataka = new DataTable(); try { // PREUZIMANJE PODATAKA // otvaranje konekcije SQLDBUtils.clsSQLKonekcija objKonekcija = new clsSQLKonekcija(DajStringKonekcije(putanjaFajlaStringKonekcije)); objKonekcija.OtvoriKonekciju(); clsSQLTabela objTabela = new clsSQLTabela(objKonekcija, "Entitet"); DataSet dsPodaci = new DataSet(); dsPodaci = objTabela.DajPodatke("select * from Entitet where Naziv='" + naziv + "'"); TabelaPodataka = dsPodaci.Tables[0]; } catch (Exception ex)

Page 32: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

27

{ string greska = ex.Message.ToString(); } return TabelaPodataka; } public int DodajNoviEntitet(Entitet objNoviEntitet) { int brslogova = 0; try { SQLDBUtils.clsSQLKonekcija objKonekcija = new

clsSQLKonekcija(DajStringKonekcije(putanjaFajlaStringKonekcije)); objKonekcija.OtvoriKonekciju(); clsSQLTabela objTabela = new clsSQLTabela(objKonekcija, "Entitet"); bool uspeh =objTabela.IzvrsiAzuriranje("insert into Entitet(Naziv, Adresa, Telefon, Email, web, StanjeRacuna) values ('" + objNoviEntitet.Naziv + "','" + objNoviEntitet.Adresa + "','" + objNoviEntitet.Telefon + "', '" + objNoviEntitet.Email + "','" + objNoviEntitet.Web + "'," + objNoviEntitet.StanjeRacuna + ")"); brslogova =1; } catch (Exception ex) { string greska= ex.Message.ToString(); brslogova =0; } return brslogova; } #endregion }

KORISNIČKI INTERFEJS

Forma za unos podataka – kartica za unos:

Page 33: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

28

Forma za unos podataka – kartica za tabelarni prikaz:

U realizaciji dodate su reference na odgovarajuće biblioteke klasa (*.dll

fajlove):

Page 34: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

29

PROGRAMSKI KOD KORISNICKOG INTERFEJSA – direktno koristi samo

metode DBBankaSQL klase.

using DBBankaSQL; namespace KorisnickiInterfejs { public partial class frmEntitet : Form { // ############################################### // ATRIBUTI DBEntitet objDBEntitet ; DataTable TabelaPodataka; // ############################################ // KONSTRUKTOR public frmEntitet() { InitializeComponent(); } // ############################################ // NASE METODE private string PutanjaAplikacije() { string path; path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); return path; } // ############################################ // DOGADJAJI private void btnSve_Click(object sender, EventArgs e) { try { TabelaPodataka = objDBEntitet.DajSveEntitete(); dgvEntiteti.DataSource = TabelaPodataka; dgvEntiteti.Refresh(); } catch (Exception ex) { MessageBox.Show("Greska:" + ex.Message.ToString()); } }

Page 35: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

30

private void frmEntitet_Load(object sender, EventArgs e) { string putanjaXMLparametara = PutanjaAplikacije() + "\\PodesavanjaSQL.XML"; objDBEntitet = new DBEntitet(putanjaXMLparametara); TabelaPodataka = new DataTable(); } private void btnFiltriraj_Click(object sender, EventArgs e) { TabelaPodataka = objDBEntitet.DajEntitetePoNazivu(txtFilter.Text); dgvEntiteti.DataSource = TabelaPodataka; dgvEntiteti.Refresh(); } private void btnPotvrdi_Click(object sender, EventArgs e) { objDBEntitet.pEntitet.Naziv = txtNaziv.Text; objDBEntitet.pEntitet.Adresa = txtAdresa.Text; objDBEntitet.pEntitet.Telefon = txtTelefon.Text; objDBEntitet.pEntitet.Email = txtEmail.Text; objDBEntitet.pEntitet.Web = txtWeb.Text; objDBEntitet.pEntitet.StanjeRacuna =0; try { int brojslogova =objDBEntitet.DodajNoviEntitet(); if (brojslogova > 0) { MessageBox.Show("Successful add!"); } else { MessageBox.Show("Error in adding!"); } } catch (Exception ex) { MessageBox.Show ("GRESKA:" + ex.Message.ToString()); } } // kraj procedure } // kraj klase forme } // kraj namespace

Page 36: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

31

3. DISTRIBUIRANE BAZE PODATAKA

3.1. DISTRIBUIRANE BAZE PODATAKA I SUBP

Distribuirana baza pоdataka mоžе biti оrganizоvana kaо [9]:

hоmоgеna (kоrišćеn је samо јеdan sistem za upravljanjе bazоm

pоdataka),

hеtеrоgеna (kоrišćеnо је naјmanjе dva sistema za upravljanjе

bazоm pоdataka).

Јеdna оd naјvažniјih оsobina distribuiranih baza pоdataka је

distribuciоna transaреntnоst оdnоsnо nеzavisnоst – svе aplikaciје

infорmaciоnоg sistema trеba da budu nеzavisnе оd distribuciје pоdataka

pо serverima, štо znači da izmеnе u načinu distribuiranja pоdataka pо

serverima nе smејu uticati na rad aplikaciјa. Кraјnji kоrisnici

distribuiranоg infоrmaciоnоg sistema u principu nе trеba da pоznaјu

njеgоvu arhitеkturu. Ni prоgramеr aplikaciјa infоrmaciоnоg sistema nе

trеba da pоznaје način distribuciје bazе pоdataka pо serverima, vеć

aplikaciје trеba da funkciоnišu nеzavisnо оd tоga kakо је izvršеna

distribuciјa bazе pоdataka.

Distribuirani sistemi za upрavljanjе bazama pоdataka [9]– sistemi za

upravljanjе bazama pоdataka prоšiреni mеhanizmima i јеzikоm za оpis

distribuciје šеmе bazе pоdataka i rеplikaciје pоdataka pо serverima, a

takоđе i еlеmеntima kојi оmоgućavaјu simultanо kоrišćеnjе i ažuriranjе

pоdataka, distribuiranih na različitе serverе bazе pоdataka. Тrеba da

оmоgućavaјu rеalizaciјu glоbalnih transakciјa, zaključavanja, rеplikaciје,

оpоravka bazе pоdataka.

Prојеktоvanjе distribuciје infоrmaciоnоg sistema sastојi se u fazama:

stratеgiјa, analiza i prојеktоvanjе. Rеzultat prојеktоvanja su dоkumеnti:

1. Spеcifikaciјa distribuciјa aplikaciјa pо tipоvima lоkaciјa –

distribuciоna šеma aplikaciјa

2. Spеcifikaciјa distribuciје bazе pоdataka pо tipоvima lоkaciјa –

distribuciоna šеma bazе pоdataka

3. Spеcifikaciјa rеplikaciје pоdataka u distribuiranој bazi pоdataka –

rеplikaciоna šеma bazе pоdataka.

Distribuciоna šеma bazе pоdataka – uključuје tzv. „Čiсtu distribuciјu“

šеmе bazе pоdataka, gdе pојеdini dеlоvi bazе pоdataka na pојеdinim

lоkaciјama nеmaјu rеdundansu (pоnavljanjе pоdataka, оdnоsnо

stрukturе). Čista distribuciјa se pоstižе fragmеntaciјоm šеmе bazе

pоdataka. Idејa uvоđеnja fragmеntaciје šеmе bazе pоdataka је u tоmе

Page 37: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

32

da se izvrši particiоniсanjе šеmе bazе pоdataka, kоје ćе predstavljati

lоkalnе bazе pоdataka. Particiоniсanjеm se dоbiјa fragmеntaciоna šеma

bazе pоdataka. Рaspоrеđivanjеm fragmеnata šеmе bazе pоdataka na

tipоvе lоkaciјa dоbiјa se distribuciоna šеma bazе pоdataka. Pоstоје

slеdеćе vrstе fragmеntaciјa:

1. Vеrtikalna (оdrеđеn brој kоlоna tabеlе čuva se u јеdnој

fragmеntiрanој bazi pоdataka, drugi skup kоlоna u drugој

fragmеntiрanој bazi).

2. Hоrizоntalna – zapisi se prеma nеkоm kritеriјumu razvrstavanja

čuvaјu u različitim bazama pоdataka istе strukturе tabеla.

3. Коmbinоvana (hоrizоntalnо-vеrtikalna).

3.2. REŠEN PRIMERI

3.2.1. HORIZONTALNA I VERTIKALNA PARTICIJA BAZE PODATAKA

ZADATAK Data je baza podataka Banka.mdb i tabela Klijent.

1. Kreirati horizontalno (prema drzavljanstvu) i vertikalno (licni podaci i finansijski

podaci) particionisane baze podataka.

2. Transformisati baze podataka u MS SQL Server.

3. Realizovati Windows aplikaciju za unos podataka u sve baze podataka.

4. Realizovati tabelarni prikaz objedinjenih podataka iz horizontalno particionisanih

baza podataka.

Page 38: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

33

KREIRANJE PARTICIONISANIH BAZA PODATAKA

Particionisane baze podataka su baze podataka nastale na osnovu

osnovne baze podataka:

1. Vertikalnom particijom, za neku tabelu u bazi podataka se

pojedine kolone prebacuju u drugu bazu podataka, pri čemu

ostaje isti primarni ključ. Dobijamo 2 ili više drugih baza

podataka sa tabelama koji se isto zovu, ali imaju različitu

strukturu, gde im je zajednički jedino primarni ključ. U ovom

primeru, to je podela ličnih i finansijskih podataka. Znači,

imaćemo: BankaLičniPodaci.mdb (mdf) i

BankaFinansijskiPodaci.mdb

2. Horizontalnom particijom kreiramo druge baze podataka

identične strukture tabela, samo što se, prilikom upisa u bazu

podataka, podaci „razvrstavaju“ tako da dobijamo različite zapise

(slogove) u različitim bazama podataka. U ovom slučaju,

imaćemo bazu podataka za klijentima iz Srbije i posebnu bazu

podataka sa klijentima iz inostranstva. Znači, imaćemo:

BankaKlijentiSrbija.mdb i BankaKlijentiInostranstvo.mdb.

KORISNIČKI INTERFEJS PROGRAMA

Unos podataka

Page 39: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

34

Tabelarni prikaz podataka

PROGRAMSKI KOD KORISNIČKOG INTERFEJSA: using System.Data.SqlClient; // using DataInteropUtils; using GeneralUtils; using SqlDBUtils; namespace DISProgram { public partial class Form1 : Form { //ATRIBUTI clsSqlKonekcija objKonekcija; //HORIZONTALNO PARTICIONISANE clsSqlKonekcija objKonekcijaSRP; clsSqlKonekcija objKonekcijaNEM; //NASE PROCEDURE private void OtvoriKonekciju(string NazivRacunara, string NazivBaze) { // KONEKCIJA ZA POCETNU objKonekcija = new clsSqlKonekcija(NazivRacunara, "", NazivBaze);

Page 40: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

35

objKonekcijaSRP = new clsSqlKonekcija(NazivRacunara, "", NazivBaze); objKonekcijaNEM = new clsSqlKonekcija(NazivRacunara, "", NazivBaze); bool uspeh = objKonekcija.OtvoriKonekciju(); // bool uspehSRP = objKonekcijaSRP.OtvoriKonekciju(); // bool uspehNEM = objKonekcijaNEM.OtvoriKonekciju(); }

// IZDVAJANJE PODATAKA IZ TABELE private System.Data.DataSet IzdvojPodatke(clsSqlKonekcija Konekcija, string NazivTabele, string SelectUpit) { clsSqlTabela objTabela = new clsSqlTabela(Konekcija, NazivTabele); System.Data.DataSet dsPodaci = objTabela.DajPodatke(SelectUpit); return dsPodaci; } private void NapuniGrid(DataGridView dgv, System.Data.DataSet ds) { // povezivanje grida sa datasetom dgv.DataSource = ds.Tables[0]; dgv.Refresh(); } private int DodajKlijentaUBazu(string NazivBaze, string NazivSqlInstance) { int brojslogova = 0; SqlConnection Veza = new SqlConnection("Data Source=" + NazivSqlInstance + ";Initial Catalog=" + NazivBaze + ";Integrated Security=True"); Veza.Open(); SqlCommand Komanda = new SqlCommand("DodajNovogKlijenta", Veza); Komanda.CommandType = CommandType.StoredProcedure; Komanda.Parameters.Add("@JMBG", SqlDbType.NVarChar).Value = txtJMBG.Text; Komanda.Parameters.Add("@Prezime", SqlDbType.NVarChar).Value = txtPrezime.Text; Komanda.Parameters.Add("@Ime", SqlDbType.NVarChar).Value = txtIme.Text; Komanda.Parameters.Add("@DatumUpisa", SqlDbType.NVarChar).Value = DTPDatumUpisa.Text; Komanda.Parameters.Add("@GodinaRodjenja", SqlDbType.NVarChar).Value = txtGR.Text; Komanda.Parameters.Add("@MestoStanovanja", SqlDbType.NVarChar).Value = txtMS.Text; Komanda.Parameters.Add("@AdresaStanovanja", SqlDbType.NVarChar).Value = txtAS.Text; Komanda.Parameters.Add("@Drzavljanstvo", SqlDbType.NVarChar).Value = cmbDrzavljanstvo.Text; Komanda.Parameters.Add("@BrojOtvorenihRacuna", SqlDbType.SmallInt).Value = int.Parse(txtBOR.Text);

Page 41: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

36

Komanda.Parameters.Add("@MesecniProsekPrimanja", SqlDbType.Real).Value = Single.Parse(txtMPP.Text); if (RBDA.Checked) { Komanda.Parameters.Add("@RedovnaPrimanja", SqlDbType.Bit).Value = 1; } else { Komanda.Parameters.Add("@RedovnaPrimanja", SqlDbType.Bit).Value = 0; }

brojslogova = Komanda.ExecuteNonQuery(); Veza.Close(); Veza.Dispose(); return brojslogova; } private System.Data.DataSet SpojPodatke(System.Data.DataSet ds1, System.Data.DataSet ds2) { System.Data.DataSet dsZajedno; dsZajedno = ds1.Copy(); dsZajedno.Merge(ds2); return dsZajedno; } //KONSTRUKTOR public Form1() { InitializeComponent(); } //DOGAĐAJI private void btnSnimi_Click(object sender, EventArgs e) { //--------------------------pocetna baza int brojslogova = DodajKlijentaUBazu("DISBankaSQL", "29-11"); if (brojslogova > 0) { MessageBox.Show("Uspesno dodavanje u Osnovnu bazu podataka!"); } else { MessageBox.Show("Neuspeh dodavanja u Osnovnu bazu podataka!"); }

Page 42: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

37

switch (cmbDrzavljanstvo.Text) { case "SRPSKO": //------------------------BSC Horizontalna Particija int brojslogovasrp = DodajKlijentaUBazu("DISBankaSrbijaSQL", "29-11"); if (brojslogovasrp > 0) { MessageBox.Show("Uspesno dodavanje u Srpsku bazu podataka!"); }

else { MessageBox.Show("Neuspeh dodavanja u Srpsku bazu podataka! "); } break; case "NEMACKO": int brojslogovanem = DodajKlijentaUBazu("DISBankaInostranstvoSQL", "29-11"); if (brojslogovanem > 0) { MessageBox.Show("Uspesno dodavanje u Inostranu bazu podataka!"); } else { MessageBox.Show("Neuspeh dodavanja u Inostranu bazu podataka! "); } break; } } private void btnSVIPocetna_Click(object sender, EventArgs e) { OtvoriKonekciju("29-11", "DISBankaSQL"); System.Data.DataSet dsPodaciIzTabele = IzdvojPodatke(objKonekcija, "Klijent", "select * from Klijent"); NapuniGrid(dgvKlijenti, dsPodaciIzTabele); } private void btnSVISrpsko_Click(object sender, EventArgs e) { OtvoriKonekciju("29-11", "DISBankaSrbijaSQL"); System.Data.DataSet dsPodaciIzTabele = IzdvojPodatke(objKonekcijaSRP, "Klijent", "select * from Klijent"); NapuniGrid(dgvKlijenti, dsPodaciIzTabele); }

Page 43: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

38

private void btnSVINemacko_Click(object sender, EventArgs e) { OtvoriKonekciju("29-11", "DISBankaInostranstvoSQL"); System.Data.DataSet dsPodaciIzTabele = IzdvojPodatke(objKonekcijaNEM, "Klijent", "select * from Klijent"); NapuniGrid(dgvKlijenti, dsPodaciIzTabele); } private void btnObjedinjeno_Click(object sender, EventArgs e) { System.Data.DataSet dsSRP;

System.Data.DataSet dsNEM; System.Data.DataSet dsZAJEDNO; OtvoriKonekciju("29-11", "DISBankaSrbijaSQL"); dsSRP = IzdvojPodatke(objKonekcijaSRP, "Klijent", "select * from Klijent"); OtvoriKonekciju("29-11", "DISBankaInostranstvoSQL"); dsNEM = IzdvojPodatke(objKonekcijaNEM, "Klijent", "select * from Klijent"); dsZAJEDNO = SpojPodatke(dsSRP, dsNEM); NapuniGrid(dgvZajedno, dsZAJEDNO); }

3.2.2. KATALOG DISTRIBUIRANE BAZE PODATAKA

Katalog distribuirane baze podataka predstavlja zapis o lokacijama i karakteristikama pojedinih baza podataka koje predstavljaju rezervnu kopiju ili particiju (horizontalnu ili vertikalnu) osnovne baze podataka. ZADATAK: Realizovati istovremeno snimanje podataka u više baza podataka, čije su lokacije i karakteristike zabeležene u katalogu distribuirane baze podataka. BAZA PODATAKA Katalog lokacija - Katalog.mdf

Page 44: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

39

Osnovna baza podataka – Fakultet.mdf

SQL skript za kreiranje baze podataka KATALOG

USE [master]

GO

CREATE DATABASE [KatalogDIS]

GO

USE [KatalogDIS]

GO

CREATE TABLE [dbo].[Lokacija](

[IDLokacije] [int] IDENTITY(1,1) NOT NULL,

[StringKonekcije] [nvarchar](100) NOT NULL,

[TipLokacije] [nvarchar](50) NOT NULL,

[Segment] [nvarchar](50) NOT NULL

)

GO

ALTER TABLE [dbo].[Lokacija]

ADD CONSTRAINT [PK_Lokacija] PRIMARY KEY CLUSTERED

(

[IDLokacije] ASC

)

GO

CREATE TABLE [dbo].[Dnevnik](

[Id] [int] IDENTITY(1,1) NOT NULL,

[IdLokacije] [int] NOT NULL,

[DatumVremeTr] [datetime] NOT NULL,

[Uspeh] [bit] NOT NULL

)

GO

ALTER TABLE [dbo].[Dnevnik]

ADD CONSTRAINT [PK_Dnevnik] PRIMARY KEY CLUSTERED

Page 45: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

40

(

[Id] ASC

)

GO

ALTER TABLE [dbo].[Dnevnik]

ADD CONSTRAINT [FK_Dnevnik_Lokacija] FOREIGN KEY ([IdLokacije])

REFERENCES [dbo].[Lokacija] ([IDLokacije])

ON UPDATE CASCADE

GO

SQL skript za kreiranje osnovne baze podataka FAKULTET

USE [master]

GO

CREATE DATABASE [FakultetDIS]

GO

USE [FakultetDIS]

GO

CREATE TABLE [dbo].[Student](

[JMBG] [char](13) NOT NULL,

[Prezime] [nvarchar](40) NOT NULL,

[Ime] [nvarchar](40) NOT NULL,

[Smer] [nvarchar](100) NOT NULL,

[GodinaStudija] [int] NOT NULL

)

GO

ALTER TABLE [dbo].[Student]

ADD CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED

(

[JMBG] ASC

)

GO

Koristeci isti SQL skript, kreirana je baza podataka FakultetBekap,

FakultetLic (sa licnim podacima), FakultetStud (sa podacima o

studiranju).

Podaci o kreiranim bazama podataka unete su u Katalog, što se može

videti na sledećoj slici:

Page 46: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

41

Kreiran je projekat tipa Windows aplikacije, u kojem je kreirana klasa

clsStudent, koja ce biti koriscena za preuzimanje podataka sa

korisnickog interfejsa:

namespace Katalog

{ public class clsStudent { private string pJMBG; private string pPrezime; private string pIme; private string pSmer; private int pGodinaStudija; public string JMBG { get { return pJMBG; } set { pJMBG = value; } } public string Prezime { get { return pPrezime; } set { pPrezime = value; } } public string Ime { get { return pIme; } set { pIme = value; } } public string Smer { get { return pSmer; } set { pSmer = value; } } public int GodinaStudija

Page 47: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

42

{ get { return pGodinaStudija; } set { pGodinaStudija = value; } } } }

Kreiran je korisnicki interfejs.

PROGRAMSKI KOD KORISNIČKOG INTERFEJSA:

using System.Data.SqlClient; namespace Katalog { public partial class frmUnos : Form { // ATRIBUTI string StringKonekcijeKataloga = "Data Source=BUBILIS; Initial Catalog=KatalogDIS; Integrated Security=True";

string StringKonekcijeOsnovna = "Data Source=BUBILIS; Initial Catalog=FakultetDIS; Integrated Security=True"; string StringKonekcijeLicni = "Data Source=BUBILIS; Initial Catalog=FakultetDISlic; Integrated Security=True"; string StringKonekcijeStudije = "Data Source=BUBILIS; Initial Catalog=FakultetDISstud; Integrated Security=True"; string StringKonekcijeBekap = "Data Source=BUBILIS; Initial Catalog=FakultetDISbekap; Integrated Security=True"; // konstruktor

Page 48: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

43

public frmUnos() { InitializeComponent(); } // **** NASE PROCEDURE private void IsprazniKontrole() { txtJMBG.Text = ""; txtPrezime.Text = ""; txtIme.Text = "";

txtSmer.Text = ""; txtGodinaStudija.Text = ""; } private int SnimiDnevnik(string IdLokacije, int uspeh) { int brojzapisasnimljen = 0; // konektovanje na bazu SqlConnection Veza = new SqlConnection(StringKonekcijeKataloga); Veza.Open(); // snimanje podataka String strSQL = ""; string VremeSad = DateTime.Now.ToString(); strSQL = "Insert into Dnevnik(IdLokacije, DatumVremeTr, uspeh) values (" + IdLokacije + ",'" + VremeSad + "'," + uspeh + ")"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); brojzapisasnimljen = Komanda.ExecuteNonQuery(); // diskonektovanje sa baze Veza.Close(); Veza.Dispose(); return brojzapisasnimljen; } private int SnimiPodatke(clsStudent noviStudent) { int UkupnoSnimljeno = 0; // konektovanje na bazu SqlConnection Veza = new SqlConnection(StringKonekcijeKataloga); Veza.Open(); String strSQL; strSQL = "Select * from Lokacija"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); while (dr.Read()) { string IDLokacije = dr["IdLokacije"].ToString(); string StringKonekcije = dr["StringKonekcije"].ToString();

Page 49: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

44

string tip =dr["TipLokacije"].ToString(); string segment = dr["Segment"].ToString(); try { int i = SnimiStudenta(noviStudent, StringKonekcije, tip, segment); UkupnoSnimljeno = UkupnoSnimljeno + i; SnimiDnevnik(IDLokacije, 1); } catch (Exception ex) { SnimiDnevnik(IDLokacije, 0);

} } // diskonektovanje sa baze dr.Close(); Veza.Close(); Veza.Dispose(); return UkupnoSnimljeno; } private int SnimiStudenta(clsStudent noviStudent, string StringKonekcije, string tip, string segment) { int brojslogova = 0; // konektovanje na bazu SqlConnection Veza = new SqlConnection(StringKonekcije); Veza.Open(); // snimanje podataka String strSQL = ""; switch (tip) { case "osnovna": strSQL = "Insert into Student(JMBG, Prezime, Ime, Smer, GodinaStudija) values ('" + noviStudent.JMBG + "', '" + noviStudent.Prezime + "', '" + noviStudent.Ime + "','" + noviStudent.Smer + "', " + noviStudent.GodinaStudija.ToString() + ")"; break; case "verpart": if (segment.Equals("licni")) { strSQL = "Insert into Student(JMBG, Prezime, Ime) values ('" + noviStudent.JMBG + "', '" + noviStudent.Prezime + "', '" + noviStudent.Ime + "')"; } else {

Page 50: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

45

strSQL = "Insert into Student(JMBG, Smer, GodinaStudija) values ('" + noviStudent.JMBG + "', '" + noviStudent.Smer + "', " + noviStudent.GodinaStudija.ToString() + ")"; } break; case "horpart": // TO DO break; } // KRAJ SWITCH SqlCommand Komanda = new SqlCommand(strSQL, Veza); brojslogova = Komanda.ExecuteNonQuery();

// diskonektovanje sa baze Veza.Close(); Veza.Dispose(); return brojslogova; } private DataTable UcitajSve(string StringKonekcije) { DataTable TabelaPodataka = new DataTable(); // konekcija na bazu SqlConnection Veza = new SqlConnection(StringKonekcije); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select * from Student"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows) { TabelaPodataka.Load(dr); } dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private void PrikaziPodatke(DataTable TabelaPodataka) {

Page 51: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

46

dgvStudenti.DataSource = TabelaPodataka; dgvStudenti.Refresh(); } // dogadjaji private void btnUnos_Click(object sender, EventArgs e) { IsprazniKontrole(); txtJMBG.Focus(); }

private void btnOdustani_Click(object sender, EventArgs e) { IsprazniKontrole(); } private void btnPotvrdi_Click(object sender, EventArgs e) { clsStudent objNoviStudent = new clsStudent (); objNoviStudent.JMBG = txtJMBG.Text; objNoviStudent.Prezime = txtPrezime.Text; objNoviStudent.Ime = txtIme.Text; objNoviStudent.Smer = txtSmer.Text; objNoviStudent.GodinaStudija = int.Parse(txtGodinaStudija.Text); try { int brojSlogova=SnimiPodatke(objNoviStudent); MessageBox.Show("Snimljeno je:" + brojSlogova.ToString() + " slogova."); PrikaziPodatke(UcitajSve(StringKonekcijeOsnovna)); } catch (Exception ex) { MessageBox.Show("greska:" + ex.Message.ToString()); } } private void btnOsnovnaBaza_Click(object sender, EventArgs e) { PrikaziPodatke(UcitajSve(StringKonekcijeOsnovna)); } private void btnLicniPodaci_Click(object sender, EventArgs e) { PrikaziPodatke(UcitajSve(StringKonekcijeLicni)); } private void btnStudijePodaci_Click(object sender, EventArgs e) { PrikaziPodatke(UcitajSve(StringKonekcijeStudije)); }

Page 52: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

47

private void btnBekap_Click(object sender, EventArgs e) { PrikaziPodatke(UcitajSve(StringKonekcijeBekap)); }

3.2.3. MASTER DETAIL, DISTRIBUIRANE TRANSAKCIJE I

XML

ZADATAK:

Realizovati unos podataka na formi tipa master-detail, tako sto ce se

snimiti privremeno zaglavlje u tabelu sa zaglavljem, a podaci o

stavkama snimati u pomocnu privremenu tabelu. Prilikom unosa

podataka koristi se XML fajl sa podacima potrebnim za unos podataka.

Nakon završetka unosa podataka, u okviru glavnog tastera za snimanje

celine, podatke snimiti u glavnu i bekap bazu podataka, a isprazniti

pomoćnu bazu podataka. Sve izvršavati u okviru transakcija nad

pojedinačnim bazama podataka (s obzirom da svaka ima odnos master-

detail), a zatim i distribuiranu transakciju u okviru TransactionScope (na

raspolaganju je od .Net framework 4.5 verzije) objekta, kojim se

objedinjuju transakcije nad više različitih baza podataka.

U okviru tabelarnog prikaza, izborom stavke gornjeg grida, u donjem

gridu se prikazuju podaci o stavkama za odgovarajuce zaglavlje. U

okviru tabelarnog prikaza realizovati i filtriranje i snimanje slozenog XML

fajla tipa master-detail.

BAZA PODATAKA

Osnovna baza podataka - Prodavnica.mdf

Page 53: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

48

SQL skript za kreiranje osnovne baze podataka

create database ProdavnicaDIS6CAS

go

use ProdavnicaDIS6CAS

go

create table Racun (

BrojRacuna varchar(50) not null,

DatumRacuna datetime not null,

UkupanIznos money not null,

constraint PK_RACUN primary key nonclustered (BrojRacuna)

)

go

create table StavkaRacuna (

BrojRacuna varchar(50) not null,

SifraRobe varchar(50) not null,

Kolicina int not null,

CenaJM money null,

constraint PK_STAVKARACUNA primary key nonclustered (BrojRacuna, SifraRobe)

)

go

create index "pripada_FK" on StavkaRacuna (

BrojRacuna ASC

)

go

alter table StavkaRacuna

add constraint FK_Sadrzi foreign key (BrojRacuna)

references Racun (BrojRacuna);

go

CREATE PROCEDURE DajRacune

AS

BEGIN

select * from Racun

END

go

CREATE PROCEDURE DodajNoviRacun(

@BrojRacuna varchar(50),

@DatumRacuna datetime,

@UkupanIznos money

)

AS

Page 54: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

49

BEGIN

insert into Racun(BrojRacuna, DatumRacuna, UkupanIznos) values (@BrojRacuna,

@DatumRacuna, @UkupanIznos)

END

go

CREATE PROCEDURE DajStavkeRacuna(

@BrojRacuna varchar(50)

)

AS

BEGIN

select * from StavkaRacuna where BrojRacuna=@BrojRacuna

END

go

CREATE PROCEDURE DodajNovuStavku(

@BrojRacuna varchar(50),

@SifraRobe varchar(50),

@Kolicina int,

@CenaJM money

)

AS

BEGIN

insert into StavkaRacuna(BrojRacuna, SifraRobe, Kolicina, CenaJM) values (@BrojRacuna,

@SifraRobe, @Kolicina, @CenaJM)

END

go

Koristeći isti SQL skript, kreirana je i ProdavnicaTEMP.mdf (privremena

baza), kao i ProdavnicaBEKAP.mdf (rezervna kopija baze podataka).

XML FAJL SA PODACIMA O ROBI – Roba.XML

<?xml version="1.0" standalone="yes"?>

<SpisakRobe>

<Roba>

<Sifra>1</Sifra>

<Naziv>Jabuke</Naziv>

</Roba>

<Roba>

<Sifra>2</Sifra>

<Naziv>Kruske</Naziv>

</Roba>

<Roba>

<Sifra>3</Sifra>

<Naziv>Lubenice</Naziv>

</Roba>

Page 55: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

50

<Roba>

<Sifra>5</Sifra>

<Naziv>Sok</Naziv>

</Roba>

<Roba>

<Sifra>4</Sifra>

<Naziv>Sveska</Naziv>

</Roba>

</SpisakRobe>

KORISNIČKI INTERFEJS

Prva kartica – prikaz podataka u DataGrid-u iz XML fajla

Druga kartica – unos podataka

Page 56: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

51

Treca kartica – tabelarni prikaz tipa master-detail sa filtriranjem

Izvorni kod korisnickog interfejsa:

// using System.Data.SqlClient; using System.Xml; // FRAMEWORK 4.5 //using System.Transactions; namespace KIprodavnica { public partial class frmRacun : Form { // atributi Single UkupanIznos = 0; SqlConnection VezaTemp; string ConnStringTemp="Data Source=29-01; Initial Catalog=ProdavnicaTemp; Integrated Security=True;"; SqlConnection VezaGlavna; string ConnStringGlavna = "Data Source=29-01; Initial Catalog=ProdavnicaDIS6cas; Integrated Security=True;"; SqlConnection VezaBekap; string ConnStringBekap = "Data Source=29-01; Initial Catalog=ProdavnicaBekap; Integrated Security=True;"; string DanasnjiDatum; DataTable TabelaPodataka;

Page 57: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

52

// ZA TABELARNI DataTable TabelaZaglavlje; DataTable TabelaStavke; bool kliknuto; // ZA SIFARNIK ROBE DataSet dsRoba; bool novaroba; // konstruktor

public frmRacun() { InitializeComponent(); } // privatne NASE metode private void ObrisiKontrole() { txtBrojRacuna.Text = ""; lblDatumRacuna.Text = ""; ObrisiKontroleStavke(); } private void ObrisiKontroleStavke() { txtSifraRobe.Text = ""; txtCenaJM.Text = ""; txtKolicina.Text = ""; txtNazivRobe.Text = ""; } private void PostaviDanasnjiDatum() { lblDatumRacuna.Text = DateTime.Now.Day.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Year.ToString() + "."; } private DataTable UcitajRacune() { // PREUZIMANJE PODATAKA TabelaZaglavlje.Clear(); try { // PREUZIMANJE PODATAKA // otvaranje konekcije // preuzimanje podataka u dr SqlCommand KomandaGrid = new SqlCommand("select * from Racun", VezaGlavna); SqlDataReader dr = KomandaGrid.ExecuteReader();

Page 58: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

53

// PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaZaglavlje.Load(dr); } else { } } catch (Exception exGrid) {

string greskagrid = exGrid.Message.ToString(); MessageBox.Show("greska u gridu:" + greskagrid); } return TabelaZaglavlje; } private void PrikaziSveRacune() { DataTable Tabela = UcitajRacune(); // POVEZIVANJE GRIDA SA PODACIMA dgvRacuni.DataSource = Tabela; dgvRacuni.Refresh(); } private void PrikaziPodatkeUGridu(DataGridView grid, DataTable Podaci) { grid.DataSource = Podaci; grid.Refresh(); } private DataTable UcitajRacunZaBrojRacuna(string brojracuna) { // PRIKAZIVANJE PODATAKA U GRIDU // PREUZIMANJE PODATAKA TabelaZaglavlje.Clear(); try { // PREUZIMANJE PODATAKA // otvaranje konekcije // preuzimanje podataka u dr

Page 59: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

54

SqlCommand KomandaGrid = new SqlCommand("select * from Racun where BrojRacuna='" + brojracuna + "'", VezaGlavna); SqlDataReader dr = KomandaGrid.ExecuteReader(); // PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaZaglavlje.Load(dr); } else { }

} catch (Exception exGrid) { string greskagrid = exGrid.Message.ToString(); MessageBox.Show("greska u gridu:" + greskagrid); } return TabelaZaglavlje; } private void PrikaziRacunePoBrojuRacuna(string brojracuna) { DataTable Tabela = UcitajRacunZaBrojRacuna(brojracuna); // POVEZIVANJE GRIDA SA PODACIMA dgvRacuni.DataSource = Tabela; dgvRacuni.Refresh(); } private DataTable UcitajStavkeRacuna(string brojracuna) { TabelaStavke.Clear(); try { // preuzimanje podataka u dr SqlCommand KomandaGrid = new SqlCommand("select * from StavkaRacuna where BrojRacuna='" + brojracuna + "'", VezaGlavna); SqlDataReader dr = KomandaGrid.ExecuteReader(); // PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaStavke.Load(dr); } else { MessageBox.Show("Nema unetih stavki!"); dr.Close(); } } catch (Exception exGrid) {

Page 60: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

55

string greskagrid = exGrid.Message.ToString(); MessageBox.Show("greska u gridu:" + greskagrid); } return TabelaStavke; } private void PrikaziStavkeRacuna(string brojracuna) { DataTable Tabela = UcitajStavkeRacuna(brojracuna);

// POVEZIVANJE GRIDA SA PODACIMA dgvStavkeRacunaPretraga.DataSource = Tabela; dgvStavkeRacunaPretraga.Refresh(); } private string DajNazivRobe(string sifrarobe) { string naziv = ""; for (int i = 0; i < dsRoba.Tables[0].Rows.Count; i++) { if (dsRoba.Tables[0].Rows[i].ItemArray[0].ToString().Equals(sifrarobe)) { naziv = dsRoba.Tables[0].Rows[i].ItemArray[1].ToString(); } } return naziv; } private bool PostojiRoba(string sifrarobe) { bool postoji = false; for (int i = 0; i < dsRoba.Tables[0].Rows.Count; i++) { if (dsRoba.Tables[0].Rows[i].ItemArray[0].ToString().Equals(sifrarobe)) { postoji = true; } } return postoji; } // ********************dogadjaji private void btnNoviRacun_Click(object sender, EventArgs e) { // ZADAJEMO INICIJALNE VREDNOSTI

Page 61: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

56

ObrisiKontrole(); novaroba = false; txtNazivRobe.Enabled = false; PostaviDanasnjiDatum(); lblIznosRacuna.Text = "0"; // // ******************************************** // snimanje u temp bazu - RACUN // ********************************************* int brslogova = 0; try

{ SqlCommand Komanda = new SqlCommand("insert into Racun(BrojRacuna, DatumRacuna, UkupanIznos) values ('TEMP'," + DanasnjiDatum + ",0 )", VezaTemp); brslogova = Komanda.ExecuteNonQuery(); } catch (Exception ex) { string greska = ex.Message.ToString(); } } private void frmRacun_Load(object sender, EventArgs e) { ObrisiKontrole(); // OTVARANJE TEMPORARY BAZE VezaTemp = new SqlConnection(ConnStringTemp); VezaTemp.Open(); // OTVARANJE GLAVNE BAZE VezaGlavna = new SqlConnection(ConnStringGlavna); VezaGlavna.Open(); // OTVARANJE BEKAP BAZE VezaBekap = new SqlConnection(ConnStringBekap); VezaBekap.Open(); DanasnjiDatum = "'" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Year.ToString() + "'"; // grid TabelaZaglavlje = new DataTable(); TabelaStavke = new DataTable(); // sifarnik dsRoba = new DataSet(); dsRoba.ReadXml("Roba.XML"); dgvRoba.DataSource = dsRoba.Tables[0]; dgvRoba.Refresh();

Page 62: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

57

} private void btnNovaStavka_Click(object sender, EventArgs e) { ObrisiKontroleStavke(); novaroba = false; txtNazivRobe.Enabled = false; } private void btnPotvrdiStavku_Click(object sender, EventArgs e)

{ // **************** // ***preuzimanje iz KI //************************** // racun //string BrojRacuna = txtBrojRacuna.Text; // // stavka string SifraRobe = txtSifraRobe.Text; string Kolicina = txtKolicina.Text; string CenaJM = txtCenaJM.Text; // azuriranje ukupnog iznosa UkupanIznos = UkupanIznos + Single.Parse(CenaJM) * Single.Parse(Kolicina); lblIznosRacuna.Text = UkupanIznos.ToString (); // ************************************** // - snimanje stavke // ************************************** int brslogovastavka = 0; try { SqlCommand Komanda = new SqlCommand("insert into StavkaRacuna(BrojRacuna, SifraRobe, Kolicina, CenaJM) values ('TEMP', '" + SifraRobe + "'," + Kolicina + "," + CenaJM + ")", VezaTemp); brslogovastavka = Komanda.ExecuteNonQuery(); } catch (Exception ex) { string greska = ex.Message.ToString(); }

Page 63: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

58

// ***************** // * prikazivanje podataka u gridu // ************************** // PREUZIMANJE PODATAKA TabelaPodataka = new DataTable(); try {

// PREUZIMANJE PODATAKA // otvaranje konekcije // preuzimanje podataka u dr SqlCommand Komanda = new SqlCommand("select SifraRobe, Kolicina, CenaJM from StavkaRacuna where BrojRacuna='TEMP'", VezaTemp); SqlDataReader dr = Komanda.ExecuteReader(); // PRIKAZIVANJE PODATAKA U GRIDU if (dr.HasRows) { TabelaPodataka.Load(dr); } else { } } catch (Exception ex) { string greska = ex.Message.ToString(); } // POVEZIVANJE GRIDA SA PODACIMA dgvStavkeRacuna.DataSource = TabelaPodataka; dgvStavkeRacuna.Refresh(); } private void frmRacun_FormClosing(object sender, FormClosingEventArgs e) { VezaTemp.Close(); VezaTemp.Dispose(); // VezaGlavna.Close(); VezaGlavna.Dispose(); // VezaBekap.Close(); VezaBekap.Dispose(); } private void btnSnimiRacun_Click(object sender, EventArgs e)

Page 64: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

59

{ // Samo pocev od Framework 4.5 postoji TransactionScope //TransactionScope tsInstance = new TransactionScope(); //using (tsInstance) //{ // **************** SNIMANJE U GLAVNU BAZU // snimanje zaglavlja racuna SqlTransaction objTransakcijaGlavna = VezaGlavna.BeginTransaction();

int brojslogovaZag = 0; SqlCommand KomandaZag = new SqlCommand("insert into Racun(BrojRacuna, DatumRacuna, UkupanIznos) values ('" + txtBrojRacuna.Text + "'," + DanasnjiDatum + "," + UkupanIznos + ")", VezaGlavna); KomandaZag.Transaction = objTransakcijaGlavna; brojslogovaZag = KomandaZag.ExecuteNonQuery(); // snimanje stavki SqlCommand KomandaStG = new SqlCommand(); KomandaStG.Connection = VezaGlavna; KomandaStG.Transaction = objTransakcijaGlavna; for (int i = 0; i < TabelaPodataka.Rows.Count; i++) { string SifraRobe = TabelaPodataka.Rows[i].ItemArray[0].ToString(); string Kolicina = TabelaPodataka.Rows[i].ItemArray[1].ToString(); string CenaJM = TabelaPodataka.Rows[i].ItemArray[2].ToString(); string Upit = "insert into StavkaRacuna(BrojRacuna, SifraRobe, Kolicina, CenaJM) values ('" + txtBrojRacuna.Text + "', '" + SifraRobe + "'," + Kolicina + "," + CenaJM + ")"; KomandaStG.CommandText = Upit; int brslogovastavka = KomandaStG.ExecuteNonQuery(); } objTransakcijaGlavna.Commit(); // ********************* // SNIMANJE U BEKAP BAZU // snimanje zaglavlja racuna SqlTransaction objTransakcijaBekap = VezaBekap.BeginTransaction();

Page 65: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

60

int brojslogovaBekap = 0; SqlCommand KomandaBekap = new SqlCommand("insert into Racun(BrojRacuna, DatumRacuna, UkupanIznos) values ('" + txtBrojRacuna.Text + "'," + DanasnjiDatum + "," + UkupanIznos + ")", VezaBekap); KomandaBekap.Transaction = objTransakcijaBekap; brojslogovaBekap = KomandaBekap.ExecuteNonQuery(); // snimanje stavki SqlCommand KomandaStBekap = new SqlCommand();

KomandaStBekap.Connection = VezaBekap; KomandaStBekap.Transaction = objTransakcijaBekap; for (int i = 0; i < TabelaPodataka.Rows.Count; i++) { string SifraRobe = TabelaPodataka.Rows[i].ItemArray[0].ToString(); string Kolicina = TabelaPodataka.Rows[i].ItemArray[1].ToString(); string CenaJM = TabelaPodataka.Rows[i].ItemArray[2].ToString(); string Upit = "insert into StavkaRacuna(BrojRacuna, SifraRobe, Kolicina, CenaJM) values ('" + txtBrojRacuna.Text + "', '" + SifraRobe + "'," + Kolicina + "," + CenaJM + ")"; KomandaStBekap.CommandText = Upit; int brslogovastavka = KomandaStBekap.ExecuteNonQuery(); } objTransakcijaBekap.Commit(); // **************** BRISANJE TEMP BAZE *************** SqlTransaction objTransakcijaTemp = VezaTemp.BeginTransaction(); int brojslogovaStT = 0; SqlCommand KomandaStT = new SqlCommand("delete from StavkaRacuna where BrojRacuna='TEMP'", VezaTemp); KomandaStT.Transaction = objTransakcijaTemp; brojslogovaStT = KomandaStT.ExecuteNonQuery(); int brojslogovaZagT = 0; SqlCommand KomandaZagT = new SqlCommand("delete from Racun where BrojRacuna='TEMP'", VezaTemp); KomandaZagT.Transaction = objTransakcijaTemp; brojslogovaZagT = KomandaZagT.ExecuteNonQuery(); objTransakcijaTemp.Commit();

Page 66: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

61

// ****************************************************** //} //tsInstance.Complete(); MessageBox.Show("USPESNO SNIMLJENI PODACI!"); } private void txtSifraRobe_Leave(object sender, EventArgs e) {

// provera da li postoji bool postoji = PostojiRoba(txtSifraRobe.Text); if (postoji) { // ako postoji prikazi naziv string naziv = DajNazivRobe(txtSifraRobe.Text); txtNazivRobe.Enabled = false; txtNazivRobe.Text = naziv; novaroba = false; } else { // ako ne postoji, prikazi poruku i ponudi da doda novi txtNazivRobe.Text = ""; MessageBox.Show("Ne postoji roba sa datom sifrom! Mozete uneti novu!"); txtNazivRobe.Enabled = true; txtNazivRobe.Focus(); } } private void txtNazivRobe_Leave(object sender, EventArgs e) { if (novaroba) { DataRow red = dsRoba.Tables[0].NewRow(); red[0] = txtSifraRobe.Text; red[1] = txtNazivRobe.Text; dsRoba.Tables[0].Rows.Add(red); dsRoba.WriteXml("Roba.XML"); } } private void txtNazivRobe_KeyDown(object sender, KeyEventArgs e) { novaroba = true; } private void btnPrikaziSve_Click(object sender, EventArgs e) { //PrikaziSveRacune();

Page 67: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

62

PrikaziPodatkeUGridu(dgvRacuni, UcitajRacune()); kliknuto = false; } private void btnFiltriraj_Click(object sender, EventArgs e) { kliknuto = false; PrikaziPodatkeUGridu(dgvRacuni, UcitajRacunZaBrojRacuna(txtFilter.Text)); }

private void dgvRacuni_MouseDown(object sender, MouseEventArgs e) { kliknuto = true; } private void dgvRacuni_CurrentCellChanged(object sender, EventArgs e) { if (kliknuto) { // OCITAVANJE POZICIJE int RedniBrojReda = dgvRacuni.CurrentCell.RowIndex; string ID = dgvRacuni.Rows[RedniBrojReda].Cells[0].Value.ToString(); // PrikaziStavkeRacuna(ID); } } private void btnSnimiXML_Click(object sender, EventArgs e) { XmlWriterSettings podesavanja = new XmlWriterSettings(); podesavanja.Indent = true; XmlWriter writer = XmlWriter.Create("RacuniStavke.xml", podesavanja); writer.WriteStartDocument(); writer.WriteComment("Spisak racuna i stavki racuna!"); writer.WriteStartElement("Racuni"); DataTable TabelaRacuna = UcitajRacune(); for (int i = 0; i < TabelaRacuna.Rows.Count; i++) { // ZA SVAKI RACUN writer.WriteStartElement("Racun"); writer.WriteElementString("BrojRacuna", TabelaRacuna.Rows[i].ItemArray[0].ToString()); writer.WriteElementString("DatumRacuna", TabelaRacuna.Rows[i].ItemArray[1].ToString()); writer.WriteElementString("UkupanIznos", TabelaRacuna.Rows[i].ItemArray[2].ToString());

Page 68: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

63

DataTable TabelaStavkiRacuna = UcitajStavkeRacuna(TabelaRacuna.Rows[i].ItemArray[0].ToString()); if (TabelaStavkiRacuna.Rows.Count > 0) // da li ima stavki racuna { for (int j = 0; j < TabelaStavkiRacuna.Rows.Count; j++) { // ZA SVAKU STAVKU RACUNA writer.WriteStartElement("StavkaRacuna"); writer.WriteElementString("BrojRacuna", TabelaStavkiRacuna.Rows[j].ItemArray[0].ToString()); writer.WriteElementString("SifraRobe",

TabelaStavkiRacuna.Rows[j].ItemArray[1].ToString()); writer.WriteElementString("Kolicina", TabelaStavkiRacuna.Rows[j].ItemArray[2].ToString()); writer.WriteElementString("CenaJM", TabelaStavkiRacuna.Rows[j].ItemArray[3].ToString()); writer.WriteEndElement(); // za ucenika } // KRAJ CIKLUSA ZA STAVKU }// kraj IF ako ima stavki u racunu writer.WriteEndElement(); // za konkretnI RACUN }// KRAJ CIKLUSA ZA RACUN writer.WriteEndElement(); // za racune writer.WriteEndDocument(); writer.Flush(); writer.Close(); MessageBox.Show("Snimljen slozeni XML!"); } } }

REZULTUJUĆI SLOŽENI XML – tipa master-detail

<?xml version="1.0" encoding="utf-8"?> <!--Spisak racuna i stavki racuna!--> <Racuni> <Racun> <BrojRacuna>250/2014</BrojRacuna> <DatumRacuna>4/16/2014 12:00:00 AM</DatumRacuna> <UkupanIznos>190.0000</UkupanIznos>

<StavkaRacuna> <BrojRacuna>250/2014</BrojRacuna> <SifraRobe>123</SifraRobe> <Kolicina>2</Kolicina> <CenaJM>50.0000</CenaJM> </StavkaRacuna>

Page 69: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

64

<StavkaRacuna> <BrojRacuna>250/2014</BrojRacuna> <SifraRobe>678</SifraRobe> <Kolicina>3</Kolicina> <CenaJM>30.0000</CenaJM> </StavkaRacuna> </Racun> <Racun> <BrojRacuna>55/2014</BrojRacuna> <DatumRacuna>4/30/2014 12:00:00 AM</DatumRacuna> <UkupanIznos>2520.0000</UkupanIznos> <StavkaRacuna>

<BrojRacuna>55/2014</BrojRacuna> <SifraRobe>1</SifraRobe> <Kolicina>3</Kolicina> <CenaJM>40.0000</CenaJM> </StavkaRacuna> <StavkaRacuna> <BrojRacuna>55/2014</BrojRacuna> <SifraRobe>54</SifraRobe> <Kolicina>4</Kolicina> <CenaJM>600.0000</CenaJM> </StavkaRacuna> </Racun> </Racuni>

Page 70: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

65

4. WEB APLIKACIJE, XML I WEB SERVISI

4.1. PRIMER - PERSONALIZOVANA WEB APLIKACIJA

ZADATAK:

Dat je SQL skript za kreiranje baze podataka. Realizovati web aplikaciju

koja davati različite opcije u zavisnosti od profila prijavljenog korisnika

(personalizacija). Realizovati formu za unos podataka, tako što se

koriste podaci iz druge pomocne tabele koristeci drop down listu.

Realizovati tabelarni prikaz sa filtriranjem. Realizovati formu za izbor

parametara stampe – spisak svih ili filtriranje podataka prema nekom

kriterijumu, a zatim omogućiti ucitavanje printer-friendly stranice sa

odgovarajućim podacima.

BAZA PODATAKA – Fakultet.mdf

SQL SKRIPT za kreiranje baze podataka

USE [master] GO CREATE DATABASE [Fakultet] GO USE [Fakultet] GO CREATE TABLE [dbo].[Smer]( [Id] [nvarchar](10) NOT NULL,

Page 71: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

66

[Naziv] [nvarchar](50) NOT NULL, [NivoStudija] [char](3) NOT NULL ) GO ALTER TABLE [dbo].[Smer] ADD CONSTRAINT [PK_Smer] PRIMARY KEY CLUSTERED ( [Id] ASC ) GO

CREATE TABLE [dbo].[ProfilKorisnika]( [IdProfila] [nvarchar](10) NOT NULL, [NazivProfila] [nvarchar](50) NOT NULL ) GO ALTER TABLE [dbo].[ProfilKorisnika] ADD CONSTRAINT [PK_ProfilKorisnika] PRIMARY KEY CLUSTERED ( [IdProfila] ASC ) GO CREATE TABLE [dbo].[Korisnik]( [ID] [int] IDENTITY(1,1) NOT NULL, [Prezime] [nvarchar](40) NOT NULL, [Ime] [nvarchar](30) NOT NULL, [KorisnickoIme] [nvarchar](20) NOT NULL, [Sifra] [nvarchar](30) NOT NULL, [Email] [nvarchar](40) NOT NULL, [IdProfila] [nvarchar](10) NOT NULL ) GO ALTER TABLE [dbo].[Korisnik] ADD CONSTRAINT [PK_Korisnik] PRIMARY KEY CLUSTERED ( [ID] ASC ) GO CREATE TABLE [dbo].[Student]( [BrojIndeksa] [nvarchar](15) NOT NULL, [Prezime] [nvarchar](40) NOT NULL, [Ime] [nvarchar](30) NOT NULL, [Email] [nvarchar](40) NOT NULL, [IdSmera] [nvarchar](10) NOT NULL, [StanjeRacuna] [float] NULL ) GO ALTER TABLE [dbo].[Student] ADD CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED

Page 72: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

67

( [BrojIndeksa] ASC ) GO CREATE TABLE [dbo].[Uplata]( [IdUplate] [bigint] IDENTITY(1,1) NOT NULL, [DatumUplate] [datetime] NOT NULL, [IznosUplate] [float] NOT NULL, [BrojIndeksa] [nvarchar](15) NOT NULL ) GO

ALTER TABLE [dbo].[Uplata] ADD CONSTRAINT [PK_Uplata] PRIMARY KEY CLUSTERED ( [IdUplate] ASC ) GO ALTER TABLE [dbo].[Korisnik] ADD CONSTRAINT [FK_Korisnik_ProfilKorisnika] FOREIGN KEY([IdProfila]) REFERENCES [dbo].[ProfilKorisnika] ([IdProfila]) ON UPDATE CASCADE GO ALTER TABLE [dbo].[Student] ADD CONSTRAINT [FK_Student_Smer] FOREIGN KEY([IdSmera]) REFERENCES [dbo].[Smer] ([Id]) ON UPDATE CASCADE GO ALTER TABLE [dbo].[Uplata] ADD CONSTRAINT [FK_Uplata_Student] FOREIGN KEY([BrojIndeksa]) REFERENCES [dbo].[Student] ([BrojIndeksa]) ON UPDATE CASCADE GO

Page 73: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

68

DETALJNIJI ZADATAK:

Pod profilom RACUNOVODSTVO:

Realizovati:

1. Formu za unos podataka o uplati studenta, koja istovremeno sa upisom

novog zapisa u tabelu Uplata, transakcijom azurira (menja) stanje racuna

u tabeli Student. Datum se bira iz Calendar kontrole. Broj indeksa se bira

iz combo box-a.

Page 74: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

69

NAPOMENA: Da bi prikazao Ime i prezime, na dogadjaju SelectedIndexChanged,

mora biti drop down list postavljen na AUTOPOST=TRUE, da bi ta procedura uopste

radila (reagovala).

2. Formu za tabelarni prikaz podataka sa filterom prema broju indeksa.

3. Formu za izbor parametara stampe – prikaz svih uplata ili filtrirani prikaz

uplata studenta ciji se broj indeksa bira iz drop down liste.

Sa ove forme se ucitavaju konkretne forme za prikaz printer friendly stranica.

Page 75: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

70

4. Printer-friendly stranica “SPISAK SVIH”

Printer-friendly stranica “FILTRIRANI PRIKAZ” se bira izborom parametra:

Rezultujuća printer-friendly stranica “FILTRIRANI PRIKAZ”

Page 76: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

71

NAPOMENE O RAZMENI PODATAKA IZMEĐU ASPX STRANICA:

1. Razmena podataka između stranice za prijavu (Login) i stranice

sa osnovnim menijem (Welcome) je koristeći sesije.

KREIRANJE SESIJE I PROMENLJIVE U SESIJI: Session.Add("KorisnikImePrezime", ImePrezime);

Session.Add("StatusKorisnika", Status);

ČITANJE SESIJE: lblImePrezime.Text = Session["KorisnikImePrezime"].ToString();

2. Razmena podataka između stranice sa parametrima štampe i

stranice sa pripremom za štampu (“printer friendly”) je koristeći

parametre:

SLANJE: Response.Redirect("UplataStampaFilter.aspx?BrojIndeks

a=" + ddlBrojIndeksa.Text);

FORMIRA: http://localhost:1135/UplataStampaFilter.aspx?BrojIndeksa=2/14-14

CITANJE od strane druge stranice: string

BrojIndeksa=

Request.QueryString["BrojIndeksa"].ToString();

PROGRAMSKI KOD STRANICE ZA UNOS PODATAKA

// using System.Data.SqlClient; using System.Data; using System.Configuration; namespace FakultetInfo { public partial class UplataUnos : System.Web.UI.Page { // NASE PROCEDURE private void IsprazniKontrole() { ddlBrojIndeksa.Text = "izaberite..."; txtDatumUplate.Text = ""; txtIznosUplate.Text = ""; } private void NapuniCombo() {

Page 77: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

72

// konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select BrojIndeksa from Student order by BrojIndeksa"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader();

// punjenje combo ddlBrojIndeksa.Items.Clear(); ddlBrojIndeksa.Items.Add("izaberite..."); while (dr.Read()) { ddlBrojIndeksa.Items.Add(dr["BrojIndeksa"].ToString()); } // diskonektovanje sa baze dr.Close(); Veza.Close(); Veza.Dispose(); } private string DajImePrezime(string BrojIndeksa) { string ImePrezime = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); strSQL = "Select Ime + ' ' + Prezime as [ImePrezime] from Student where BrojIndeksa='" + BrojIndeksa + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); if (dr.Read()) { if (dr["ImePrezime"] != null) { ImePrezime = dr["ImePrezime"].ToString(); } } return ImePrezime; } private string DajStanjeRacuna(string BrojIndeksa) { String strStanjeRacuna = "0"; // konektovanje na bazu

Page 78: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

73

SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQLPrikaz; strSQLPrikaz = "Select StanjeRacuna from Student where BrojIndeksa='" + BrojIndeksa + "'"; SqlCommand KomandaPrikaz = new SqlCommand(strSQLPrikaz, Veza); SqlDataReader drPrikaz = KomandaPrikaz.ExecuteReader();

// transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (drPrikaz.HasRows) { bool citanje = drPrikaz.Read(); strStanjeRacuna = drPrikaz["StanjeRacuna"].ToString(); } else { strStanjeRacuna = "0"; } Veza.Close(); Veza.Dispose(); return strStanjeRacuna; } private bool SnimiPodatke(clsUplata objNovaUplata) { bool uspeh = false; int brojslogovaUnos = 0; int brojslogovaIzmena = 0; // string BrojIndeksa = objNovaUplata.BrojIndeksa; // --------------------------------------------------------------------- // *****1.********* OCITAVANJE STANJA RACUNA IZ TABELE Student *********** // string strStanjeRacuna = DajStanjeRacuna(BrojIndeksa); //******************* konektovanje na bazu

Page 79: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

74

SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // ------------------------------------------------------------------------ // *********** 2. OTVARANJE TRANSAKCIJE SqlTransaction objTransakcija = Veza.BeginTransaction();

// --------------------------------------------------------------------- // *****3.********* SNIMANJE UNOSA U TABELU Uplata *****************// // formatiranje za sql string Datum = "'" + objNovaUplata.DatumUplate.Month.ToString() + "/" + objNovaUplata.DatumUplate.Day.ToString() + "/" + objNovaUplata.DatumUplate.Year.ToString() + "'"; // snimanje podataka String strSQLUnos; // NE STAVLJAMO ID, JER JE IDENTITY, auto increment strSQLUnos = "Insert into Uplata (DatumUplate, IznosUplate, BrojIndeksa) values (" + Datum + ", " + objNovaUplata.Iznos + ", '" + BrojIndeksa + "')"; SqlCommand KomandaUnos = new SqlCommand(strSQLUnos, Veza); // dodeljivanje komande transakciji KomandaUnos.Transaction = objTransakcija; brojslogovaUnos = KomandaUnos.ExecuteNonQuery(); // --------------------------------------------------------------------- // ******4. ********* KREIRANJE NOVOG STANJA RACUNA ZA NAVEDENOG STUDENTA ********** // Single StanjeRacuna = 0; StanjeRacuna = Single.Parse(strStanjeRacuna) + Single.Parse(objNovaUplata.Iznos); // --------------------------------------------------------------------- // *****5.********* SNIMANJE IZMENE U TABELU Student *****************// // snimanje podataka String strSQLIzmena; // NE STAVLJAMO ID, JER JE IDENTITY, auto increment strSQLIzmena = "Update Student set StanjeRacuna=" + StanjeRacuna.ToString () + " where Student.BrojIndeksa='" + BrojIndeksa + "'"; SqlCommand KomandaIzmena = new SqlCommand(strSQLIzmena, Veza); // dodeljivanje komande transakciji KomandaIzmena.Transaction = objTransakcija; brojslogovaIzmena = KomandaIzmena.ExecuteNonQuery(); // ------------------------------------------------------------------------------------

Page 80: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

75

// ******* 6. ***********IZVRSAVANJE TRANSAKCIJE *************************************** objTransakcija.Commit(); // --------------------------------------------------------------------- // *********7. *************** diskonektovanje sa baze ****************************// objTransakcija.Dispose(); Veza.Close(); Veza.Dispose();

int ukupnoslogova = brojslogovaUnos + brojslogovaIzmena; uspeh = (ukupnoslogova == 2); return uspeh; } // DOGADJAJI protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { NapuniCombo(); } } protected void ddlBrojIndeksa_TextChanged(object sender, EventArgs e) { } protected void ddlBrojIndeksa_SelectedIndexChanged(object sender, EventArgs e) { lblImePrezime.Text = DajImePrezime(ddlBrojIndeksa.Items[ddlBrojIndeksa.SelectedIndex].ToString()); } protected void Calendar1_SelectionChanged(object sender, EventArgs e) { txtDatumUplate.Text = Calendar1.SelectedDate.Day.ToString() + "." + Calendar1.SelectedDate.Month.ToString() + "." + Calendar1.SelectedDate.Year.ToString() + "."; } protected void btnOdustani_Click(object sender, EventArgs e) { IsprazniKontrole(); } protected void btnUnos_Click(object sender, EventArgs e) { clsUplata objUplata = new clsUplata();

Page 81: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

76

objUplata.BrojIndeksa = ddlBrojIndeksa.Text; objUplata.DatumUplate = Calendar1.SelectedDate; objUplata.Iznos = txtIznosUplate.Text; bool uspeh = SnimiPodatke(objUplata); string porukauspeha = ""; if (uspeh) { porukauspeha = "USPEH snimanja!"; } else {

porukauspeha = "NEUSPEH snimanja!"; }; //PORUKA O USPEHU lblStatus.Visible = true; lblStatus.Text = porukauspeha; // Msg box ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + porukauspeha + "');", true); } } }

PROGRAMSKI KOD STRANICE ZA TABELARNI PRIKAZ SA FILTEROM

// using System.Data.SqlClient; using System.Data; using System.Configuration; namespace FakultetInfo { public partial class UnosTabelarni : System.Web.UI.Page { private DataTable UcitajSveUplate() { DataTable TabelaPodataka = new DataTable(); // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select CAST(Day(DatumUplate) as nvarchar(2)) + '.' + CAST(Month(DatumUplate) as nvarchar(2)) + '.' + CAST(Year(DatumUplate) as nvarchar(4)) + '.' as [Datum uplate], Student.BrojIndeksa as [Broj indeksa], Student.Prezime as [Prezime studenta], Student.Ime as [Ime studenta], IznosUplate as

Page 82: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

77

Iznos from Uplata inner join student on Uplata.BrojIndeksa=Student.BrojIndeksa order by DatumUplate desc"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows)

{ TabelaPodataka.Load(dr); } dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private DataTable UcitajUplatePoBrojuIndeksa(string BrojIndeksa) { DataTable TabelaPodataka = new DataTable(); // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select CAST(Day(DatumUplate) as nvarchar(2)) + '.' + CAST(Month(DatumUplate) as nvarchar(2)) + '.' + CAST(Year(DatumUplate) as nvarchar(4)) + '.' as [Datum uplate], Student.BrojIndeksa as [Broj indeksa], Student.Prezime as [Prezime studenta], Student.Ime as [Ime studenta], IznosUplate as Iznos from Uplata inner join student on Uplata.BrojIndeksa=Student.BrojIndeksa where Uplata.BrojIndeksa='" + BrojIndeksa + "' order by DatumUplate desc"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows) { TabelaPodataka.Load(dr); }

Page 83: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

78

dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private void PrikaziPodatke(DataTable TabelaPodataka) { gvUplate.DataSource = TabelaPodataka; gvUplate.DataBind();

} protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PrikaziPodatke(UcitajSveUplate()); } } protected void btnFilter_Click(object sender, EventArgs e) { PrikaziPodatke(UcitajUplatePoBrojuIndeksa(txtFilter.Text)); } protected void btnSvi_Click(object sender, EventArgs e) { txtFilter.Text = ""; PrikaziPodatke(UcitajSveUplate()); } } }

PROGRAMSKI KOD STRANICE ZA IZBOR PARAMETARA STAMPE

// using System.Data.SqlClient; using System.Data; using System.Configuration; namespace FakultetInfo { public partial class UplataStampaParametri : System.Web.UI.Page { private void NapuniCombo() { // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString);

Page 84: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

79

Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select BrojIndeksa from Student order by BrojIndeksa"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // punjenje combo ddlBrojIndeksa.Items.Clear(); ddlBrojIndeksa.Items.Add("izaberite...");

while (dr.Read()) { ddlBrojIndeksa.Items.Add(dr["BrojIndeksa"].ToString()); } // diskonektovanje sa baze dr.Close(); Veza.Close(); Veza.Dispose(); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { NapuniCombo(); } } protected void btnPrikazi_Click(object sender, EventArgs e) { if (rdbVrsteStampe.SelectedIndex == 0) { Response.Redirect("UplataStampaSpisak.aspx"); } else { Response.Redirect("UplataStampaFilter.aspx?BrojIndeksa=" + ddlBrojIndeksa.Text); } } } }

Page 85: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

80

PROGRAMSKI KOD Printer-friendly STRANICE “SPISAK SVIH”

using System.Data.SqlClient; using System.Data; using System.Configuration; namespace FakultetInfo { public partial class UplataStampaSpisak : System.Web.UI.Page { private DataTable UcitajSveUplate() { DataTable TabelaPodataka = new DataTable();

// konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select CAST(Day(DatumUplate) as nvarchar(2)) + '.' + CAST(Month(DatumUplate) as nvarchar(2)) + '.' + CAST(Year(DatumUplate) as nvarchar(4)) + '.' as [Datum uplate], Student.BrojIndeksa as [Broj indeksa], Student.Prezime as [Prezime studenta], Student.Ime as [Ime studenta], IznosUplate as Iznos from Uplata inner join student on Uplata.BrojIndeksa=Student.BrojIndeksa order by DatumUplate desc"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows) { TabelaPodataka.Load(dr); } dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private void PrikaziPodatke(DataTable TabelaPodataka) { gvUplate.DataSource = TabelaPodataka; gvUplate.DataBind(); }

Page 86: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

81

protected void Page_Load(object sender, EventArgs e) { PrikaziPodatke(UcitajSveUplate() ); } } }

PROGRAMSKI KOD Printer-friendly STRANICE “FILTRIRANI PRIKAZ”

using System.Data.SqlClient; using System.Data; using System.Configuration; namespace FakultetInfo { public partial class UplataStampa : System.Web.UI.Page { // NASE PROCEDURE private string DajImePrezime(string BrojIndeksa) { string ImePrezime = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString);

Veza.Open(); strSQL = "Select Ime + ' ' + Prezime as [ImePrezime] from Student where BrojIndeksa='" + BrojIndeksa + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); if (dr.Read()) { if (dr["ImePrezime"] != null) { ImePrezime = dr["ImePrezime"].ToString(); } } return ImePrezime; } private string DajStanjeRacuna(string BrojIndeksa) { string StanjeRacuna = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); strSQL = "Select StanjeRacuna from Student where BrojIndeksa='" + BrojIndeksa + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza);

Page 87: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

82

SqlDataReader dr = Komanda.ExecuteReader(); if (dr.Read()) { if (dr["StanjeRacuna"] != null) { StanjeRacuna = dr["StanjeRacuna"].ToString(); } } return StanjeRacuna; }

private DataTable UcitajUplatePoBrojuIndeksa(string BrojIndeksa) { DataTable TabelaPodataka = new DataTable(); // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select CAST(Day(DatumUplate) as nvarchar(2)) + '.' + CAST(Month(DatumUplate) as nvarchar(2)) + '.' + CAST(Year(DatumUplate) as nvarchar(4)) + '.' as [Datum uplate], IznosUplate as Iznos from Uplata where BrojIndeksa='" + BrojIndeksa + "' order by DatumUplate desc"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows) { TabelaPodataka.Load(dr); } dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private void PrikaziPodatke(DataTable TabelaPodataka) { gvUplateStudenta.DataSource = TabelaPodataka; gvUplateStudenta.DataBind(); }

Page 88: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

83

// DOGADJAJI protected void Page_Load(object sender, EventArgs e) { // preuzimanje vrednosti sa stranice sa parametrima string BrojIndeksa= Request.QueryString["BrojIndeksa"].ToString(); // lblBrojIndeksa.Text = BrojIndeksa; lblImePrezime.Text = DajImePrezime(BrojIndeksa); lblStanjeRacuna.Text = DajStanjeRacuna(BrojIndeksa);

PrikaziPodatke(UcitajUplatePoBrojuIndeksa(BrojIndeksa)); } } }

4.2. WEB SERVISI

4.2.1. Definicija i primer realizacije i korišćenja

web servisa Web servis je definisan kao:

“Web services are components on a Web server that a client application

can call by making HTTP requests across the Web. ASP.NET enables you

to create custom Web services or to use built-in application services,

and to call these services from any client application.” (preuzeto sa:

http://msdn.microsoft.com/en-us/library/t745kdsh.aspx)

Postupak kreiranja web servisa raspoloživ je na:

http://msdn.microsoft.com/en-us/library/8wbhsy70.aspx

Projekat sa kreiranim web servisom predstavlja biblioteku klasa, gde je

web servis zapravo klasa sa javnim metodama. Fajl takve klase ima

ekstenziju “asmx”.

Page 89: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

84

Primer projekta sa kreiranim web servisom – početno stanje nakon kreiranja projekta:

Primer web aplikacije koja koristi web servis dat je na sledećoj slici:

Page 90: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

85

4.2.2. Postupak kreiranja web servisa

1. Biramo framework 3.5, tip projekta web, ASP.Net Web

service application. Biramo folder gde će web servis biti

snimljen.

2. Dobijamo automatski primer Hello World proceduru za

prikaz stringa:

3. Menjamo naziv procedure i tekst ispisa.

Page 91: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

86

NAPOMENA:

Da bismo mogli da koristimo web servis, potrebno je da ga

testiramo.

4. Kliknemo u Solution explorer na Service1.asmx i izaberemo

F5.

5. Dobijamo:

Page 92: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

87

Gde je najvaznija URL adresa sa izvrsivim kodom:

6. Kad kliknemo na link PrikaziPoruku, dobijamo:

7. Kad kliknemo na INVOKE dugme, dobijamo rezultat izvrsavanja u

obliku XML-a:

Page 93: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

88

4.2.3. Korišćenje web servisa u web aplikaciji

1. Kreiramo web aplikaciju asp.net, u okviru 4.0 frameworka.

2. Dodajemo na Default.aspx stranicu taster i imenovanu labelu:

Page 94: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

89

3. Dodajemo reference na web servis (Project, Add Service

Reference):

4. Dobijamo:

Page 95: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

90

5. Biramo Advanced:

6.Biramo Add Web reference i unosimo url adresu web servisa:

Page 96: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

91

NAPOMENA:

Prethodno, web servis mora biti startovan, tj. Navedena lokalhost

adresa mora biti validna:

7. Kopiramo URL adresu servisa:

http://localhost:1441/Service1.asmx

u deo za unos URL adrese web servisa i dobijamo:

Page 97: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

92

8. Unos naziva (alijasa) reference na web servis (umesto localhost)

u text box desno:

9. Kliknemo Add Reference.

10. Dobijamo u Solution Exploreru Web aplikacije novu stavku: Web

Reference – ProbniWS.

Page 98: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

93

11. U programskom kodu web aplikacije instanciramo objekat klase

iz web servisa i pozivamo metodu:

12. Pokrecemo web aplikaciju, da bismo isprobali koriscenje web

servisa. Kliknemo na taster PRIKAZI

13. Dobijamo rec: “Dobrodosli !” cime smo potvrdili da web servis

radi.

Page 99: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

94

14. Zaustavicemo izvrsavanje web servisa i ponovo pokrenuti Web

aplikaciju.

15. Takodje se uspesno izvrsava aplikacija i prikazuje rec

“Dobrodosli!”.

4.2.4. Korišćenje raspoloživih besplatnih web servisa

Postoje web sajtovi na kojima se hostuju besplatni web servisi. Dovoljno

je samo u okviru dodavanja web servisa u našoj web aplikaciji dodati

URL sa tim web servisom i možemo koristiti njegove klase i metode.

Jedan od takvih sajtova je www.webservicex.net. U nastavku dajemo

primere besplatnih web servisa sa ovog sajta.

PRVI PRIMER - Slanje SMS

URL:

Page 100: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

95

Ubacujemo link u nasu web aplikaciju:

Dodeljujemo naziv:

Page 101: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

96

Novi web servis se pojavio na spisku u solution exploreru:

Pozivamo objekat za slanje SMS:

Page 102: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

97

DRUGI PRIMER: bar code generator

Biramo stranicu, zatim kliknemo na CLICK HERE da bismo dobili novi

prozor sa kompletnim URL za ASMX fajl web servisa.

Page 103: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

98

TRECI PRIMER – GEO IP ADRESA za razlicite zemlje

4.3. PRIMER - WEB APLIKACIJA SA WEB SERVISIMA I XML

ZADATAK: Na osnovu datog XML fajla kreirati web servis koji

omogućava čitanje podataka, odnosno izdvajanje podatka na osnovu

prosleđene vrednosti parametra. Kreirani web servis koristiti u okviru

web aplikacije, kako bi obezbedio sve potrebne podatke za realizaciju

unosa podataka.

DETALJAN ZADATAK:

Dat je SQL script za kreiranje baze podataka TRGOVINA. Realizovati web

aplikaciju koja ce omoguciti:

1. Unos podataka u tabelu prodaja, koristeci podatke iz tabele Roba

i podatke iz XML fajla (odnosno Web servisa) sa cenovnikom

robe. Prilikom unosa podataka u tabelu Prodaja, izvrsiti izmenu

(u okviru transakcije) podataka u tabeli Roba koji se odnose na

kolicinu na lageru.

2. Tabelarni prikaz prodaje.

Page 104: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

99

BAZA PODATAKA

SQL SKRIPT ZA KREIRANJE BAZE PODATAKA

USE [master]

GO

CREATE DATABASE [TRGOVINA]

GO

USE [TRGOVINA]

GO

CREATE TABLE [dbo].[Roba](

[SifraRobe] [nvarchar](10) NOT NULL,

[NazivRobe] [nvarchar](50) NOT NULL,

[JedinicaMere] [nvarchar] (15) NOT NULL,

[KolicinaLager] [int] NOT NULL

)

ALTER TABLE [dbo].[Roba]

ADD CONSTRAINT [PK_Roba] PRIMARY KEY CLUSTERED

(

[SifraRobe] ASC

)

Page 105: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

100

GO

CREATE TABLE [dbo].[Prodaja](

[IdProdaje] [int] IDENTITY(1,1) NOT NULL,

[DatumProdaje] [datetime] NOT NULL,

[IdRobe] [nvarchar](10) NOT NULL,

[Kolicina] [int] NOT NULL,

[CenaJM] [money] NOT NULL,

[NaplacenIznos] [money] NOT NULL

)

ALTER TABLE [dbo].[Prodaja]

ADD CONSTRAINT [PK_Prodaja] PRIMARY KEY CLUSTERED

(

[IdProdaje] ASC

)

GO

ALTER TABLE [dbo].[Prodaja] ADD CONSTRAINT [FK_Prodaja_Roba] FOREIGN

KEY([IdRobe])

REFERENCES [dbo].[Roba] ([SifraRobe])

ON UPDATE CASCADE

GO

XML FAJL SA PODACIMA O CENOVNIKU - Cenovnik.XML

<?xml version="1.0" standalone="yes"?>

<SpisakRobe>

<Roba>

<Sifra>1</Sifra>

<Cena>40</Cena>

</Roba>

<Roba>

<Sifra>2</Sifra>

<Cena>120</Cena>

</Roba>

<Roba>

<Sifra>3</Sifra>

<Cena>540</Cena>

</Roba>

</SpisakRobe>

Page 106: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

101

KORISNIČKI INTERFEJS STRANICE ZA UNOS PODATAKA

KORISNIČKI INTERFEJS STRANICE ZA TABELARNI PRIKAZ PODATAKA

Page 107: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

102

PROGRAMSKI KOD WEB SERVISA Kreiran je web servis. Postavljen je podfolder XMLfajlovi gde se nalazi fajl “Cenovnik.XML”. Web servis čita sadržaj XML fajla I

vraća odgovarajuću vrednost.

using System.Data; namespace WebService1 { /// <summary> /// Summary description for Service1 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)]

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string DajCenuJM(string SifraRobe) // IZ XML fajla sa Cenovnikom { string Cena = ""; DataSet dsCenovnik = new DataSet(); dsCenovnik.ReadXml(Server.MapPath("~/") + "XMLfajlovi/Cenovnik.XML"); // filtriranje dataset-a

Page 108: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

103

DataRow[] result = dsCenovnik.Tables[0].Select("Sifra=" + SifraRobe); Cena = result[0].ItemArray[1].ToString(); return Cena; } }

PROGRAMSKI KOD WEB APLIKACIJE KOJA KORISTI WEB SERVIS

Stranica za unos podataka

Klasa clsProdaja.cs

U okviru projekta Web aplikacije, kreirana je klasa za preuzimanje

podataka iz korisničkog interfejsa.

namespace WebTrgovina { public class clsProdaja { private DateTime pDanasnjiDatum; private string pNazivRobe; private string pKolicina; private string pCena; private string pIznos; public DateTime DanasnjiDatum { get { return pDanasnjiDatum; } set { pDanasnjiDatum = value; } } public string NazivRobe { get { return pNazivRobe; } set { pNazivRobe = value; } } public string Kolicina { get { return pKolicina; }

set { pKolicina = value; } } public string Cena { get { return pCena; } set { pCena = value; } } public string Iznos { get { return pIznos; } set { pIznos = value; } } } }

Page 109: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

104

Programski kod stranice za unos podataka

// using System.Data.SqlClient; using System.Data; using System.Configuration; namespace WebTrgovina { public partial class _Default : System.Web.UI.Page { // NASE PROCEDURE private void IsprazniKontrole() { //lblDatum.Text = ""; ddlRoba.Text = "izaberite..."; lblCenaJM.Text = "-"; txtKolicina.Text = "-"; lblIznos.Text = "-";

} private void NapuniCombo() { // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select NazivRobe from Roba order by NazivRobe"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // punjenje combo ddlRoba.Items.Clear(); ddlRoba.Items.Add("izaberite..."); while (dr.Read()) { ddlRoba.Items.Add(dr["NazivRobe"].ToString()); } // diskonektovanje sa baze dr.Close(); Veza.Close(); Veza.Dispose(); }

Page 110: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

105

private string DajJedinicuMere(string NazivRobe) { string JM = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); strSQL = "Select JedinicaMere from Roba where NazivRobe='" + NazivRobe + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader();

if (dr.Read()) { if (dr["JedinicaMere"] != null) { JM = dr["JedinicaMere"].ToString(); } } return JM; } private string DajSifruRobe(string NazivRobe) // { string SIFRA = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); strSQL = "Select SifraRobe from Roba where NazivRobe='" + NazivRobe + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); if (dr.Read()) { if (dr["SifraRobe"] != null) { SIFRA = dr["SifraRobe"].ToString(); } } return SIFRA; } private string DajCenuJM(string SifraRobe) // IZ Web servisa sa cenovnikom { string Cena = ""; CenovnikWS.Service1 objServisCena = new CenovnikWS.Service1(); Cena=objServisCena.DajCenuJM(SifraRobe); return Cena; }

Page 111: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

106

private string DajKolicinuNaLageru(string NazivRobe) { string LAGER = ""; string strSQL = ""; SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); strSQL = "Select KolicinaLager from Roba where NazivRobe='" + NazivRobe + "'"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader();

if (dr.Read()) { if (dr["KolicinaLager"] != null) { LAGER = dr["KolicinaLager"].ToString(); } } return LAGER; } private bool SnimiPodatke(clsProdaja objNovaProdaja) { bool uspeh = false; int brojslogovaUnos = 0; int brojslogovaIzmena = 0; // string NazivRobe = objNovaProdaja.NazivRobe; // --------------------------------------------------------------------- // *****1.********* OCITAVANJE KOLICINE NA LAGERU IZ TABELE Roba *********** // string strKolicinaLager = DajKolicinuNaLageru(NazivRobe); //******************* konektovanje na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // ------------------------------------------------------------------------ // *********** 2. OTVARANJE TRANSAKCIJE SqlTransaction objTransakcija = Veza.BeginTransaction(); // --------------------------------------------------------------------- // *****3.********* SNIMANJE UNOSA U TABELU Uplata *****************//

Page 112: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

107

// formatiranje za sql string Datum = "'" + objNovaProdaja.DanasnjiDatum.Month.ToString() + "/" + objNovaProdaja.DanasnjiDatum.Day.ToString() + "/" + objNovaProdaja.DanasnjiDatum.Year.ToString() + "'"; string IdRobe = DajSifruRobe(objNovaProdaja.NazivRobe); // snimanje podataka String strSQLUnos; // NE STAVLJAMO ID, JER JE IDENTITY, auto increment strSQLUnos = "Insert into Prodaja(DatumProdaje, IdRobe, Kolicina, CenaJM, NaplacenIznos) values (" + Datum + ", '" + IdRobe + "', " + objNovaProdaja.Kolicina +

"," + objNovaProdaja.Cena + "," + objNovaProdaja.Iznos + ")"; SqlCommand KomandaUnos = new SqlCommand(strSQLUnos, Veza); // dodeljivanje komande transakciji KomandaUnos.Transaction = objTransakcija; brojslogovaUnos = KomandaUnos.ExecuteNonQuery(); // --------------------------------------------------------------------- // ******4. ********* KREIRANJE NOVOG STANJA RACUNA ZA NAVEDENOG STUDENTA ********** // Single LagerKolicina = 0; LagerKolicina = Single.Parse(strKolicinaLager) - Single.Parse(objNovaProdaja.Kolicina); // --------------------------------------------------------------------- // *****5.********* SNIMANJE IZMENE U TABELU Student *****************// // snimanje podataka String strSQLIzmena; // NE STAVLJAMO ID, JER JE IDENTITY, auto increment strSQLIzmena = "Update Roba set KolicinaLager=" + LagerKolicina.ToString() + " where Roba.SifraRobe='" + IdRobe + "'"; SqlCommand KomandaIzmena = new SqlCommand(strSQLIzmena, Veza); // dodeljivanje komande transakciji KomandaIzmena.Transaction = objTransakcija; brojslogovaIzmena = KomandaIzmena.ExecuteNonQuery(); // ------------------------------------------------------------------------------------ // ******* 6. ***********IZVRSAVANJE TRANSAKCIJE *************************************** objTransakcija.Commit(); // --------------------------------------------------------------------- // *********7. *************** diskonektovanje sa baze ****************************// objTransakcija.Dispose(); Veza.Close(); Veza.Dispose(); int ukupnoslogova = brojslogovaUnos + brojslogovaIzmena; uspeh = (ukupnoslogova == 2);

Page 113: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

108

return uspeh; } // --------------------------------------------- // ****************DOGADJAJI ******************* protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblDatum.Text = DateTime.Now.Day.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Year.ToString() + ".";

NapuniCombo(); } } protected void ddlRoba_SelectedIndexChanged(object sender, EventArgs e) { lblJedinicaMere.Text = DajJedinicuMere(ddlRoba.Items[ddlRoba.SelectedIndex].ToString()); lblJedMere.Text = lblJedinicaMere.Text; lblCenaJM.Text = DajCenuJM(DajSifruRobe(ddlRoba.Items[ddlRoba.SelectedIndex].ToString())); } protected void btnIzracunaj_Click(object sender, EventArgs e) { Single UkupanIznos = Single.Parse(lblCenaJM.Text) * Single.Parse(txtKolicina.Text); lblIznos.Text = UkupanIznos.ToString(); } protected void btnSnimi_Click(object sender, EventArgs e) { clsProdaja objProdaja = new clsProdaja(); objProdaja.DanasnjiDatum = DateTime.Now.Date; objProdaja.NazivRobe = ddlRoba.Text; objProdaja.Kolicina = txtKolicina.Text; objProdaja.Cena = lblCenaJM.Text; objProdaja.Iznos = lblIznos.Text; bool uspeh = SnimiPodatke(objProdaja); string porukauspeha = ""; if (uspeh) { porukauspeha = "USPEH snimanja!"; } else { porukauspeha = "NEUSPEH snimanja!"; }; //PORUKA O USPEHU lblStatus.Visible = true; lblStatus.Text = porukauspeha; // Msg box

Page 114: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

109

ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + porukauspeha + "');", true); } protected void btnOdustani_Click(object sender, EventArgs e) { IsprazniKontrole(); } } }

Programski kod stranice za tabelarni prikaz podataka

using System.Data; using System.Data.SqlClient; using System.Configuration;

namespace WebTrgovina { public partial class Tabelarni : System.Web.UI.Page { //NASE PROCEDURE private DataTable UcitajSve() { DataTable TabelaPodataka = new DataTable(); // konekcija na bazu SqlConnection Veza = new SqlConnection(ConfigurationManager.ConnectionStrings["NasaKonekcija"].ConnectionString); Veza.Open(); // preuzimanje podataka String strSQL; strSQL = "Select CAST(Day(Prodaja.DatumProdaje) as nvarchar(2)) + '.' + CAST(Month(Prodaja.DatumProdaje) as nvarchar(2)) + '.' + CAST(Year(Prodaja.DatumProdaje) as nvarchar(4)) + '.' as [Datum prodaje], Roba.NazivRobe as [Naziv Robe], Prodaja.Kolicina, Roba.JedinicaMere as [Jedinica mere], CAST (CAST (Prodaja.CenaJM as DECIMAL(10,0)) AS nvarchar(10)) + ' din' as [Cena jedinice mere], CAST (CAST (Prodaja.NaplacenIznos as DECIMAL(10,0)) AS nvarchar(10)) + ' din' as [Naplacen iznos] from Prodaja inner join Roba on Roba.SifraRobe=Prodaja.IdRobe order by Prodaja.DatumProdaje desc, Roba.NazivRobe asc"; SqlCommand Komanda = new SqlCommand(strSQL, Veza); SqlDataReader dr = Komanda.ExecuteReader(); // transformacija datareader u data table // - ne mora, u web aplikaciji se moze povezati direktno // grid sa data readerom, ali postoji problem zbog zatvaranja konekcije // pa je bolje ipak da se podati postave u datatable, koji nije direktno povezan sa bazom if (dr.HasRows) {

Page 115: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

110

TabelaPodataka.Load(dr); } dr.Close(); Veza.Close(); Veza.Dispose(); return TabelaPodataka; } private void PrikaziPodatke(DataTable TabelaPodataka)

{ gvProdaja.DataSource = TabelaPodataka; gvProdaja.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PrikaziPodatke(UcitajSve()); } } } }

Page 116: UNIVERZITET U NOVOM SADU - tfzr.uns.ac.rs Skripta2014.pdf · SUBP + baza podataka Sistem za upravljanje bazom podataka, sama baza podataka sa svim elementima koji uključuju i aktivne

Kazi Ljubica, Radulović Biljana UVOD U DISTRIBUIRANE INFORMACIONE SISTEME - praktikum

111

LITERATURA

[1] David Avison, Guy Fitzgerald, „Information systems development:

Methodologies, Techniques and Tools“, McGraw-Hill, 2003.

[2] Ljubomir Dulović: „Osnovi informaciologije i informacione

tehnologije“, Institut za nuklearne nauke Vinča, Beograd, 1991.

[3] Elmasri Ramez, Navathe Shamkant: “Fundamentals of database

systems”, Addison Wesley, 2007.

[4] Мihailо Јaukоvić: „Uvоd u infорmaciоnе sistemе“, Теhnička knjiga,

Беоgрad, 1992.

[5] Neđo Balaban, Živan Ristić, Jovica Đurković: „Principi informatike“,

Savremena administracija, Beograd, 1996.

[6] Vasconcelos A, Soursa P, Tribolet J: Information system Architecture

Metrics: an Enterprise Engineering Evaluation Approach, The Electronic

Journal of Information Systems Evaluation, Vol 10, Issue 1, pp 91-122,

ISSN 1566-6379, www.ejise.com

[7] Lockemann P.: Information system Architectures: From Art to

Science, Conference BTW2003 (Business, Technologie and Web)

Proceeedings 2003., http://doeseno.informatik.uni-

leipzig.de/proceedings/paper/keynote_lockeman.pdf

[8] Zachman, John, A Framework for Information System Architecture,

IBM system journal Vol.26 Nº 3, 1987, p.276 – 292.

[9] Mogin Pavle, Lukovic Ivan, Govedarica Miro: “Principi projektovanja

baza podataka”, Fakultet tehničkih nauka, Novi Sad, 2000.