Inmatning till databaser
Introduktion Innehåll Allmänt om formulär Element och kontroller Något om PostBack UserControls, SSI Att mata in från en .aspx-sida ADO.NET Validering Felhantering ?
Formulär WEB-SERVER KLIENT Tar fram efter- frågade filen Överför data (html) Den som surfar matar in uppgifter Skicka tillbaks data Bearbetar Metoden Post eller Get
Formulär Html-element <input type=”text” id=”x”/> Html-kontroller <input type=”text” id=”x” runat=”server”> Webserver-kontroller <asp:textbox id=”x” runat=”server”/>
Formulär-skillnader Html-element skickas exakt som det skrivs Html-kontroller x.value =”lite text i rutan!”, man kan programmera till viss del Webserver-kontroller som ovan + anpassning till olika webläsare + komplexa, behöver inte bli ett html-element + hanterar händelser och har egenskaper
Olika Webbserverkontroler Relativt enkla: Label, Button, TextBox, CheckBox, CheckBoxList, RadioButton, RadioButtonlist, DropDownList Mer komplicerade: Calendrar, DataGrid, DataList, Repeater Annat: Table, TableCell, TableRow, Image, ImageButton, HyperLink, AdRotator, 5st Valideringskontroller En komponent är ett sub-program. Eller en del av ett program, som kan användas av andra program. Det är en binär enhet, dvs. Exekverbar kod, till skillnad mot källkod. Det betyder att 3:e parts tillverkare av komponenter behöver inte skicka med någon källkod då de distrubierar sin produkt (komponenten). Ordet komponent kan defineras på flera olika sätt. Från att det bara är en binär enhet -> att varje .dll fil är en komponent. En striktare syn på det hela är att en komponent måste exponera sitt innehåll till andra program. Assemblies tillhandahåller denna exponeringsförmåga inom .Net Den strikaste definitionen kräver att komponenten orkar vi inte gå in på. (komponenten måste erbjuda kända interfaces för att ”befria ” systemresurser och erbjuda integrering med designvertyg.) MS introducerade .dll (dynamic link library) där ett eller flera program kunde använda en bunt kod sparad i en separat fil. Detta fungerade mycket bra så länge man skrev koden i samma språk (vanligtvis C). De gav inte möjlighet att utbyta data mellan program. För att utbyta data utvecklades DDE (Dynamic Data Exchange). Men detta format var inte särskillt flexibelt. Därefter utvecklade man OLE 1.0 (object linking and embedding), det innebar bla. att word kan använda sig av ett kalkylblad från excel. Detta var någonting som började likna komponenter, men det var inte en äkta komponent- standard (hade ej ett generellt syfte). Den första riktiga komponentstandarden var COM (component object model). Kom någongång runt mitten av 90-talet.. Dcom introducerade en förmåga för Com-komponenter att jobba över nätverk. Och COM+ gjorde det möjligt få hög prestanda i flerskiktade miljöer. Com fungerade bra, speciellt då man använde sig av c++., men com kräver även att information om komponenten läggs in i windows register. Vilket gör att installtionen/avinstallation blir komplicerat. ”DLL Hell” = olika program installerade olika versioner av samma dll vilket resulterade i att det ena programmet slutade att fungera. I .Net finns inte dessa problem längre. Fördelar med komponenter: -förbättrad återanvändning (gjot är gjort) -flexibilitet (c#, vb, c++ eller annat språk som stödjs av .NET) -(förmedling av subprogram) -effektivitet (om du köper komponenten)
Olika Webbserverkontroler En behållare: Panel Alla skrivs som <asp:kontrollnamn id=”” runat=”server”/> I Vs.Net: mellanslag ger olika alternativ, att klicka i designläge ger en funktion för en händelse, Page_Load, Button1_Click, SelectedItem_Changed En komponent är ett sub-program. Eller en del av ett program, som kan användas av andra program. Det är en binär enhet, dvs. Exekverbar kod, till skillnad mot källkod. Det betyder att 3:e parts tillverkare av komponenter behöver inte skicka med någon källkod då de distrubierar sin produkt (komponenten). Ordet komponent kan defineras på flera olika sätt. Från att det bara är en binär enhet -> att varje .dll fil är en komponent. En striktare syn på det hela är att en komponent måste exponera sitt innehåll till andra program. Assemblies tillhandahåller denna exponeringsförmåga inom .Net Den strikaste definitionen kräver att komponenten orkar vi inte gå in på. (komponenten måste erbjuda kända interfaces för att ”befria ” systemresurser och erbjuda integrering med designvertyg.) MS introducerade .dll (dynamic link library) där ett eller flera program kunde använda en bunt kod sparad i en separat fil. Detta fungerade mycket bra så länge man skrev koden i samma språk (vanligtvis C). De gav inte möjlighet att utbyta data mellan program. För att utbyta data utvecklades DDE (Dynamic Data Exchange). Men detta format var inte särskillt flexibelt. Därefter utvecklade man OLE 1.0 (object linking and embedding), det innebar bla. att word kan använda sig av ett kalkylblad från excel. Detta var någonting som började likna komponenter, men det var inte en äkta komponent- standard (hade ej ett generellt syfte). Den första riktiga komponentstandarden var COM (component object model). Kom någongång runt mitten av 90-talet.. Dcom introducerade en förmåga för Com-komponenter att jobba över nätverk. Och COM+ gjorde det möjligt få hög prestanda i flerskiktade miljöer. Com fungerade bra, speciellt då man använde sig av c++., men com kräver även att information om komponenten läggs in i windows register. Vilket gör att installtionen/avinstallation blir komplicerat. ”DLL Hell” = olika program installerade olika versioner av samma dll vilket resulterade i att det ena programmet slutade att fungera. I .Net finns inte dessa problem längre. Fördelar med komponenter: -förbättrad återanvändning (gjot är gjort) -flexibilitet (c#, vb, c++ eller annat språk som stödjs av .NET) -(förmedling av subprogram) -effektivitet (om du köper komponenten)
Lite om PostBack Kontrollerna har en egenskap Autopostback – styr postbackningen Sidan Page har en egenskap Page.IsPostBack – används i Page:load för att avgöra om sidan laddas första gången eller någon av de efterföljande Visa exempel filmtest – webform1
User Controls Som SSI i html Extension .ascx Inga html eller body taggar Inkluderas i aspx-sidor Kan innehålla webserverkontroller och hantera data mellan aspx och ascx-sidorna
User Controls – bra till: Sidhuvud/sidfot Navigeringsmenyer …
User Controls – sidfot.ascx: <td > Tillämpad fysik och …<br> Databasteknik och Webb..., 5p </td> <td> <img … > </tr> Observera att taggen <table> saknas, den finns i aspx-sidan
UC använd sidfot.ascx: Längst upp på sidan: <%@ Register Tagprefix=”my" TagName=”foot" src="sidfot.ascx" %> Man registrerar komponenten, med prefix, namn och källfil Observera att taggen <table> saknas, den finns i aspx-sidan
UC använd sidfot.ascx: I aspx-koden: <table> <my:head runat=”server”/> … <my:foot runat="server" /> </table> Observera att taggen <table> saknas, den finns i aspx-sidan
UC vidare lyx Baka in webserverkontroller Publika egenskaper i scriptdelen – Set/Get-kommandon Dessa återkommer i kontrollens asp.net-kod i ascx-filen Och i aspx-filen som vanliga egenskaper typ: <my:foot backcolor=”beige”> Observera att taggen <table> saknas, den finns i aspx-sidan
Inmatning till Databaser Steg ett: SQL-satsen testas i Access Steg två: Samma sträng körs i asp.net Steg tre: Delas av SQL-strängen ersätts med texter och egenskaper från webbserverkontroller. Exempel: …VALUES (’Pelle’, ’1’… …VALUES (’ ” & textbox1.text & ” ’1’…
ADO – OleDb ADO- Active Data Objects Managed Providers för databaser OleDb – Access, MySQL m.fl. SQL – för SQL-server
ADO – OleDbConnection Importera först NameSpacet Imports System.Data.OleDb Skapa sedan en instans av Objektet OleDbConnection. Konstruktorn har en parameter – anslutnings-strängen: Dim ObjConn As New OleDBConnection(”Provider=…;Data Source=…”)
ADO – OleDbConnection Har två metoder: Open() Close() Exempelvis: ObjConn.Open()
ADO-OleDbCommand Skapa först en instans av Objektet OleDbCommand. Konstruktorn har fyra olika parameterlistor. 1. () 2. (SQL-sträng) 3. (SQL-sträng, Obj OleDbConnection) 4. (SQL-sträng, Obj OleDbConnection, Obj OleDbTransaction)
ADO-OleDbCommand Exempel: Dim ObjCmd As New OleDbCommand(”SQL-sträng”, ObjConn) Exekvera: ObjCmd.ExecuteNonQuery
ADO-OleDbCommand Metoden ExecuteNonQuery Metoder Connection.Open och Close Egenskapen CommandText Egenskapen Connection
Detta behövs för insert, update och delete Imports System.Data.OleDb Dim ObjConn as New OleDbConnection(…) Dim ObjCmd as New OleDbCommand(…) ObjConn.Open() ObjCmd.ExecuteNonQuery() ObjConn.Close() (Exemplet förutsätter SQL-sträng och anslutningssträng i konstruktorerna)
Validering Validering av formulär – varför. Egenskap hos asp.net – texten försvinner inte från textrutorna Validera utifrån fem olika alternativ Validationskontrollen hör till aspx-sidan Validering av innehåll i annat objekt, t.ex. asp:textBox … (inte alla)
Valideringsordning Server Klient 1. Skicka html-kod 2. Användaren matar in data 3. Klientscript kollar datat 4. Giltigt data? Nej Avbryt och visa felmeddelanden 6. Ta emot och bearbeta datat. Ja 5. Skicka data!
Valideringstyper Tomt fält Jämför minnehåll med… Kontrollera över och nedre gräns Kontrollera fältets form Gör en egen validering
Validering olika typer Tomt – asp:RequiredFieldValidator Jämför - asp:CompareValidator Storlek – asp:RangeValidator Form – asp:RegularExpressionsValidator Egen – asp:CustomValidator
Validering - bra att veta Page.IsValid – användbar i scriptblocket, anger om hela sidan är validerad och klar Egenskapen ”dynamic” hos kontrollen Validationsummary – text t.ex. i ett popup-fönster
Databaser på webben Nästa föreläsning databindning, databindningskontroller, innehållet i databasen till webben