Michal Krátký, Miroslav Beneš

Podobné dokumenty
Tvorba informačních systémů

Tvorba informačních systémů

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Programování v jazyku C# II. 8.kapitola

Komponenty v.net. Obsah přednášky

Tvorba informačních systémů

Programování v jazyku C# II. 5.kapitola

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Jazyk C# - přístup k datům

Tvorba informačních systémů

Programování v prostředí.net

Tvorba informačních systémů

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Použití databází na Webu

Tvorba informačních systémů

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Databázové a informační systémy

Tvorba informačních systémů

Formuláře. Internetové publikování. Formuláře - příklad

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Tvorba informačních systémů

Architektury informačních systémů

Architektury informačních systémů

Michal Krátký, Miroslav Beneš

InterSystems Caché Post-Relational Database

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Jazyk C# - přístup k datům

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Rezervační systém Tvorba WWW stránek

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

KIV/PIA 2013 Jan Tichava

Verzování a publikace dat na webu za pomoci PostgreSQL

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Michal Krátký, Miroslav Beneš

Informační systémy 2008/2009. Radim Farana. Obsah. Aktivní serverové stránky ASP. Active Server Pages. Activex Data Objects. LDAP database.

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Úvod do programovacích jazyků (Java)

DUM 14 téma: Interakce s uživatelem

Michal Krátký, Miroslav Beneš

Michal Augustýn Microsoft Most Valuable Professional

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Tvorba aplikací v Oracle Application Express

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Databáze I. Přednáška 4

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

JavaScript 101. "Trocha života do statických stránek"

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Tvorba informačních systémů

Informační systém pro e-learning manuál

Maturitní témata Školní rok: 2015/2016

NSWI096 - INTERNET JavaScript

Databázové systémy Cvičení 5.2

Úvod do Entity Frameworku

Vytváření a použití knihoven tříd

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jakub Čermák Microsoft Student Partner

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Struktura pamětí a procesů v DB Oracle. Radek Strnad

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Úvod do databázových systémů

Stručný úvod pro programátory. Michal Kuchta

Popis logování v aplikačním serveru

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

1 Webový server, instalace PHP a MySQL 13

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Jazyk C# - přístup k datům

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

C# - Databáze úvod, ADO.NET. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

Tvorba informačních systémů

Nové jazykové brány do Caché. Daniel Kutáč

8.2 Používání a tvorba databází

Úvod do aplikací internetu a přehled možností při tvorbě webu

Informační systém pro rezervaci pokojů hotelu SPORT

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Tvorba informačních systémů

TÉMATICKÝ OKRUH TZD, DIS a TIS

Webové služby pro. CenovaMapa.cz

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

ISZR Referenční agent.net

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Transkript:

Tvorba informačních systémů 1/50 Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009

Tvorba informačních systémů 2/50 Obsah Obsah ASP (ActiveServer Pages) ASP.NET Struktura ASP.NET: Web Forms, Controls Uživatelské řídící komponenty Příklad: objektově-relační mapování

Tvorba informačních systémů 3/50 ASP (Active Server Pages) Historie ASP (Active Server Pages) Skriptovací technologie na straně serveru Značkovací jazyk HTML, WML. Interpretovaný skript JScript, VBScript, JavaScript. Objektový model (Application, Server, Request, Response, Session+ COM komponenty). Chyby v návrhu Nedostatečné zapouzdření omezené opakované použití. Obtížné přizpůsobení různým klientům. Nedostatečná typová kontrola. Opakovaná interpretace všech požadavků. Obtížné uchováváni stavu formuláře.

Tvorba informačních systémů 4/50 ASP.NET ASP.NET Vývoj webových aplikací v libovolném jazyce podporovaném platformou.net. Kompilace aplikačního kódu. Přístup k rozsáhlým knihovnám.net (.NET classes). Jmenný prostor: System.Web.*. Web Forms. XML Web Services.

Tvorba informačních systémů 5/50 ASP.NET Vývojové nástroje MS VisualStudio.NET 2005/2008 Integrované vývojové prostředí. Komerční produkt. Vlastní WWW server. MS VisualStudio.NET (2003) + IIS. Integrované vývojové prostředí. Komerční produkt. MS.NET Framework + IIS Pouze řádkové překladače. ASP.NET Web MatrixProject www.asp.net/webmatrix/. Volně dostupné integrované prostředí. Vlastní WWW server.

Tvorba informačních systémů 6/50 ASP.NET Vývojové nástroje

Tvorba informačních systémů 7/50 ASP.NET Struktura ASP.NET namespace: System.Web.UI class Control - zapouzdřuje společné funkce prvků uživatelského rozhraní Controls, ID, Parent, EnableViewState, Visible, Context, ViewState,... class Page - reprezentuje webovou stránku Application, Request, Response, Server, Session, Cache, ErrorPage, IsPostBack, IsValid, Trace, Validators,... class UserControl bázová třída pro uživatelem definované komponenty.

Tvorba informačních systémů 8/50 ASP.NET Web Forms ASP.NET Web Forms Vizualní aplikační komponenty. Značkovací jazyk HTML/WML. XML znaky pro řídící prvky. Stránka ASP.NET Web Forms - soubor.aspx. Blok: <% %>. Na rozdíl od ASP není blok interpretován, ale kompilován. Programová logika. Zpracování událostí. Libovolný podporovaný jazyk. Součást souboru.aspx (Code Inline) nebo kód na pozadí (Code Behind) v samostatném souboru.

Tvorba informačních systémů 9/50 ASP.NET Controls ASP.NET Controls (řídící komponenty) Standard/Server Controls - Label, CheckBox,..., Data Controls, Validation Controls, Login Controls, Navigation Controls - Menu, TreeView,..., WebParts Controls, HTML Controls - prvky HTML, User Controls - uživatelské značky.

Tvorba informačních systémů 10/50 ASP.NET Controls ASP.NET Server Controls Programovatelné objekty na straně serveru, typicky UI elementy na stránce (např. textové pole). Objekty se podílejí na vytváření stránky, mohou mít vlastní výstup. Jednoduché přizpůsobení potřebám programátora. Vlastnosti nastavujeme deklarativně (atributy značek) nebo programově (v kódu).

Tvorba informačních systémů 11/50 ASP.NET Controls Práce se Server Controls Server controls (SC) jsou se stránkou identifikovány pomocí elementu obsahujícího atribut runat="server". Každý SC na stránce může mít přiřazeno jedinečné označení pomocí atributu id. Atribut id je pak použit při programové manipulaci s konkrétním SC. Ošetření událostí jméno události jako hodnota atributu. Např. asp:button obsahuje atribut Onclick. Implementace metody (události) se jménem shodným s hodnotou atributu.

Tvorba informačních systémů 12/50 ASP.NET Controls Server Controls namespace: System.Web.UI.WebControls AdRotator BulletedList Button Calendar CheckBox CheckBoxList DropDownList FileUpload HiddenField HyperLink Image ImageButton ImageMap Label LinkButton ListBox Literal MultiView and View Panel PlaceHolder RadioButton RadioButtonList Substitution Table TextBox Wizard Xml

Tvorba informačních systémů 13/50 ASP.NET Controls Příklad - Server Controls 1/3

Tvorba informačních systémů 14/50 ASP.NET Controls Příklad - Server Controls, servercontrols.aspx 2/3 1 <html> 2 <head> 3 < l i n k r e l = " s t y l e s h e e t " href= " i n t r o. css " > 4 < / head> 5 < sc ript language= "C# " runat =server > 6 void SubmitBtn_Click ( Object sender, EventArgs e ) { 7 Message. Text = " Hi " + H t t p U t i l i t y. HtmlEncode ( 8 Name. Text ) + ", you selected : " + 9 Category. SelectedItem ; 10 } 11 < / s c r i p t > 12 <body> 13 <center> 14 <form i d = " Form1 " action= " s e r v e r c o n t r o l s. aspx " 15 method= " post " runat=" server " > Řádky 5-10: Implementace metody volané na serveru po stisku tlačítka na formuláři.

Tvorba informačních systémů 15/50 ASP.NET Controls Příklad - Server Controls, servercontrols.aspx 3/3 1 <h3>name : <asp : textbox i d = "Name" runat=" server " / > 2 Category : 3 <asp : dropdownlist i d = " Category " runat=server> 4 <asp : l i s t i t e m >Student< / asp : l i s t i t e m > 5 <asp : l i s t i t e m >Developer< / asp : l i s t i t e m > 6 <asp : l i s t i t e m > S c i e n t e r < / asp : l i s t i t e m > 7 < / asp : dropdownlist> 8 < / h3> 9 <asp : button ID= " Button1 " text=" Lookup " 10 OnClick= " SubmitBtn_Click " runat = " server " / > 11 <p> 12 <asp : l a b e l i d = " Message " runat=" server " / > 13 < / form>< / center> 14 < / body> 15 < / html> Řádky 9-10: Po stisku tlačítka bude na serveru zavolána metoda SubmitBtn_Click

Tvorba informačních systémů 16/50 Code Inline vs. Code Behind Code Inline vs. Code Behind Code Inline - kód v jednom souboru Code Behind - kód na pozadí, ve více souborech.

Tvorba informačních systémů 17/50 Code Inline vs. Code Behind Příklad - Code Inline, inline.aspx 1/2 <%@ page language= "C# " %> < script runat=" server " > void Button1_Click ( o b j e c t sender, EventArgs e ) { Label1. Text = " Hello " + TextBox1. Text ; } < / script> <html> <head> < t i t l e >ASP.NET I n l i n e Pages< / t i t l e > < / head>

Tvorba informačních systémů 18/50 Code Inline vs. Code Behind Příklad - Code Inline, inline.aspx 2/2 <body> <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / > <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>

Tvorba informačních systémů 19/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx 1/3 <%@ page language= "C# " CodeFile= " behind. aspx. cs " I n h e r i t s = " behind_aspx " %> <html> <head> < t i t l e >ASP.NET CodeBehind Pages< / t i t l e > < / head> <body> <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / >

Tvorba informačních systémů 20/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx 2/3 <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>

Tvorba informačních systémů 21/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx.cs 3/3 using System ; p u b l i c p a r t i a l class behind_aspx : System.Web. UI. Page { protected void Button1_Click ( o b j e c t sender, EventArgs e ) { Label1. Text = " Hello " + TextBox1. Text ; } }

Tvorba informačních systémů 22/50 Code Directory Sdílení kódu mezi stránkami Adresář kódu (Code Directory) Adresář App_Code. Možné podadresáře App_Code musí být registrovány v souboru Web.config. Global Assembly Cache.NET komponenty je nutné opět registrovat v souboru Web.config.

Tvorba informačních systémů 23/50 Code Directory Příklad - Code Directory, CodeFolder.aspx 1/3 <%@ page language= "C# " %> < script runat=" server " > void Button1_Click ( o b j e c t sender, EventArgs e ) { CustomClass c = new CustomClass ( ) ; Label1. Text = c. GetMessage ( TextBox1. Text ) ; } < / script> <html> <head> < t i t l e >ASP.NET I n l i n e Pages< / t i t l e > < / head> <body>

Tvorba informačních systémů 24/50 Code Directory Příklad - Code Directory, CodeFolder.aspx 2/3 <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / > <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>

Tvorba informačních systémů 25/50 Code Directory Příklad - Code Directory, App_Code/CustomClass.cs 3/3 using System ; p u b l i c class CustomClass { p u b l i c S t r i n g GetMessage ( S t r i n g i n p u t ) { r e t u r n " Hello " + i n p u t ; } }

Tvorba informačních systémů 26/50 User Controls Příklad - User Controls, usercontrols.aspx 1/2 Podobně jako v JSP, můžeme i v ASP.NET vytvářet vlastní uživatelské značky. <%@ Page Language= "C# " %> <%@ Register TagPrefix=" tuo " TagName= " message " Src= " u s e r c o n t r o l s. ascx " %> <html> <body style=" f o n t : 10 pt verdana " > <h3>a Simple User Control< / h3> <tuo : message Text= " Hello World! " Color= " blue " runat=" server " i d = " Message " / > < / body> < / html>

Tvorba informačních systémů 27/50 User Controls Příklad - User Controls, usercontrols.ascx 2/2 < script language= "C# " runat=" server " > p u b l i c S t r i n g Color ; p u b l i c S t r i n g Text ; < / script> <span i d = " Message " style=" c o l o r :<%=Color%>" > <%=Text%>< / span>

Tvorba informačních systémů 28/50 Příklad, práce s databází Příklad, práce s databází 1/3 <%@ Page Language= "VB" %> <html> <head runat=" server " > < t i t l e >GridView Bound to SqlDataSource< / t i t l e > < / head> <body> <form i d = " form1 " runat=" server " > <asp : GridView ID= " GridView1 " DataSourceID= " SqlDataSource1 " runat=" server " / >

Tvorba informačních systémů 29/50 Příklad, práce s databází Příklad, práce s databází 2/3 <asp : SqlDataSource ID= " SqlDataSource1 " runat=" server " SelectCommand= "SELECT [ au_id ], [ au_lname ], [ au_fname ], [ phone ], [ address ], [ c i t y ], [ s t a t e ], [ z i p ], [ c o n t r a c t ] FROM [ authors ] " ConnectionString="<%$ ConnectionStrings : Pubs %>" / > < / form> < / body> < / html> Nevhodné: Ve view se objevuje SQL příkaz!

Tvorba informačních systémů 30/50 Příklad, práce s databází Příklad, práce s databází 3/3

Tvorba informačních systémů 31/50 INSERT INTO FileType Values ( pdf, a p p l i c a t i o n / pdf ) ;... INSERT INTO PaperVersion Values ( 2/12/2008, 1 ) ;... Příklad, ORM Příklad, ORM, create.sql Evidujeme informace o verzích článků a souborech ve kterých byl článek zaslán. CREATE TABLE PaperVersion ( i d INT NOT NULL PRIMARY KEY IDENTITY, date DATETIME NOT NULL, i d F i l e T y p e INT REFERENCES FileType ) ; CREATE INDEX PaperVersion_ id ON PaperVersion ( i d ) ; CREATE TABLE FileType ( i d INT NOT NULL PRIMARY KEY IDENTITY, extension VARCHAR( 5 ) NOT NULL, mime VARCHAR( 2 0 ) NOT NULL ) ; CREATE INDEX FileType_id ON FileType ( i d ) ;

Tvorba informačních systémů 32/50 Příklad, ORM Příklad, ORM

Tvorba informačních systémů 33/50 Příklad, ORM Příklad ORM, TableRelForm.aspx 1/2 1... 2 <html xmlns= " h t t p : / / www. w3. org /1999/ xhtml " > 3 <head runat=" server " >< t i t l e >AspNetExampleApp< / t i t l e >< / head> 4 <body> 5 <form i d = " form1 " runat=" server " ><div> 6 <asp : GridView ID= " GridView1 " runat = " server " AllowPaging= " True " 7 AutoGenerateColumns= " False " DataSourceID= " ODS_PaperVersion " > 8 <Columns> 9 <asp : BoundField DataField=" Id " HeaderText= " Id " 10 SortExpression= " Id " / > 11 <asp : BoundField DataField=" Date " HeaderText= " Date " 12 SortExpression= " Date " / > 13 <asp : BoundField DataField=" IdFileType " HeaderText= " IdFileType " 14 SortExpression= " IdFileType " / > Řádky 9-11: Přiřazení datového zdroje ke komponentě uživatelského rozhraní. Řádky 13-18: Definice jednotlivých sloupců tabulky atribut DataField obsahuje název atributu doménového objektu.

Tvorba informačních systémů 34/50 Příklad, ORM Příklad ORM, TableRelForm.aspx 2/2 1 <asp : TemplateField HeaderText= " FileType " SortExpression= " FileType " > 2 <ItemTemplate> 3 <asp : Label ID= " LabelFileType " runat = " server " 4 Text= <%# Eval ( " FileType. Extension " ) %> >< / asp : Label> 5 < / ItemTemplate> 6 < / asp : TemplateField> 7 < / Columns>< / asp : GridView>< / div> 8 <asp : ObjectDataSource ID= " ODS_PaperVersion " runat = " server " 9 SelectMethod= " Select " 10 TypeName= " AspNetExampleApp. Database. PaperVersionTable " > 11 < / asp : ObjectDataSource> 12 < / form>< / body>< / html> Řádky 1-6: Definice sloupce, který obsahuje hodnotu atributu záznamu s tabulky na kterou odkazuje cizí klíč idfiletype. Řádky 8-11: Definice datové zdroje GridView je naplněn kolekcí instancí získaných voláním metody Select třídy PaperVersionTable.

Tvorba informačních systémů 35/50 Příklad, ORM Příklad ORM, PaperVersion 1/2 Doménový objekt reprezentující záznam z tabulky PaperVersion. 1 using System ; 2 using System. C o l l e c t i o n s. Generic ; 3 using System. Text ; 4 5 namespace AspNetExampleApp. Database { 6 public class PaperVersion { 7 public s t a t i c S t r i n g ATTR_id = " i d " ; 8 public s t a t i c S t r i n g ATTR_date = " date " ; 9 public s t a t i c S t r i n g ATTR_idFileType = " i d F i l e T y p e " ; 10 11 private i n t mid ; 12 private DateTime mdate ; 13 private i n t midfiletype = 0 ; 14 private FileType mfiletype ; Řádek 14: Implementace vazby 1:1. Zde uložíme instanci na kterou odkazuje cizí klíč idfiletype.

Tvorba informačních systémů 36/50 Příklad, ORM Příklad ORM, PaperVersion 2/2 1 public i n t Id 2 { 3 get 4 { 5 return mid ; 6 } 7 set 8 { 9 mid = value ; 10 } 11 } 12 13 / /... set / get metody pro vsechny a t r i b u t y 14 } 15 } Pak můžeme psát: instance.id=...; popř. int myid = instance.id;

Tvorba informačních systémů 37/50 Příklad, ORM Příklad ORM, PaperVersionTable 1/4 Třída obsahuje metody reprezentující operace nad tabulkou PaperVersion.... namespace AspNetExampleApp. Database { public class PaperVersionTable : DbTable { public s t a t i c S t r i n g TABLE_NAME = " PaperVersion " ; public S t r i n g SQL_SELECT = "SELECT id, date, i d F i l e T y p e from " + TABLE_NAME + " ORDER BY i d ; " ; public PaperVersionTable ( ) : base (TABLE_NAME) { } / / I n s e r t the record public i n t I n s e r t ( PaperVersion paperversion ) { /... / } / / Update the record public i n t Update ( PaperVersion paperversion ) { /... / }

Tvorba informačních systémů 38/50 Příklad, ORM Příklad ORM, PaperVersionTable 2/4 1 / / Delete the record. 2 public i n t Delete ( PaperVersion paperversion ) 3 { /... / } 4 5 / / Select records 6 public C o l l e c t i o n <PaperVersion > Select ( ) 7 { 8 SqlCommand command = mdatabase. CreateCommand ( ) ; 9 command. CommandText = SQL_SELECT; 10 SqlDataReader reader = mdatabase. Select ( command ) ; 11 12 C o l l e c t i o n <PaperVersion > paperversions = Read ( reader ) ; 13 reader. Close ( ) ; 14 mdatabase. Close ( ) ; 15 return paperversions ; 16 } Řádky 8-10: Připravení dotazu a odeslání na databázi

Tvorba informačních systémů 39/50 Příklad, ORM Příklad ORM, PaperVersionTable 3/4 1 public C o l l e c t i o n <PaperVersion > Read ( SqlDataReader reader ) 2 { 3 C o l l e c t i o n <PaperVersion > paperversions = 4 new C o l l e c t i o n <PaperVersion > ( ) ; 5 while ( reader. Read ( ) ) { 6 PaperVersion paperversion = new PaperVersion ( ) ; 7 paperversion. Id = reader. GetInt32 ( 0 ) ; 8 paperversion. Date = reader. GetDateTime ( 1 ) ; 9 10 i f (! reader. IsDBNull ( 2 ) ) { 11 paperversion. IdFileType = reader. GetInt32 ( 2 ) ; 12 paperversion. FileType = 13 mdatabase. FileTypeTable. Select ( paperversion. IdFileType ) ; 14 } Řádky 10-14: Hodnota cizího klíče není NULL? Vyber záznam z tabulky FileType.

Tvorba informačních systémů 40/50 Příklad, ORM Příklad ORM, PaperVersionTable 4/4 1 else { 2 paperversion. IdFileType = 1; 3 paperversion. FileType = n u l l ; 4 } 5 paperversions. Add ( paperversion ) ; 6 } 7 return paperversions ; 8 } Řádky 1-4: Hodnota cizího klíče je NULL? Nastav null. Řádek 5: Přidáme načtený záznam do kolekce instancí.

Tvorba informačních systémů 41/50 Příklad, ORM Příklad ORM, DbTable 1 / /... 2 namespace AspNetExampleApp. Database { 3 public class DbTable { 4 i n t e r n a l s t a t i c Database mdatabase ; 5 protected S t r i n g mtablename ; 6 7 s t a t i c DbTable ( ) { 8 mdatabase = new Database ( ) ; 9 } 10 11 public DbTable ( S t r i n g tablename ) { 12 mtablename = tablename ; 13 } 14 15 / /... 16 } } Proměnná mdatabase je statická, bude tedy sdílena všemi třídami reprezentující tabulky. Platnost této instance skončí restartem webového serveru (IIS).

Tvorba informačních systémů 42/50 Příklad, ORM Příklad ORM, Database 1/6 1... 2 namespace AspNetExampleApp. Database { 3 { 4 public class Database { 5 / / p r i v a t e s t a t i c i n t TIMEOUT = 2 4 0 ; 6 private SqlConnection mconnection = new SqlConnection ( ) ; 7 u i n t mconnectnumber = 0 ; 8 bool mtransactionflag = false ; 9 SqlTransaction msqltransaction ; 10 private S t r i n g mlanguage = " en " ; 11 12 public PaperVersionTable PaperVersionTable ; 13 public FileTypeTable FileTypeTable ; Řádek 6: Všechny třídy reprezentující tabulky budou sdílet jedno spojení s databází. ASP.NET sám osobě používá pool - spojení se tedy nebude otevírat fyzicky. Řádek 12-13: Instance tříd reprezentující tabulky.

Tvorba informačních systémů 43/50 Příklad, ORM Příklad ORM, Database 2/6 1 public bool Connect ( ) 2 { 3 bool r e t = true ; 4 5 i f ( mconnection. State! = System. Data. ConnectionState. Open) 6 { 7 r e t = Connect ( WebConfigurationManager. 8 ConnectionStrings [ " ConnectionString " ]. ConnectionString ) ; 9 } 10 else i f (! mtransactionflag ) { 11 mconnectnumber++; 12 } 13 14 return r e t ; 15 } Řádek 7: V metodě connect se volá mconnection.open(); Řádek 11: Spojení je již aktivní? Pak pouze inkrementuj počet požadovaných spojení.

Tvorba informačních systémů 44/50 Příklad, ORM Příklad ORM, Database 3/6 1 public bool Close ( ) 2 { 3 i f (! mtransactionflag ) 4 { 5 i f ( mconnectnumber > 0 ) 6 { 7 mconnectnumber ; 8 } 9 } 10 11 i f ( mconnectnumber = = 0 ) 12 { 13 mconnection. Close ( ) ; 14 } 15 return true ; 16 } Řádky 11-14: Jakmile počet požadavků na spojení klesne na nula, můžeme zavolat close.

Tvorba informačních systémů 45/50 Příklad, ORM Příklad ORM, Database 4/6 1 public void BeginTransaction ( ) { 2 Connect ( ) ; 3 msqltransaction = mconnection. BeginTransaction ( 4 I s o l a t i o n L e v e l. S e r i a l i z a b l e ) ; 5 mtransactionflag = true ; 6 } 7 public void EndTransaction ( ) { 8 msqltransaction. Commit ( ) ; 9 mtransactionflag = false ; 10 mconnection. Close ( ) ; 11 Close ( ) ; 12 } Problém: Některé verze ADO.NET vyhodí výjimku pokud voláme BeginTransaction uvnitř jiné transakce. Musíme tedy zavést podobný systém jako v případě proměnné počítající počet požadavků na připojení mconnectnumber: int mtransactionnumber bude tedy obsahovat počet požadavků na začátek transakce.

Tvorba informačních systémů 46/50 Příklad, ORM Příklad ORM, Database 5/6 1 public SqlCommand CreateCommand ( ) { 2 SqlCommand command ; 3 i f ( mtransactionflag ) { 4 command = new SqlCommand ( n u l l, mconnection, msqltransaction ) ; 5 } 6 else { 7 command = new SqlCommand ( n u l l, mconnection ) ; 8 } 9 return command ; 10 } Před voláním každé operace s databází (Select, Insert apod.) volá třída reprezentující tabulku tuto metodu. Všichni klienti aplikace tedy sdílí connection, ale vytváří vlastní command. Poznámka: Je nutné provést zátěžové testy zda je toto řešení rovnocenné s řešením vytvářející pool spojení (v tomto případě by mconnection bylo pole připojení).

Tvorba informačních systémů 47/50 Příklad, ORM Příklad ORM, Database 6/6 1 public i n t I n s e r t ( SqlCommand command ) { 2 i n t rownumber = 0 ; 3 t r y { 4 Connect ( ) ; 5 command. Prepare ( ) ; 6 rownumber = command. ExecuteNonQuery ( ) ; 7 } 8 catch ( Exception e ) { 9 throw e ; 10 } 11 f i n a l l y { 12 Close ( ) ; 13 } 14 return rownumber ; 15 } 16 public SqlDataReader Select ( SqlCommand command ) { 17 Connect ( ) ; 18 command. Prepare ( ) ; 19 SqlDataReader sqlreader = command. ExecuteReader ( ) ; 20 return sqlreader ; 21 } 22 / /... D a l s i metody

Tvorba informačních systémů 48/50 Příklad, ORM Příklad, Diskuse Reprezentace databáze jako globální objekt se sdílenou instancí SqlConnection vede k těmto důsledkům: Musím zavést počítání požadavků na připojení a začátek transakce pro korektní uzavírání spojení. Musíme uzavírat části kódu, které pracují s těmito proměnnými, pro ostatní vlákna. Pokud Database odladíme, získáme transparentní objektové rozhraní k databázi. Alternativní řešení pak mohou vypadat takto: Objekt představující rozhraní k databázi popř. instanci SqlConnection vytváříme lokálně pro každý dotaz, popř. tuto instanci získáme jako parametr z metody, která otevírá transakci.

Tvorba informačních systémů 49/50 Příklad, ORM Další Detail záznamu s možností editace DetailView. Definice rolí a přiřazení viditelnosti položek menu a formulářů pro jednotlivé role. Společné vlastnosti stránky (záhlaví, zápatí) jsou shrnuty do tzv. MasterPage.

Tvorba informačních systémů 50/50 Příklad, ORM Reference Kurz na katedře informatiky: Vývoj webových aplikací http://dotnet.jku.at/courses/dotnet/ http://www.asp.net Tutoriály http://www.asp.net/quickstart/ aspnet/default.aspx.