Samtidighed ved database transaktioner

Størrelse: px
Starte visningen fra side:

Download "Samtidighed ved database transaktioner"

Transkript

1 Samtidighed ved database transaktioner Synopsis i WebDesign 4 sem. Kursus nr f07 Studerende: Vidar Jon Bauge Vejleder: Poul Henriksen Roskilde Handelsskole, 2007 Indholdsfortegnelse Indledning...2 Problemformulering...2 Spørgsmål...2 Problembeskrivelse...3 Disconnected Data Architecture...4 Namespaces...4 ADO.NET...5 Dataset...5.Net data provider objekter...6 SqlDataSource...7 Databinding...8 Typer af samtidighedshåndtering...9 Optimistisk samtidighed...9 Optimistisk samtidighed og Disconnected Data Architecture...10 Pessimistisk samtidighed...10 Last write wins...10 Optimistisk versus Pessimistisk samtidighed...11 Min implementering af disse...12 Webformene Show Customer og Optimistic Concurrency...12 Webformen Pessimistic Concurrency...13 Konklusion...15 Litteratur...16 Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 1 af 16

2 Indledning Webapplikationer henvender sig ofte til et stort publikum, hvor der vil optræde mange samtidige brugere. Hvis denne applikation, anvender en database, og interaktionen med brugere medfører at der sker ændringer i databasen, er det nødvendig at kontrollere adgangen til databasen så man undgår lost updates, som følge af samtidige opdateringer af de samme data. I denne synopsis vil jeg se på hvordan samtidighedsproblematikken kan håndteres i en.net webapplikation. Der findes 3 principper for samtidighedshåndtering. Disse vil blive nærmere beskrevet senere i denne synopsis. 1. Optimistic Concurrency 2. Pessimistic Concurrency 3. Last write wins Problemformulering Håndtering af databaser på.net platformen er bygget op omkring Disconnected data architecture. Som default håndteres samtidighedsproblematikken med optimistic concurrency, hvor data fra databasen gøres tilgængelig for webapplikationen ved at en eller flere rækker flyttes over i datasets der er tilgængelige for webapplikationen. Efter ændring af data, kan databasen opdateres, hvis der ikke er sket en ændring i de originale rækker i databasen efter at kopiering til datasets fant sted. Hvis dette er tilfældet, udføres transaktionen ikke, og der foreslås bl.a. i pensum at dette kan håndteres ved at brugeren får en fejlmeddelelse og bedes om at gentage sine transaktioner. Alternativt kan man anvende princippet last write wins, der i praksis ikke tager højde for samtidighedsproblematikken. Dette fremstår dog som meget risikabelt, i det der er fare for at databasen bliver inkonsistent eller at data ikke bliver korrekt opdateret (lost update). Spørgsmål 1. Hvordan kan situationer med mange samtidige transaktioner håndteres i en.net applikation? 2. Er optimistic concurrency tilstrækkeligt ved høje belastninger i applikationer der kræver få fejlmeddelelser? 3. Findes der alternativer til Disconnected data architecture og Optimistic concurrency der er bedre egnet til at håndtere disse situationer? Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 2 af 16

3 Problembeskrivelse Ovennævnte løsninger virker utilstrækkelige i en webapplikation, hvor man forventer mange, samtidige transaktioner på de samme data, og stiller krav til få fejlmeddelelser fra applikationen. Man kan f.eks. stille op følgende scenario: Man har en e-handels webapplikation, med nogle få meget populære produkter. Dvs mange (samtidige) forespørgsler på nogle få bestemte rækker. Hvis applikationen er designet således, at man ved bestilling opdaterer databasen, f.eks. lagerbeholdning vil man, ved optimistic concurrency, opleve at kunder afvises hvis mange kunder bestiller den samme vare samtidigt. Kunde A læser data for opdateringer. Inden han kan nå at fuldføre sin ordre, læser kunde B de samme data. Ved optimistic concurrency checkes dataene konsistens umiddelbart inden skrivning til databasen sker. Hvis 2 kunder har læst de samme data, vil derfor den der sidst er klar med sin ordre, og dermed skrivning til databasen, få en fejlmeddelelse og ordren vil blive afvist. En e-handels applikation er et eksempel på en webapplikation der ikke er tolerant overfor sådanne fejl, i det de er en ekstra belastning på kunden. Dette vil i den sidste ende gå udover omsætningen. Jeg vil i denne synopsis præsentere strukturen i ADO.NET og hvordan man anvender ADO.NET til at udføre søgning og transaktioner i en database. Jeg vil også kort skrive om databindings, for at vise hvordan tabeller kan knyttes til webcontroller i en webapplikation. Videre vil jeg tage Disconnected Data Architecture op, og se på mulighederne for at anvende både optimistisk og pessimistisk samtidighed indenfor denne arkitektur. Endelig vil jeg vurdere de 3 måder til samtidighedshåndtering i forhold til hverandre. Til denne synopsis, har jeg udvikle en enkel webapplikation, der viser hvordan optimistisk og pessimistisk samtidighedsbehandling fungerer på en tabel over kunder. Eftersom pessimistisk samtidighed ikke er direkte understøttet i.net på grund af disconnected data architecture, har jeg lavet en enkel implementation af denne. Denne implementering er enkel, og langt fra fuldkommen, men viser principene for hvordan jeg mener en pessimistisk samtidighedsbehandling kan implementeres fra en applikation, og hvor man udnytter disconnected data architecture til at reducere trafikken på databasen. For at begrænse denne synopsis, har jeg også udeladt de Exceptions der kan blive kastet ved transaktioner på en database. Dette er grunden til at min implementering ikke indeholder try-catch sekvenser, men baserer sig på at der ikke opstår fejlsituationer. Dette er naturligvis ikke acceptabelt i et produktionsmiljø, hvor applikationen skal tage højde for mulige exceptions, så den ikke standser. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 3 af 16

4 Disconnected Data Architecture.Net data provider objektet er kun tilkoblet databasen idet det henter eller opdaterer databasen. Efter at data er hentet fra databasen, gøres de tilgængelig for applikationen i form af et dataset, der senere kan anvendes til at opdatere databasen. Af denne grund er optimistisk samtidighed det anvendte princip for samtidighedshåndtering. På denne måden, reduceres trafikken til databasen, fordi den enkelte bruger kun er tilkoblet databasen under læsning og skrivning. Namespaces. Alle ADO.NET objektene er implementeret i klasser i System.Data namespace, men de klasser der er specifikke for connection, kommando og data adaptere er afhængige af hvilken.net data provider der anvendes. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 4 af 16

5 ADO.NET ADO.NET's grundlæggende opbygning Kilde: Murachs ASP.NET 2005 Arkitekturen i ADO.NET, består af 3 overordnede komponenter, eller objekter, nemlig et dataset, en.net dataprovider og selve databasen man kobler op imod. Dataset Dataset er helt centralt for disconnected data architecture, eftersom det indeholder en eller flere tabeller, der indeholder data der er hentet ud fra databasen, og som er læst ind i RAM, hvor de er direkte tilgængelig for applikationen. Datasettet består af en collection af tabeller, data om disse tabellerne, samt metoder der gør det muligt at ændre i dataene, og skrive dem tilbage til databasen. Datasettet er centralt, fordi det repræsenterer en ens interface til alle mulige datakilder, forskellige databaser etc, eftersom data hentes ind i et datasæt, bearbejdes i applikationen og derefter skrives tilbage til kilden. Dataset kan være typed og untyped. Et typed dataset, er defineret ud fra tabellerne i ens datakilde, og kan indholde metoder for datatilgang som man selv definerer. Anvendelsen af typed og untyped datasets i forbindelse med et SqlDataSource kan vises i følgende C# kode eksempel, hvor data hentes ud fra SqlDataSource1, hentes ned i et DataView, hvorfra det kan konverteres til først et untyped, og derefter et typed dataset: //Retrieve data through SglDataSource and place them in a DataView, then to a DataTable DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty); DataTable ctable = dv.totable(); //Untyped dataset DataSet cuntypeddataset = new DataSet(); cuntypeddataset = ctable.dataset; //Typed dataset, which is already defined to hold a Customers table dscustomer ctypeddataset= new dscustomer(); ctypeddataset = (dscustomer) ctable.dataset; return ctypeddataset; Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 5 af 16

6 .Net data provider objekter.net data provider objektet består af tre komponenter, som jeg vil kigge nærmere på: Dataadapter Dataadapteren optræder som en forbindelse mellem den underliggende datakilde, og datasettet. Der findes flere forskellige typer dataadaptere, der er beregnet på forskellige typer datakilder eller forskellige databaser. I kodeeksemplet på næste side er der benyttet en OleDbDataAdapter, der indeholder metoder til læsning og manipulation af data i en database. Af andre dataadaptere, kan hurtig nævnes SqlDataAdapter der anvendes imod MS SQL Server og OracleDataAdapter der anvender Oracle's database. I kodeeksemplet på næste side anvendes 2 af dataadapterens metoder. Først anvendes en metode til at definere adapterens SELECT kommando, altså den SQL-kommando der anvendes til at hente data fra databasen. Dernæst anvendes dataadapterens Fill metode til at lægge dataene over i et datasæt, hvor de er tilgængelig for applikationen.. Udover dette indeholder dataadapteren metoder til UPDATE og DELETE. Command Command objektet repræsenterer SQL-kommandoer eller stored procedure for læsning og skrivning til databasen. Dets vigtigste attributter er SQL-kommander og et connection objekt. Hver type dataadapter har et tilsvarende type command objekt. Command objektets har constructorer der tager både både en SQL-kommando og eller en connection som parametre. Dette er naturligvis attributter der kan ændres, som vist i nedenstående kodeeksempel. Connection Dette objektet repræsenterer en forbindelse til databasen, og dets vigtigste attribut er en connection String der indeholder de oplysninger der skal til for at koble op imod databasen. I nedenstående tilfælde angives en data provider og stien til den anvendte database. En connection string kan også indeholde brugernavn og password. I en multi-tier applikation, også en angivelse af serverens URL og navnet på databasen. I kodeeksemplet på næste side vises hvordan en dataadapter kan anvendes til at fylde et dataset. Der oprettes et dataadapter objekt, et command objekt og et connection objekt. I følgende linjer kan man se hvordan objekterne tager hinanden som attributter, og på denne måden er forbundet: dataadapter.selectcommand = command; dataadapter.selectcommand.connection = connection; Dataadapteren har et command objekt som attributter, og command objektet har et connection attribut. Når dataadapterens fill metode kaldes, anvender dette command objektet til at få afviklet en SQLkommando. Command objektet anvender Connection objektet til at konnektere til databasen, og data læses gennem de 3 objekter, gennem dataadapteren hvorfra de placeres i datasettet. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 6 af 16

7 private dscustomer getdataset1() { //Create a dataset dscustomer datasetcustomer = new dscustomer(); //Create a dataadapter object OleDbDataAdapter dataadapter = new OleDbDataAdapter(); //Create a command object OleDbCommand command = new OleDbCommand("SELECT * FROM Customers"); //Create a Connection object String constring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\Vidar\\Dokumenter\\Visual Studio 2005\\WebSites\\Concurrency_project\\App_Data\\Northwind2.mdb"; OleDbConnection connection = new OleDbConnection(conString); dataadapter.selectcommand = command; dataadapter.selectcommand.connection = connection; dataadapter.fill(datasetcustomer); return datasetcustomer; } Anvendelse af de 3 objekter i en.net dataprovider SqlDataSource Eftersom jeg udelukkende har anvendt SqlDataSource i mit projekt, vil jeg kort beskrive dette. SqlDataSource er et objekt, der består af de 3 ovennævnte objekter. Når en SqlDataSource oprettes ved at trække det over i en webform, oprettes automatisk de nødvendige objekter, og ved hjælp af en wizard kan man definere dets SQL-kommandoer. Al kode til SQLDataSource lægges i aspx-filen, hvorfor man kan oprette og databinde en SQLDataSource til en webcontrol uden en code-behind fil i C#. Nedeunder ses et udsnit af en aspxfil med en definition af en SQLDataSource med SELECT, UPDATE og DELETE-kommandoer. <asp:sqldatasource ID="SqlDataSource2" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:NorthWind2ConnectionString %>" DeleteCommand="DELETE FROM [Customers] WHERE [CustomerID] =? AND [CompanyName] =? AND [ContactName] =? AND [Address] =? AND [City] =? AND [PostalCode] =? AND [Phone] =?" InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactName], [Address], [City], [PostalCode], [Phone]) VALUES (?,?,?,?,?,?,?)" OldValuesParameterFormatString="original_{0}" ProviderName="<%$ ConnectionStrings:NorthWind2ConnectionString.ProviderName %>" SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName], [Address], [City], [PostalCode], [Phone] FROM [Customers] WHERE ([CustomerID] =?)" UpdateCommand="UPDATE [Customers] SET [CompanyName] =?, [ContactName] =?, [Address] =?, [City] =?, [PostalCode] =?, [Phone] =? WHERE [CustomerID] =? AND [CompanyName] =? AND [ContactName] =? AND [Address] =? AND [City] =? AND [PostalCode] =? AND [Phone] =?"> <DeleteParameters> <asp:parameter Name="original_CustomerID" Type="String" /> <asp:parameter Name="original_CompanyName" Type="String" /> Aspx kode der definerer parametre i en SqlDataSource Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 7 af 16

8 Databinding Databinding går ud på at man kan forbinde en webcontrol til en datasource. Controllen kan være en hvilken som helst control, der repræsenterer data, f.eks en DropDownList, RadioButtons etc eller de controller der er direkte lavet til at repræsentere data, som GridView, DetailsView, FomView etc. Databinding sker ved at man kobler en anvendte webcontrol til en datasource, der via sine SQL kommandoer, kan vise og opdatere data i databasen med webcontrollen som interface. Jeg vil af pladsmæssige hensyn vil jeg nøjes med at demonstrere hvordan jeg har anvendt dette i min applikation, hvor SqlDataSource er datakilde for en række DropDownLists og DetailsViews. Som tidligere nævnt, kan en SqlDataSource oprettes udelukkende i en aspx-fil, og sammenkoblingen mellem en datasource en web-control kan også finde sted her. Dette vises i nedenstående kodeeksempel: <asp:dropdownlist ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="CompanyName" DataValueField="CustomerID"> </asp:dropdownlist><asp:sqldatasource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthWind2ConnectionString %>" ProviderName="<%$ ConnectionStrings:NorthWind2ConnectionString.ProviderName %>" SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName], [Address], [City], [PostalCode], [Phone], [Locked], [Lockid] FROM [Customers]"> </asp:sqldatasource> Her er en DropDownlist bundet til en SqlDataSource1, med definition af både dataprovider, connection String og en SELECT kommando. Bemærk også at attributten AutoPostBack er sat til true, og dermed gennemtvinger en postback, og opdatering af hele websiden når der vælges en ny værdi i DropDownListen. Databinding kan naturligvis også håndteres fra code-behind filen, hvor man på denne måden bedre kan kontrollere hvordan ens kontroller opfører sig i forhold til brugerens interaktioner og events der kan opstå. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 8 af 16

9 Optimistisk samtidighed Typer af samtidighedshåndtering Ved optimistisk samtidighed, læses data fra databasen over i applikationen. Dataene gemmes i et dataset, der udover at holde styr på de data der oprindelig blev læst fra databasen også holder styr på de ændringer der er lavet fra applikationen. Når applikationen er færdig med sin redigering, data skal skrives tilbage til databasen, sker der først en sammenligning mellem de data der oprindelig blev hentet fra databasen og de tilsvarende poster i databasen. Hvis disse ikke er ens, har en anden bruger ændret i dataene, siden dataene blev læst ind. Der har altså været en samtidig transaktion, og en opdatering af databasen bliver afvist. Selve sammenligningen foregår ved hjælp af specielt udformede SQL UPDATE og DELETE kommandoer, med WHERE clauses der sørger for sammenligningen. Eftersom Optimistisk Samtidighed er direkte understøttet i.net, bliver disse SQL-kommandoerne automatisk genereret når man konfigurerer sin data-source, og man behøver ikke speciel kode i webformens code-behind fil, med mindre man ønsker at kontrollere om der er opstået problemer under opdateringen. Efter opdateringen af databasen, kan man få.net til at rejse en event, der indikerer om opdateringen er sket, eller om opdateringen er blevet forhindret som følge af samtidige transaktioner. Dette gøres ved at kontrollere om der er kastet en Exception, og ved at se på hvor mange rækker der rent faktisk er blevet opdateret. Hvis der er kastet en Exception, er der opstået en fejl, og hvis ingen rækker er blevet opdateret er man stødt på en samtidig transaktion. Hvordan dette UPDATE Customers Flowchart 1: Optimistisk Concurrency SET CompanyName =?, ContactName =?, Address =?, City =?, PostalCode =?, Phone =? WHERE (CustomerID =?) AND (CompanyName =?) AND (ContactName =?) AND (Address =?) AND (City =?) AND (PostalCode =?) AND (Phone =?) Update sætning fra Visual Studios Query Builder, der implementerer Optimistisk samtidighed. Den samme kommando kan genfindes i webformens aspx fil. implementeres i praksis, vil blive omtalt senere i denne synopsis, når jeg beskriver implementering af samtidighed i den webapplikation jeg har skrevet i forbindelse med denne synopsis. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 9 af 16

10 Optimistisk samtidighed og Disconnected Data Architecture Denne måden at håndtere samtidighed på, passer som hånd i handske til Disconnected Data Architecture. Eftersom man kun har forbindelse til databasen i det øjeblik der læses og opdateres, ved databasen intet om de transaktioner der skal finde sted på de læste data. Derfor kan databasens faciliteter for låsning ikke anvendes. Samtidighedskontrol skal derfor håndteres fra applikationen, ved hjælp af de tidligere omtalte WHERE clauser. Pessimistisk samtidighed Princippet i pessimistisk samtidighed er at de records der læses for redigering, bliver låst i det øjeblik de læses, og forbliver låst indtil opdatering er fuldført. Dermed har ingen andre adgang til andet end læsning af de pågældende records, indtil den planlagte transaktion er fuldført. Dette var default i tidligere versioner af.net, inden man begyndte at anvende Disconnected Data Architecture. En stor ulempe ved denne metoden, er at forbindelsen til databasen opretholdes i hele transaktionens forløb, altså fra dataene læses fra databasen, mens redigering udføres, og til databasen bliver opdateret. Pessimistisk samtidighed er ikke understøttet i.net, og hvis man ønsker at anvende denne metode, skal man selv implementere den. Dette kan gøres i databasen, men kræver som tidligere nævnt at forbindelsen til databasen opretholdes, hvilket øger belastningen på databasen. En tredje mulighed er at håndtere dette i applikationen, indenfor rammerne af Disconnected data architecture. Flowchart 2: Pessimistisk Concurrency Dette kan med fordel klares ved at implementere klasser i applikations laget, der håndterer adgangen til databasen, så hele applikationen kan anvende de samme klasser til transaktioner i mod databasen. Last write wins Last write wins kan som sådan ikke omtales som samtidighedsbehandling, idet princippet er at den sidste transaktion overskriver tidligere transaktioner. Derfor går denne metoden ud på at ignorere problemet omkring samtidighed. Derfor kan last write wins kun anvendes i applikationer hvor man med sikkerhed ved at der aldrig nogensinde vil optræde mere end en bruger samtidigt. Eftersom dette er urealistisk for en webapplikation, vil jeg ikke bruge mere plads på denne metode her. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 10 af 16

11 Optimistisk versus Pessimistisk samtidighed. Der findes en række fordele og ulemper ved de 2 metoder at håndtere samtidighed på, noget som jeg har prøvet at fremstille i denne tabel. Når man skal implementere datahåndtering i.net, er det selvfølgelig det enkleste at anvendelse optimistisk samtidighed. Simpelthen fordi dette er direkte understøttet af udviklingsplatformen, hvorimod man selv skal implementere pessimistisk samtidighed. Udover dette skal man overveje hvordan man ønsker at ens applikation skal opføre sig når flere brugere samtidigt arbejder på de samme data. I de fleste tilfælde vil optimistisk samtidighed ikke medføre større ulempe for brugeren end hvad der anses for acceptabelt. Hvis man derimod ønsker at brugeren advares inden redigering af data påbegyndes. F.eks. fordi man forventer at problemer med samtidighed ofte opstår, eller man vil undgå at brugerens ændringer afvises pga samtidighed, skal man overveje pessimistisk samtidighedshåndtering. Ved implementering af pessimistisk samtidighed, skal man overveje om den skal implementeres ved hjælp af databasens mekanismer for samtidighedskontrol, eller om man selv skal implementere sine låse. Her vil overvejelserne gå på om databasen tillader læseadgang til låste data, adgang til oplysninger om de låste data, f.eks hvem der har låsen. I tillæg skal man overveje problemstillinger omkring vedvarende forbindelser til databasen i forbindelse med pessimistisk samtidighed. Fordele Ulemper Optimistisk Samtidighed Understøttet i.net Kan anvendes indenfor Disconnected data architecture Ingen advarsler om samtidighed før update. Brugeren kan ikke få opdateret sine ændringer, selvom de er færdige Alle records altid tilgængelig for læsning Pessimistisk Samtidighed i databasen Tillader advarsel om samtidighed før redigering. Kan implementeres ved hjælp af databasens låse. Forbindelsen til databasen må opretholdes under redigering, til opdatering kan gennemføres. Pessimistisk Samtidighed i databasen i applikationen Tillader advarsel om samtidighed før redigering. Kan anvendes indenfor Disconnected data architecture Kræver at man selv implementerer låse, og metoder for disse i applikationen. Kan kræve understøttelse for at fjerne en lås i utide, f.eks. timeout. Det er lettere at administrere data omkring hvem der har låst. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 11 af 16

12 Min implementering af disse Jeg har lavet en lille webapplikation der implementerer pessimistisk og optimistisk samtidighed. Jeg har valgt at implementere den pessimistiske lås i applikationen, fordi jeg på denne måden kan vise hvordan den implementeres i C# i Visual Studio. I et produktionsmiljø, vil man måtte overveje at samle denne funktionalitet i nogle centrale funktionsklasser eller anvende databasens faciliteter til formålet. Ideen bag applikationen, er at give adgang til en tabel i en database med mulighed for at ændre i dens data. Ved at oprette flere sessioner, kan man fremkalde samtidighedsproblemer som applikationen skal håndtere med pessimistisk og optimistisk samtidighedshåndtering. Pessimistisk samtidighedshåndtering er implementeret ved at tilføje 2 kolonner til den anvendte tabel, kolonnerne locked og lockid, der holder oplysninger om rækken er låst og hvem der har låsen. Ved indlæsning for redigering ændres indholdet i disse felter, så de angiver at rækken er låst og af hvem. Min webapplikation består af 3 webforms, som jeg vil gennemgå i det følgende. Udover dette har jeg implementeret en webform hvor man kan skrive et brugernavn, så man anvende forskellige brugernavne i de forskellige sessioner man vælger at åbne. Denne vil ikke blive gennemgået, idet den udelukkende gemmer et brugernavn i en session variabel så man kan identificere hvem der har låst en række. Webformene Show Customer og Optimistic Concurrency Disse webformene er næsten ens, idet de består af 2 webcontroller. En DropDownList der lader brugeren vælge en kunde, og en DetailsView hvori man kan se detaljer om den valgte kunde. De 2 vigtigste forskelle på Show Customer og Optimistic Concurrency, er at man i Show Customer får vist de feltene der indeholder oplysninger om låsen, nemlig Locked og Lockid. I webformen Optimistic Concurrency er der desuden tilføjet en edit knap, så man kan redigere den enkelte række. Som datakilder er anvent en SqlDataSource, der er konfigurereret til UPDATE med optimistisk samtidighed. Den tilsvarende SqlDataSource i Show Customer, er konfigureret uden UPDATE og DELETE kommandoer. Code behind filen til Show Customer er faktisk tom, fordi alt fra konfigurering af SqlDataSource og databinding foregår i selve aspx filen. (Se tidligere kodeeksempler) Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 12 af 16

13 Code behind filen til Optimistic Concurrency består af en metode der udføres ved ændringer i det item webformens DetailsView. Efter en ændring checkes der om der blev genereret en Exception, og hvor mange rækker der blev påvirket af UPDATE. Hvis der blev genereret en exception betyder det at der opstod en fejl, under UPDATE. Hvis antal ændrede rækker er 0, er der opstået en concurrency error. I begge tilfældet vises en fejlmeddelelse. Optimistic concurrency error protected void DetailsView1_ItemChanged(object sender, DetailsViewUpdatedEventArgs e) { if (e.exception!= null) { Label2.Text = "An error occured during upate!"; Label4.Text = "Data has not been altered, Please try again later."; e.exceptionhandled = true; e.keepineditmode = true; } else if (e.affectedrows == 0) { Label3.Text = "A concurrency exception has occurred!"; Label4.Text = "Data has not been altered, Please try again later."; } else Label4.Text = "Updated with success"; Label5.Text = "Operation completed"; }//DetailsView1_ItemChanged Metode fra pessimistic.aspx.cs, der checker om der er opstået en fejl eller concurrency error ved UPDATE fra DetailsView Webformen Pessimistic Concurrency Denne webformen har jeg lavet manuelt ved at præsentere det enkelte felt i en separat TekstBox, med et tilhørende Label der viser hvilken kolonne det enkelte felt viser data fra. Kunden vælges, som i de andre webforms med en DropDownList. Datakilderne er 2 SqlDataSource, en der henter og opdaterer feltene med kundeoplysningerne og en der udelukkende håndterer feltene med låsen, altså Lock, og Lockid. Jeg har valgt at gøre det på denne måden for at få bedst mulig kontrol med afviklingen af programkoden, idet jeg på denne måden kunne programmere det hele selv. Når brugeren har valgt kunde ved hjælp af DropDownListen, bliver data hentes oplysninger om kunden ud i et DataView, hvorfra det enkelte felt kan hentes ud som strenge, og vises i den enkelte TextBox. Ved klik på Edit knappen, kontrolleres først om den aktuelle record er låst. Låsen læses ind, som ved kundeoplysningerne, ved hjælp af et DataView. private void getlock() { DataView dv = (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty); dv.rowfilter = "CustomerID = '" + DropDownList1.SelectedValue + "'"; DataRowView dvrow = (DataRowView)dv[0]; } locked = dvrow["locked"].tostring(); lockid = dvrow["lockid"].tostring(); Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 13 af 16

14 Hvis den pågældende record er låst, skrivebeskyttes TextBoxene, dataene vises, og brugeren præsenteres for en fejlmeddelelse. Hvis record'en ikke er låst, gøres TextBoxene skrivbare. Efter redigering, kan brugeren anvende knappen Update. Så opdateres dataene i databasen, låsen frigøres, og TextBoxene bliver igen skrivebeskyttet. Skrivning til databasen sker ved at anvende SqlDataSourcens Updatemetode og UpdateParameter attributter, som vist i nedenstående kodeeksempel, hvor låsen bliver sat: Fejlmeldelse ved låst record private void lockrecord() { SqlDataSource2.UpdateParameters["CustomerID"].DefaultValue = Session["Selected"].ToString(); SqlDataSource2.UpdateParameters["Locked"].DefaultValue = "Y"; SqlDataSource2.UpdateParameters["Lockid"].DefaultValue = Session["user"].ToString(); SqlDataSource2.Update(); } Pessimistic concurrency error fremkaldt ved at åbne 2 sessioner, der arbejder på de samme data. Denne metode til at låse data i databasen arbejder indenfor rammerne af Disconnected Data Architecture, fordi man kun har forbindelse til databasen i det øjeblik data læses fra, og skrives til, databasen. Når dataene er læst ind, kaldes en metode der læser de kolonner der indeholder låsen. Hvis dataene er låst, sørger applikationen for at der ikke kan redigeres, og at de metoder der skriver data tilbage til databasen ikke er tilgængelig for brugeren. F.eks ved at fjerne eller disable Update knappen. Den største mangel i denne implementering, er mangelen på en time-out funktion. Dette er noget som vil være påkrævet, for at sikre at data i databasen ikke forbliver låst efter fejlsituationer som f.eks. nedbrud i applikationen. Implementering af en timeout funktion på låsen skal også klares i applikationen, men er udeladt fra denne synopsis af pladshensyn. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 14 af 16

15 Konklusion I denne konklusion vil jeg prøve at besvare de spørgsmål jeg har stillet til denne synopsis: Hvordan kan situationer med mange samtidige transaktioner håndteres i en.net applikation? Der findes kun 2 brugbare metoder til at håndtere samtidige transaktioner i en.net applikation, optimistisk og pessimistisk samtidighedshåndtering. Det letteste er at anvende de metoder der er understøttet af platformen (optimistisk), fordi dette ikke kræver at man selv implementerer samtidighedsbehandling. Man kan dog selv implementere pessimistisk samtidighed, men så skal man nøje vurdere om dette står i forhold til eventuelle fordele. Er optimistic concurrency tilstrækkeligt ved høje belastninger i applikationer der kræver få fejlmeddelelser? Her må min konklusion være at pessimistisk samtidighed er godt egnet til applikationer med mange samtidige transaktioner. Man kan dog tabe ændringer fordi data er blevet låst under redigering..nets disconnected data architecture, med optimistisk samtidighed, må også siges at være skalerbar, i det reduktionen i antal database forbindelser frigør kapacitet på databasen. Denne frigjorte kapacitet betyder at der er plads til flere samtidige brugere. Man kan ikke ved forskellige måder at håndtere samtidighed på, forhindre at data bliver låst for opdatering af andre brugere. Hvis man udvikler en applikation der ikke er tolerant for fejlsituationer, bør man så vidt muligt undgå at brugere får problemer med samtidighed. Hvis man nu går tilbage til det scenario jeg præsenterede tidligere i denne synopsis, med en e- handles applikation, kan man opnå dette på følgende måde: Lagerbeholdningen opdateres ikke som følge af at en kunde opretter en ordre. Ved at lade kunden oprette en ny bestilling, anvendes ikke UPDATE, men INSERT der ikke er udsat for disse problemer. Så kan man overlade til personale at opdatere i databasen, og dermed skulle håndtere samtidighed. Findes der alternativer til Disconnected data architecture og Optimistic concurrency der er bedre egnet til at håndtere disse situationer? Udover pessimistisk samtidighedshåndtering, kan man anvende Last write wins. Eftersom denne metode håndterer samtidighed ved at ignorere problemet, kan den ikke anses at være et alternativ. Ved at anvende pessimistisk eller optimistisk samtidighedshåndtering får man applikationer der håndterer disse situationer på forskellige måder. Der findes intet endeligt svar på hvilken måde der er den rigtige, og systemudviklere må vurdere disse problemstillingene for den enkelte applikation. Kun på denne måden kan man sikre sine data imod inkonsistens, samtidig med at ens applikation giver de ønskede fejlmeddelelser på de ønskede tidspunkter. Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 15 af 16

16 Litteratur Murach's ASP.NET 2.0 Web Programming with C# 2005 by Joel Murach and Anne Boehm ISBN Roskilde Handelsskole, 2007 Vidar Jon Bauge Side 16 af 16

Database programmerings tips

Database programmerings tips Denne guide er oprindeligt udgivet på Eksperten.dk Database programmerings tips Denne artikel vil introducere nogle problem stillinger med flere samtidige brugere, som man skal tænke på, når man udvikler

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Hvorfor skal vi bruge objekt orienteret databaser?

Hvorfor skal vi bruge objekt orienteret databaser? OODBMS Vs. RDBMS 1 Indholdsfortegnelse Hvorfor skal vi bruge objekt orienteret databaser?... 3 OODBMS i erhvervslivet... 4 Bagsiden af medaljen... 5 OODBMS i praksis... 6 Konklusion... 8 2 Hvorfor skal

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002 Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002 På datalogi har vi en databaseserver, som de studerende på datalogi kan benytte til projekter og som også benyttes i forbindelse

Læs mere

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:... Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:... 9 Nogle HTML tags... 9 Databaser og PHP Når vi snakker

Læs mere

Object-Relational Mapping

Object-Relational Mapping Databaser for udviklere () Datamatiker TietgenSkolen Underviser: Allan Helboe 06-06-2010 Problemformulering Denne opgave er et forsøg på at beskrive problemerne der opstår ved anvendelsen af en relationel

Læs mere

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002 Databaser, efterår 2002 Databasesystemer Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk

Læs mere

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

Læs mere

GeoGIS2020. Installation. Udkast. Revision: 1 Udarbejdet af: BrS Dato: Kontrolleret af: Status: Løbende Reference: Godkendt af:

GeoGIS2020. Installation. Udkast. Revision: 1 Udarbejdet af: BrS Dato: Kontrolleret af: Status: Løbende Reference: Godkendt af: GeoGIS2020 Installation Udkast Revision: 1 Udarbejdet af: BrS Dato: 2015.08.31 Kontrolleret af: Status: Løbende Reference: Godkendt af: 1. GENERELT Side 2 af 16 Side 3 af 16 2. DOWNLOAD OG INSTALLATION

Læs mere

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til VB.NET og ADO.NET. Der findes en tilsvarende artikel

Læs mere

EasyIQ Opdatering 5.2.3 -> 5.4.0

EasyIQ Opdatering 5.2.3 -> 5.4.0 EasyIQ Opdatering 5.2.3 -> 5.4.0 Kunde: Forfatter: Thomas W. Yde Systemtech A/S Side: 1 af 17 1 Indholdsfortegnelse 2 GENERELT OMKRING FORUDSÆTNINGEN OG OPDATERINGS FORLØBET... 3 2.1 FORUDSÆTNINGER...

Læs mere

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML SQL kap 6-7 + 17-20 DDL og DML 1 De vigtigste SQL-sætninger Data Definition Language (DDL) create table: opretter en ny tabel create unique index: tilføjer et index til en tabel drop table : sletter en

Læs mere

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt

Læs mere

Projekt database. 3 Semester - Mul a Projekt 1. Yaser Osman cph-mo102@cphbusiness.dk. Dan Eskildsen cph-de32@cphbusiness.dk

Projekt database. 3 Semester - Mul a Projekt 1. Yaser Osman cph-mo102@cphbusiness.dk. Dan Eskildsen cph-de32@cphbusiness.dk Projekt database 3 Semester - Mul a Projekt 1 Yaser Osman cph-mo102@cphbusiness.dk Dan Eskildsen cph-de32@cphbusiness.dk Ammar Al-Basri cph-aa140@cphbusiness.dk Emre Kandemir cph-ek68@cphbusiness.dk Lotte

Læs mere

PID2000 Archive Service

PID2000 Archive Service PROLON CONTROL SYSTEMS Herstedvesterstræde 56 DK-2620 Albertslund Danmark Tlf.: (+45) 43620625 Fax: (+45) 43623125 PID2000 Archive Service Bruger vejledning Juni 2002 Denne manual beskriver brugen af softwaren

Læs mere

Introduktion til OPC Access

Introduktion til OPC Access Introduktion til OPC Access OPC Access anvendes til at kommunikere med jeres produktionsudstyr via OPC. OPC Access kombinerer en SQL Server med OPC, således at jeres produktionsudstyr kobles sammen med

Læs mere

En Kort Introduktion til Oracle

En Kort Introduktion til Oracle En Kort Introduktion til Oracle Henrik Bulskov 12. februar 2001 bulskov@ruc.dk 1 Start SQL*Plus... 1 1.1 TELNET... 1 1.2 WINDOWS SQL PLUS... 2 2 Kør et SQL-script... 3 3 Hjælp i SQL*Plus... 3 4 Editering

Læs mere

Import af rekursivt (parent-child) hierarki i Palo

Import af rekursivt (parent-child) hierarki i Palo Import af rekursivt (parent-child) hierarki i Palo Dette dokument beskriver hvordan et simpelt rekursivt (parent-child) hierarki kan importeres ind i Palo på forskellige måder via SQL og samtidig bibeholde

Læs mere

Database "opbygning"

Database opbygning Database "opbygning" Dette områder falder mest under en DBA's ansvarsområde. Det kan sagtens tænkes at en database udvikler i nogle situationer vil blive nød til at oprette produktions og test) databaser,

Læs mere

Web-baseret metadata redigeringsmodul

Web-baseret metadata redigeringsmodul Kravspecifikation Geodata Danmark Geodatacentret I/S Energivej 3 4180 Sorø Tlf. 5786 0400 Fax. 5786 0414 GIS Danmark A/S Birkemosevej 7 6000 Kolding Tlf. 7399 1100 Fax. 7399 11199 Web www.geodata.dk Web-baseret

Læs mere

Data lagring. 2. iteration (implement backend)

Data lagring. 2. iteration (implement backend) Data lagring 2. iteration (implement backend) Emner Grundlæggende database begreber. Data definitionskommandoer ER-diagrammer og cardinalitet/relationer mellem tabeller Redundant data og Normalisering

Læs mere

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse. Mysqli Webintegrator Når vi arbejder med server-side scripting ( i vort tilfælde PHP), har vi ofte behov for at kunne tilgå data, som vi opbevarer i en database. Det kan f.eks. dreje sig om nyhederne i

Læs mere

Yderligere fire personer er tildelt brugernavn og adgangskode og kan foretage uploadning og andre ændringer af hjemmesiden

Yderligere fire personer er tildelt brugernavn og adgangskode og kan foretage uploadning og andre ændringer af hjemmesiden Uploadning af filer til NMF hjemmeside Kai Sørensen, 18. juni 2013 Forord Den daglige vedligeholdelse af hjemmesiden foretages af: Kai Sørensen Frem 41 DK 2800 Lyngby e-mail: kai.sorensen@newmail.dk tel.:

Læs mere

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

PHP Snippets. De små korte. Skrevet af Daniel Pedersen PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk

Læs mere

TeamShare 2.1 Office Add in

TeamShare 2.1 Office Add in TeamShare 2.1 Office Add in TeamShare har i seneste versioner fået en række forbedringer til Office integrationen, der betyder brugerne kan udføre endnu mere arbejde direkte fra deres Outlook, og får nye

Læs mere

Delphi og Databaser for begyndere

Delphi og Databaser for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Delphi og Databaser for begyndere Denne artikel handler om hvordan man udnytter noget af det bedste i Delphi: Dets gode muligheder for integrering med

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

TimePlan version 6.0 - Installationsvejledning

TimePlan version 6.0 - Installationsvejledning TimePlan version 6.0 - Installationsvejledning For opgradering af tidligere TimePlan versioner anvendes opdateringsprogrammet: TimePlan 6 Wizard.exe. Programmet kan afvikles på dansk eller engelsk. Opdateringsprogrammet

Læs mere

Dokumentering af umbraco artikeleksport:

Dokumentering af umbraco artikeleksport: Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.

Læs mere

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø EG Data Inform Byggebasen WCF og webservices Jens Karsø 10 Indholdsfortegnelse Byggebasen Services indledning... 2 Målsætning... 2 Valg af teknologier... 3 Kommunikationsmodel for byggebasen... 3 Services.byggebasen.dk...

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Begrænsninger i SQL. Databaser, efterår 2002. Troels Andreasen

Begrænsninger i SQL. Databaser, efterår 2002. Troels Andreasen Databaser, efterår 2002 Begrænsninger i SQL Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk

Læs mere

Gem dine dokumenter i BON s Content Management System (CMS)

Gem dine dokumenter i BON s Content Management System (CMS) 24. august 2007 Gem dine dokumenter i BON s Content Management System (CMS) INDHOLDSFORTEGNELSE 1. Indledning... 2 2. Se indholdet i dit Content Management System... 3 3. Tilgå dokumenterne i My Content

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

Reeksamen, DSDS, forår 2008

Reeksamen, DSDS, forår 2008 Reeksamen, DSDS, forår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 22. august 2008 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.

Læs mere

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5 INDHOLD 1 Domæne 2 1.1 Design valg.................................... 2 1.1.1 User.................................... 2 2 Klassediagran 5 3 Serbio 7 3.1 Kommunikation..................................

Læs mere

Tietgenskolen - Nørrehus. Data warehouse. Database for udviklere. Thor Harloff Lynggaard DM08125

Tietgenskolen - Nørrehus. Data warehouse. Database for udviklere. Thor Harloff Lynggaard DM08125 Tietgenskolen - Nørrehus Data warehouse Database for udviklere Thor Harloff Lynggaard DM08125 Juni 2010 Indhold Beskrivelse... 3 Data warehouse... 3 Generelt... 3 Sammenligning... 3 Gode sider ved DW...

Læs mere

FORCE Inspect Online Manual v. 1.02. FORCE Inspect Online Manual. 1 af 18

FORCE Inspect Online Manual v. 1.02. FORCE Inspect Online Manual. 1 af 18 FORCE Inspect Online Manual 1 af 18 Indholdsfortegnelse Indholdsfortegnelse... 2 FORCE Inspect Online Manual... 3 Generelt... 3 Login... 3 Main... 4 Intro sektion... 4 Links sektion... 4 News sektion...

Læs mere

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer Denne guide er oprindeligt udgivet på Eksperten.dk TreeView i Access II Jeg vil i denne anden udgave af treeview føljetonen begynde på et mere brugbart eksempel med et TreeView. Vi laver en ny database

Læs mere

Installationsvejledning til F-Secure Anti-Virus

Installationsvejledning til F-Secure Anti-Virus Installationsvejledning til F-Secure Anti-Virus Kør setup (blå trekant) i FSECURE-mappen. Klik OK Programmet udpakkes, og følgende skærmbillede fremkommer: Klik Next 1 Klik ved I accept the agreement.

Læs mere

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Øvelse 9. Klasser, objekter og sql-tabeller insert code here Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til

Læs mere

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9 EVENTS INTERAGEREN MED FIL SYSTEMET WINDOWS FORMS Grundlæggende programmering Lektion 9 1 EVENTS Der sker ting når der sker ting 2 EVENTS Events er brugerhandlinger såsom tastetryk, klik, musebevægelser,

Læs mere

UPLOAD. Af Database og Website til Skolens Server

UPLOAD. Af Database og Website til Skolens Server UPLOAD Af Database og Website til Skolens Server INDHOLDSFORTEGNELSE Fra projekt til server... 3 Overførsel af SQL Database... 3 Eksekvering af T SQL Script... 8 Modificering af Visual Studio Projekt...

Læs mere

1 Indlæsning af script

1 Indlæsning af script 1 Indlæsning af script Når opgraderingen af invokeren er foretaget, skal du indlæse et script på den SQL server, hvor I skal modtage jeres SLS-data. Scriptet henter du her http://www.oes.dk/sw49118.asp

Læs mere

Løsningsbeskrivelse til bestilling af SMS-notifikation

Løsningsbeskrivelse til bestilling af SMS-notifikation Løsningsbeskrivelse til bestilling af SMS-notifikation Version 1.0, jnr.: 1084-V0667-11 Løsningsbeskrivelse Side 1 af 22 Indholdsfortegnelse 1. Manuel bestilling af SMS-notifikation... 3 1.1 Løsningens

Læs mere

Vejledning til Teknisk opsætning

Vejledning til Teknisk opsætning Vejledning til Teknisk opsætning v. 1.0 Adm4you, 2010. Indhold Kort om denne vejledning... 3 Generelt om easyourtime... 3 Installation af databasen... 3 Sikkerhed og rettigheder... 4 SQL Login... 4 Rettigheder

Læs mere

Hent filoplysninger fra billeder og filer

Hent filoplysninger fra billeder og filer Hent filoplysninger fra billeder og filer I denne vejledning bliver det gennemgået, hvordan man via Power Forespørgsel kan hente filoplysninger fra en mappe ind i Excel. Der skal opbygges følgende elementer:

Læs mere

OPC Access 3.0 opdatering via Stored Procedure

OPC Access 3.0 opdatering via Stored Procedure OPC Access 3.0 opdatering via Stored Procedure Dette dokument gennemgår et eksempel på, hvordan OPC Access 2.0 kan konfigureres til at opdatere en database via en stored procedure. OPC ACCESS 2.0 OPDATERING

Læs mere

1. Du bliver mødt af denne boks. Klik på Gem, og gem filen et sted hvor du kan finde den igen.

1. Du bliver mødt af denne boks. Klik på Gem, og gem filen et sted hvor du kan finde den igen. Ewido hed programmet tidligere, nu hedder det AVG Antispyware og er et program, som først og fremmest skal holde trojanske heste ude fra din maskine. Derudover, beskytter programmet dig mod en hel del

Læs mere

DRFLive - dynamisk visning af resultater fra DRF Stævnesystem

DRFLive - dynamisk visning af resultater fra DRF Stævnesystem DRFLive - dynamisk visning af resultater fra DRF Stævnesystem Resumé: Beskrivelse af program (DRFLive) til dynamisk visning af resulter fra DRF Stævnesystem Forfatter: Claus Hulstrøm Dato: 15. januar 2010

Læs mere

GEOGIS UDVEKSLING AF DATA MELLEM REGIONER OG RÅDGIVERE. Beregnet for GeoGIS Brugere. Dokument type Brugervejledning.

GEOGIS UDVEKSLING AF DATA MELLEM REGIONER OG RÅDGIVERE. Beregnet for GeoGIS Brugere. Dokument type Brugervejledning. Beregnet for GeoGIS Brugere Dokument type Brugervejledning Dato Oktober/2010 GEOGIS UDVEKSLING AF DATA MELLEM REGIONER OG RÅDGIVERE 1/14 Rambøll Informatik A/S Indhold 1. Baggrund... 3 2. Dataflow mellem

Læs mere

Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE

Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE Fact sheet Indholdsfortegnelse Fact Sheet Gantt kort Valgt af virksomhed Brainstorm Attribut tabel ER-diagram Skitse MySQLWorkbench

Læs mere

Installation og afvikling

Installation og afvikling 22. maj 2017 Installation og afvikling Indhold 1 Forskellige kendte fejlbeskeder... 2 2 Kan ikke se/finde ønsket netværksdrev ved installation... 3 2.1 Problem... 3 2.2 Løsning... 4 3 Installation/aktivering

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Views etc. Databaser

Views etc. Databaser Views etc. Databaser Views Med Views kan vi gemme nogle af de lange select sætninger. I vores eksempel fra tidligere er det f.eks. forbundet med en del besvær at finde telefon nr og bilmærker for en sælger

Læs mere

Installation og Drift. Aplanner for Windows Systemer Version 8.15

Installation og Drift. Aplanner for Windows Systemer Version 8.15 Installation og Drift Aplanner for Windows Systemer Version 8.15 Aplanner for Windows løsninger Tekniske forudsætninger Krav vedr. SQL Server SQL Server: SQL Server 2008 Express, SQL Server 2008 R2 eller

Læs mere

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med

Læs mere

Vejledning til validator test af metadata

Vejledning til validator test af metadata Vejledning til validator test af metadata Test af metadata finds under kategorien Metadata (Technical Guidance version 1.3). Man kan teste en eller flere ISO 19115/19119 metadata XML og GML filer, ved

Læs mere

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Dokument version: 2.0 ADS version: 1.0 Henvendelse vedrørende affald: Miljøstyrelsen Roskilde, Affaldssekretariatet

Læs mere

Nintex Workflow UK/DK

Nintex Workflow UK/DK Nintex Workflow UK/DK Når Nintex Workflows anvendes i et Dansk sproget SharePoint miljø, er der lidt forskel på hvad de forskellige elementer kaldes, såvel som rækkefølgen på disse. Noget er oversat, noget

Læs mere

Eksamen, DSDS, forår 2009

Eksamen, DSDS, forår 2009 Eksamen, DSDS, forår 2009 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 3. juni 2009 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0 Program Dokumentation PC Software Skrevet af Gruppen. Version 1.0 Indholds fortegnelse 1. INDLEDNING...3 1.1. FORMÅL...3 1.2. REFERENCER...3 1.3. VERSIONSHISTORIE...3 1.4. DEFINITIONER...3 1.5. DOKUMENTATIONENS

Læs mere

Udviklingstab, og hvordan man sætter instilling i dansk office 2007 som jeg bruger herhjemme.

Udviklingstab, og hvordan man sætter instilling i dansk office 2007 som jeg bruger herhjemme. Skrevet julen 2017 Kom igang med makroer I 2011 lavede jeg et makrokursus til en kollega i Tyskland. Kurset var baseret på den programmeringsstil som jeg brugte/bruger når jeg laver makroer. Det er muligt

Læs mere

DMX styring med USB-interface

DMX styring med USB-interface DMX styring med USB-interface Introduktion...2 DMX bibliotek...3 Programmering af kanaler...7 Sådan skabes et show/en lyssekvens...11 Introduktion DMX LightPlayer er en avanceret men meget brugervenlig

Læs mere

vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0

vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0 vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0 Indholdsfortegnelse 1 Indledning... 3 2 WMS generelt... 3 3 WFS generelt... 4 4 WMS/WFS eksterne kald i forskellige formater... 4 5

Læs mere

KIH Database. Systemdokumentation for KIH Databasen. 1. maj 2013. Side 1 af 13

KIH Database. Systemdokumentation for KIH Databasen. 1. maj 2013. Side 1 af 13 KIH Database Systemdokumentation for KIH Databasen 1. maj 2013 Side 1 af 13 Indholdsfortegnelse Indholdsfortegnelse... 2 Indledning... 3 Systemoverblik... 3 KIH Database applikationsserver... 5 Forudsætninger

Læs mere

Vejledning til. LearnSpace

Vejledning til. LearnSpace Vejledning til LearnSpace Version 13. 08. 2015 Indholdsfortegnelse Om LearnSpace... 2 Oprette et nyt kursus i egen afdeling... 3 Aktivere selvtilmelding til et kursus... 5 Tilmelde undervisere der må redigere

Læs mere

SQL Server Express og C#

SQL Server Express og C# SQL Server Express og C# I denne sektion skal du lære at oprette en database med SQL Server Express. Du kan gøre det med det software, der følger med Visual Studio. Når du har oprettet en database lærer

Læs mere

MailMax / Web v4.1. Brugsvejledning til webmail. Copyright 2003 Gullestrup.net

MailMax / Web v4.1. Brugsvejledning til webmail. Copyright 2003 Gullestrup.net MailMax / Web v4.1 Copyright 2003 Gullestrup.net Log ind på webmailen Start med at gå ind på http://webmail.gullestrup.net i din browser. Indtast din Email-adresse samt Adgangskode, som hører til din konto.

Læs mere

PDF. Vejledning - systemopsætning når du laver digitale annoncer JUNI 2003 DRRB/DDF/DDPFF

PDF. Vejledning - systemopsætning når du laver digitale annoncer JUNI 2003 DRRB/DDF/DDPFF PDF Vejledning - systemopsætning når du laver digitale annoncer JUNI 2003 DRRB/DDF/DDPFF INDHOLDSFORTEGNELSE Indholdsfortegnelse side 2 PDF i praksis side 3 Hvad skal være installeret? side 4 Kontrol side

Læs mere

Installation og Drift. Aplanner for Windows Systemer Version 8.15.12

Installation og Drift. Aplanner for Windows Systemer Version 8.15.12 Installation og Drift Aplanner for Windows Systemer Version 8.15.12 Aplanner for Windows løsninger Anbefalet driftsopsætning Cloud løsning med database hos PlanAHead Alle brugere, der administrer vagtplaner

Læs mere

Database. lv/

Database. lv/ Database 1 Database Design Begreber 1 Database: En fælles samling af logiske relaterede data (informationer) DBMS (database management system) Et SW system der gør det muligt at definer, oprette og vedligeholde

Læs mere

Version Dato Beskrivelse 1.0.0 26/11/2012 Initial version 1.2.0 05/03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Version Dato Beskrivelse 1.0.0 26/11/2012 Initial version 1.2.0 05/03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet. MOX og APOS2 Forord Dette dokument er en del af APOS version 2 manualerne. APOS version 2 (APOS2 herefter) er et organisation, klassifikation og personale system baseret på Sag & Dokument standarderne.

Læs mere

Brugermanual. Outlook Web Access for Exchange Server 2003 (OWA 2003) Udarbejdet af IT-afdelingen 2006

Brugermanual. Outlook Web Access for Exchange Server 2003 (OWA 2003) Udarbejdet af IT-afdelingen 2006 Brugermanual Outlook Web Access for Exchange Server 2003 (OWA 2003) Udarbejdet af IT-afdelingen 2006 Indholdsfortegnelse INDLEDNING... 3 HVORDAN DU FÅR ADGANG TIL DIN EMAIL... 3 OWA 2003 BRUGERGRÆNSEFLADE...

Læs mere

Mit Skolekort. Manual til skole admin brugere

Mit Skolekort. Manual til skole admin brugere Indhold 1. Versionshistorik... 3 2. Definitioner... 4 3. Login... 5 4. Beskeder... 6 5. Elev administration... 7 Elev administration tabel... 9 Redigering... 10 Bestilling... 11 6. Opret elev... 12 Opret

Læs mere

Skriftlig opgave. Designtanker i database-nære systemer

Skriftlig opgave. Designtanker i database-nære systemer Skriftlig opgave til eksamen for faget»databaser«designtanker i database-nære systemer Martin Ancher Holm Juni 2010 1 Intro Denne skriftlige opgave indeholder kort de daglige tanker jeg har omkring design

Læs mere

Installations- og. Brugervejledning. Rambøll CAREArkiv - version feb Rambøll Informatik A/S. j.nr. LLP feb.

Installations- og. Brugervejledning. Rambøll CAREArkiv - version feb Rambøll Informatik A/S. j.nr. LLP feb. Rambøll CAREArkiv - version 8.00.06 feb. 2008 Installations- og Brugervejledning Rambøll Informatik A/S j.nr. LLP070004.2 feb. 2008 Installations- og Brugervejledning til Rambøll CAREArkiv v. 8.00.06 Indholdsfortegnelse

Læs mere

Arvid Nilsson Webshop Adgang til webshoppen

Arvid Nilsson Webshop Adgang til webshoppen Arvid Nilsson Webshop Adgang til webshoppen Du finder webshoppen ved at gå ind på www.arvidnilsson.com og vælge dit lokale sprog. I topmenuens højre side finder du knappen WEBSHOP, som du klikker på -

Læs mere

OPC ACCESS HEARTBEAT 1

OPC ACCESS HEARTBEAT 1 OPC Access Heartbeat Dette dokument gennemgår i et kort eksempel, hvordan OPC Access konfigureres til at anvende Heartbeat funktionen til at dokumentere kontinuerlig forbindelse mellem SQL Server og OPC

Læs mere

Håndbog Til CPR services. Bilag 10 Opsætning af CPR klienten til understøttelse af forskellige installationstyper

Håndbog Til CPR services. Bilag 10 Opsætning af CPR klienten til understøttelse af forskellige installationstyper Håndbog Til CPR services Bilag 10 Opsætning af CPR klienten til understøttelse af forskellige installationstyper CPR-kontoret Datavej 20, Postboks 269, 3460 Birkerød E-post: cpr@cpr.dk. Telefax 45 82 51

Læs mere

LUDUS Web version Den 3. juli LUDUS Web

LUDUS Web version Den 3. juli LUDUS Web version 2.78.0 Den 3. juli 2019 DXC Technology Scandihealth A/S, P.O. Pedersens Vej 2, DK-8200 Århus N Tlf. +45 3614 4000, fax +45 3614 7324, www.dxc.com/ludus, sc-ludus@dxc.com CVR-nr. 25 46 93 64 Indholdsfortegnelse

Læs mere

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015 Installationsguide Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015 Indledning Dette dokument indeholder vejledning til installation af modulet NN Markedsdata i Dynamics NAV

Læs mere

Parameterisering af databasekald med ASP og ADO

Parameterisering af databasekald med ASP og ADO Denne guide er oprindeligt udgivet på Eksperten.dk Parameterisering af databasekald med ASP og ADO Jeg har efterhånden set en del spørgsmål her på Eksperten vedr. SQL injections og hvordan man kan beskytte

Læs mere

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Copenhagen Business Academy Multimediedesigner 3. semester - 1. projekt, september 2014 Gruppe 1 - MulA Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Study: Multimedia Design Project:

Læs mere

10. Rapporter i BBR... 2

10. Rapporter i BBR... 2 Indholdsfortegnelse 10. Rapporter i BBR... 2 10.1 Reporting Services arkitektur... 2 10.2 Reporting Services i Nyt BBR... 3 10.3 Faste BBR-rapporter... 4 10.3.1 Kort beskrivelse af de 10 faste rapporter...

Læs mere

A11: Last Year s Exam

A11: Last Year s Exam A11: Last Year s Exam Agenda Design of Site map and Web- structure (3) Design of data model (1) Design of database transactions (2) Construction of HTML and PHP scripts (3) Exercise 3: Design of Site map

Læs mere

LinkGRC. Dokumenter. Brugermanual

LinkGRC. Dokumenter. Brugermanual Brugermanual 1 INDHOLD 1. Navigation 2. Dashboard 3. 4. Support 2 NAVIGATION 1 På forsiden finder du dine installerede moduler i LinkGRC løsningen og du kan her vælge hvilket modul du ønsker at arbejde

Læs mere

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2013

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2013 Installationsguide Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2013 Indledning Dette dokument indeholder vejledning til installation af modulet NN Markedsdata i Dynamics NAV

Læs mere

Opsætning af MobilePBX med Kalenderdatabase

Opsætning af MobilePBX med Kalenderdatabase Opsætning af MobilePBX med Kalenderdatabase Dette dokument beskriver hvorledes der installeres Symprex Exchange Connector og SQL Server Express for at MobilePBX kan benytte kalenderadadgang via database

Læs mere

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer

Læs mere

SDU Assignment - undervisere

SDU Assignment - undervisere SDU Assignment - undervisere SDU Assignment giver mulighed for såvel anonym, som ikke anonym opgaveaflevering. Der kan afleveres flere filer på en gang. De studerende får en kvittering for afleveringen

Læs mere

DOtAB. Teknisk rapport

DOtAB. Teknisk rapport DOtAB Teknisk rapport Indholdsfortegnelse Introduktion... 1 Systemarkitektur... 1 Teknologier... 1 Platforme for mobile enheder... 1 Kommunikations interfacet... 2 Udviklingsmiljø... 2 IDOtAB (service

Læs mere

Arkitektur for begyndere

Arkitektur for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Arkitektur for begyndere Denne artikel beskriver forskellige basale n-tier arkitekturer. Som man bør kende og have valgt inden man går igang med at udvikle

Læs mere