Tidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet.

Størrelse: px
Starte visningen fra side:

Download "Tidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet."

Transkript

1 Denne guide er oprindeligt udgivet på Eksperten.dk LINQ for SQL med C# LINQ for SQL er en af de nye teknologier med.net 3.5. Den gør det muligt at skrive (typesikre!) database søgninger direkte i programkoden uden at behøve at spekulere (alt for meget) på hvordan de skulle formuleres i SQL. Skrevet den 06. feb 2009 af nielle I kategorien Programmering / C# Indledning Den store introduktion med.net 3.5 er uden tvivl LINQ. Forkortelsen står for Language INtegrated Query og er en teknologi til at skrive søgninger direkte i koden. LINQ er i virkeligheden en familie af relaterede teknologier: LINQ for Objekter, LINQ for XML og LINQ for SQL (samt LINQ for Entiteter). Denne artikel handler specifikt om LINQ for SQL. Tidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet. LINQ har berøringsflade til de fleste andre større introduktioner i.net lambda udtryk, extension metoder, partielle metoder og anonyme variable. For en bred gennemgang af nyhederne i.net 3.5 vil jeg henvise til arne_v's artikel: De følgende eksempler er baseret på Visual Studio 2008,.NET 3.5 og C# 3.0. Den anvendte database er en SQL Server 2005, men kunne sagtens have været en anden. v. 1.0: 05/02/ Første version. ORM LINQ for SQL er et eksempel på en ORM: Object-Relational Mapping. Når udviklere arbejder med OOP og relationelle databaser, sidder vi ofte med problemstillingen om hvordan objekter i programmeringssproget skal repræsenteres ved rækker og relationer i databasen. For selv om der er en hel del ligheder, så er der også en del væsentlige forskelle imellem OOP verdenen og den Relationelle verden. En ORM er en teknologi som forsøger at slå bro imellem de to verdener. LINQ er langt fra det første forsøg på at gøre dette, og inden for.net verdenen er NHibernate måske nok et af de mest succesfulde: Tiden må vise om LINQ for SQL kan klare sig i konkurrencen. Eksempel: en film database

2 Som demo benyttes denne tabel og disse data: CREATE TABLE [dbo].[film]( [id] [int] IDENTITY(1,1) NOT NULL, [titel] [nvarchar](50) NULL, [premiere] [datetime] NULL, [sprog] [nvarchar](50) NULL, ) 1 I Kina spiser de hunde :00:00 DK 2 Villa paranoia :00:00 DK 3 Blinkende lygter :00:00 DK 4 Inkasso :00:00 DK 5 Forsømte forår, Det :00:00 DK 6 Dansen med Regitze :00:00 DK 7 Midt om natten :00:00 DK 8 Gamle mænd i nye biler :00:00 DK 9 Ambulancen :00:00 DK 10 Casino Royale :00:00 US 11 Adams æbler :00:00 DK Entitets-klasser LINQ for SQL baserer sig på at man opretter og mapper en klasse for hver tabel man er interesseret i. Klassen dekoreres med en [Table] attribut og de enkelte felter med en [Column]. Det kan f.eks. se sådan her ud: using System; using System.Linq; // Der skal desuden oprettes en reference til System.Data.Linq.dll using System.Data.Linq; using System.Data.Linq.Mapping; namespace Film01 [Table] class Film [Column(IsPrimaryKey = true)] public int id; [Column] public string Titel; [Column] public DateTime Premiere; [Column] public string Sprog;

3 ... I dette eksempel er der sammenfald mellem hvad tabellen/klassen og felterne i tabellen hhv. klassen hedder. Det eneste andet, som er nødvendigt, er derfor at angive hvilket felt som svare til primær-nøglen: En sådan klasse kaldes for en entitets-klasse (engelsk: entity class). Søgning Når man har angivet hvordan klassen og tabellen forholder sig til hinanden, kan man bruge klassen til at lave søgninger i tabellen: class Program static void Main(string[] args) // Vælg databasen: LinqDemoDatabase. string connstr = "Data Source=dataexpe-dfocde;Initial Catalog=LinqDemoDatabase;Integrated Security=SSPI;"; // Opret en binding til databasen. DataContext datactx = new DataContext(connStr); // Opret en binding mellem filmtbl og Film-tabellen. Table<Film> filmtbl = datactx.gettable<film>(); // Definér en forespørgsel som: //... henter alle dansksprogede film //... sorteret faldende efter premiere //... og vi vil specifikt have titlen IQueryable<string> titelquery = filmtbl.where(f => f.sprog == "DK").OrderByDescending(f => f.premiere).select(f => f.titel); // Udskriv titlerne. foreach (string titel in titelquery) Console.WriteLine(titel); Forklaring af koden: Først oprettes en forbindelse mellem tabellen og databasen. Dette håndteres via DataContext-klassen, og denne er så at sige hjertet i LINQ for SQL. Det er ultimativt den som oversætter LINQ kommandoerne til

4 SQL kommandoer. Man kunne fristes til at læse næste kodelinje som om at indholdet af Film-tabellen bliver hentet ind i listen filmtbl. Dette ville imidlertid være forkert, for der hentes nemlig ikke noget fra databasen før at man rent faktisk begynder at bruge data - i dette tilfælde sker det først et par linjer længere nede i koden, i foreachløkken. Det er derfor mere korrekt at sige at filmtbl-listen bindes til Film-tabellen. Grunden til at det fungere på denne måde er af performance hensyn, og det kaldes for defeered execution (direkte oversat som: udskudt udførsel). Man kan nu søge i filmtbl. Er man allerede familiær med SQL kan man se at syntaksen har lånt derfra. Midt inde i koden står der pludselig sådan noget som: f => f.sprog == "DK" Dette er et lambda udtryk og er en af de nye tilføjelser med.net 3.5. Mere om dem om lidt, men for nu er det nok at sige at det skal læses som noget i stil med: "de film hvor sproget er 'DK'". Titlerne udskrives til sidst vha. en foreach-løkke, og samlet giver koden i outputtet: Ambulancen Adams æbler Inkasso Villa paranoia Gamle mænd i nye biler Blinkende lygter I Kina spiser de hunde Forsømte forår, Det Dansen med Regitze Midt om natten Lambda- og query syntaks Den viste syntaks kaldes for lambda syntaks og man kalder titelquery for en lambda query. C# har derudover en alternativ syntaks, som minder endnu mere om SQL; i denne kan queryen fra før skrives som: IQueryable<string> titelquery = from f in filmtbl where f.sprog == "DK" orderby f.premiere descending select f.titel; Dette kaldes for query comprehension syntaks. (Man kan sammenligne situationen lidt med at.net frameworket har typen System.Int32 og at C# har genvejen "int".)

5 Et lille smut forbi VB.NET LINQ syntaksen i VB.NET ligner meget. Samme eksempel: Imports System.Data.Linq Imports System.Data.Linq.Mapping Module Module1 <Table()> _ Class Film <Column(IsPrimaryKey:=True)> _ Public id As Integer <Column()> _ Public Titel As String <Column()> _ Public Premiere As DateTime <Column()> _ Public Sprog As String End Class Sub Main() ' Vælg databasen: LinqDemoDatabase. Dim connstr As String = _ "Data Source=dataexpe-dfocde;Initial Catalog=LinqDemoDatabase;Integrated Security=SSPI;" ' Opret en binding til databasen. Dim datactx As DataContext = New DataContext(connStr) ' Opret en binding mellem filmtbl og Film-tabellen. Dim filmtbl As Table(Of Film) = datactx.gettable(of Film)() ' Definér en forespørgsel som: '... henter alle dansksprogede film '... sorteret faldende efter premiere '... og vi vil specifikt have titlen Dim titelquery As IQueryable(Of String) = From f In filmtbl _ Where f.sprog = "DK" _ Order By f.premiere Descending _ Select f.titel ' Udskriv titlerne. For Each titel As String In titelquery Console.WriteLine(titel) Next End Sub End Module

6 Den bagvedliggende SQL Når koden eksekveres, oversætter DataContekst-objektet queryen til en SQL-kommando. DataContext giver mulighed for at lytte med på dette ved at koble sig på Log propertyen: // Opret en binding til databasen. DataContext datactx = new DataContext(connStr); datactx.log = Console.Out; I dette tilfælde er resultatet: SELECT [t0].[titel] FROM [Film] AS [t0] WHERE [t0].[sprog] ORDER BY [t0].[premiere] DESC Input NVarChar (Size = 2; Prec = 0; Scale = 0) [DK] -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: Der bruges parametre i SQL-kaldet - her i form Dette er med til at sikre mod uhensigtsmæssigheder og eventuelle sikkerhedshuller. Efter lidt simplificering ser den sådan her ud: SELECT Titel FROM Film WHERE Sprog = 'DK' ORDER BY Premiere DESC Lambda udtryk I Where()-funktionen i queryen: IQueryable<string> titelquery = filmtbl.where(f => f.sprog == "DK").OrderByDescending(f => f.premiere).select(f => f.titel); indgik dimsen: f => f.sprog == "DK" Dette kaldes for et lambda udtryk (engelsk: lambda expression) og er indført med C# 3.0. Hvordan skal den så læses? Where() forventer at man levere et Film-objekt og at der returneres en boolsk værdi. Man kan udspecificere dette ved at sige at den kræver en delegate med følgende signatur:

7 delegate bool DanskSprogetFilmDelegate(Film f); Where() udvælger så alle de film fra filmtbl hvor at den boolske værdi er true. I dette tilfælde bruges den til at filtrere på de film der er dansksproget. Indførelsen af de anonyme metoder i C# 2.0 var egentlig blot et mellemstadie til indførelsen af lambda udtrykkene: C# 1.0: En delegate (f.eks. en event-handler) skal i C# 1.0 assignes med en metode man havde oprettet andetsteds i koden: DanskSprogetFilmDelegate c1 = DanskSprogetFilm; static public bool DanskSprogetFilm(Film f) return f.sprog == "DK"; C# Anonyme metoder: Med indførelsen af anonyme metoder kunne man i stedet definere metoden i samme linje hvor den assignes til delegaten: DanskSprogetFilmDelegate c2 = delegate(film f) return f.sprog == "DK"; ; C# Lambda udtryk: Med lambda udtryk er syntaksen blevet gjort endnu mere kompakt: DanskSprogetFilmDelegate c3 = (Film f) => f.sprog == "DK"; eller blot: DanskSprogetFilmDelegate c3 = f => f.sprog == "DK"; idet C# slutter sig til typen af argumentet, f, via sammenhængen som den bruges i. CRUD

8 Når man arbejder med databaser, har man brug for hele CRUD spektrummet: Create, Retreive, Update og Delete - INSERT, SELECT, UPDATE og DELETE. Fokus i LINQ synes primært at ligge på SELECT - det er her at vi har den pæne nye syntaks. Imidlertid understøttes de andre muligheder selvfølgelig også: Tilføjelse af nye data - INSERT Før at vi kan tilføje data, er der brug for et par ændringer til entitets-klassen. For det første har vi brug for en ordentlig constructor, sådan at vi kan oprette nye Film-objekter på en fornuftig måde. Når vi tilføjer denne render vi imidlertid straks ind i at LINQ for SQL kræver at der også er en constructor helt uden nogen argumenter. Tidligere har vi kunne nøjes med default constructoren, men når vi selv tilføjer en constructor har vi ikke denne mere. Den skal altså også tilføjes. Det næste der skal til er at id-feltet skal markeres som værende databasens eget ansvar. Hvis man ikke gør det vil LINQ forsøge at skrive id-værdien fra klassen ned i databasen, og det går galt hvis feltet f.eks. er et identity-felt (autonumber i Access, auto_increment i MySQL). [Table] class Film [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int id; [Column] public string Titel; [Column] public DateTime Premiere; [Column] public string Sprog; // Krævet triviel constructor. public Film() // Ikke-triviel constructror. public Film(string Titel, DateTime Premiere, string Sprog) this.titel = Titel; this.premiere = Premiere; this.sprog = Sprog; Vi er hermed parat til at kunne oprette og tilføje nye film til tabellen: static void Main(string[] args)

9 string connstr = "Data Source=dataexpe-dfocde;Initial Catalog=LinqDemoDatabase;Integrated Security=SSPI;"; DataContext datactx = new DataContext(connStr); Table<Film> filmtbl = datactx.gettable<film>(); // Opret et nyt Film-objekt. Film film = new Film( "Humørkort-stativ-sælgerens søn", new DateTime(2002, 6, 28), "DK"); // Tilføj det til tabellen. filmtbl.insertonsubmit(film); // Bed data-conteksten om at submitte ændringerne. datactx.submitchanges(); Man kan i øvrigt, efter kaldet til SubmitChanges(), aflæse det id den nye film blev indsat under via filmobjektets id property. Ændring af eksisterende data - UPDATE Denne kræver ikke yderlige ændringer til entitets-klassen. class Program static void Main(string[] args) string connstr = "Data Source=dataexpe-dfocde;Initial Catalog=LinqDemoDatabase;Integrated Security=SSPI;"; DataContext datactx = new DataContext(connStr); Table<Film> filmtbl = datactx.gettable<film>(); // Hent filmen. Id=10 er Casino Royale. Film film = filmtbl.single(f => f.id == 10); // Ret titlen. film.titel = "Agent 007, " + film.titel; datactx.submitchanges();

10 Funktionen Single() er en af LINQ funktionerne og den udtrækker et enkelt objekt. Hvis man ønsker at opdatere mere end én række, laver man en query som udtrækker de ønskede rækker. De opdateres så i en passende foreach-løkke, hvorefter SubmitChanges() kaldes til sidst. Sletning af eksisterede data - DELETE class Program static void Main(string[] args) string connstr = "Data Source=dataexpe-dfocde;Initial Catalog=LinqDemoDatabase;Integrated Security=SSPI;"; DataContext datactx = new DataContext(connStr); Table<Film> filmtbl = datactx.gettable<film>(); // Hent filmen. Id=12 er... Film film = filmtbl.single(f => f.id == 12); // Marker den for sletning. filmtbl.deleteonsubmit(film); datactx.submitchanges(); Hvis man ønsker at slette flere rækker gøres det som for update: Lav en query som udtrækker de ønskede poster, kald DeleteOnSubmit() på hver af dem i en foreach-løkke, og kald så SubmitChanges() tilsidst. Lidt mere om entites-klasser Hidtidig har jeg gået ud fra at entitets-klassen hedder det samme som tabellen. Der kan være forskellige grunde til at man ønsker at kalde den noget andet. Hvis vi f.eks. ønsker at kalde entitets-klassen for "Movie" og have den til at mappe i mod "Film" tabellen: [Table(Name="Film")] class Movie... Det samme kan man gøre for de enkelte felter: [Column(Name="Sprog")]

11 public string Language; Men her har man også en anden mulighed, nemlig at gemme værdien bag en property. Dette er f.eks. nyttigt hvis man gerne vil kunne lave validering på værdierne: private string _language; [Column(Name = "Sprog", Storage = "_language")] public string Language get return _language; set if (value!= "DK" && value!= "UK") throw new ArgumentException("Unknown language"); _language = value; Eksempel #2: Databasen udvides lidt Lad os prøve med et mere kompliceret eksempel: CREATE TABLE [dbo].[film]( [id] [int] IDENTITY(1,1) NOT NULL, [titel] [nvarchar](50) NULL, [premiere] [datetime] NULL, [sprog] [nvarchar](50) NULL ) CREATE TABLE [dbo].[skuespiller]( [id] [int] IDENTITY(1,1) NOT NULL, [navn] [nvarchar](50) NULL ) CREATE TABLE [dbo].[rolle]( [id] [int] IDENTITY(1,1) NOT NULL, [filmid] [int] NULL, [skuespillerid] [int] NULL, [rolle] [nvarchar](50) NULL ) Id-felterne er desuden sat op som primærnøgler, og der er oprettet en fremmednøgle-constraint mellem filmid og skuespillerid i Rolle tabellen til id'erne i hhv. Film- og Skuespiller-tabellerne. For et passende udvalg af data vil jeg henvise til LINQ til SQL designeren

12 Man kunne begynde at skrive entites-klasser for disse tre tabeller. Imidlertid findes der allerede værktøjer som kan gøre det for os. Der er dels indbygget et direkte i Visual Studio 2008 og der findes også kommandolinje værktøjet SqlMetal. Lad os prøve med LINQ til SQL designeren i VS 2008: Trin 1) I Solution Explore: Højre-klik på ikonet for projektet > Add > Add New Item... Trin 2) Add New Item dialogen bliver nu vist: Click på LINQ to SQL Classes > Giv den navnet FilmSkuespillerRolle.dbml > Tryk Add. Der kommer nu et hvid todelt, næsten tomt, skærmbillede op. Trin 3) I Server Explorer Højre-klik på Data Connections > Add Connection... Trin 4) Add Connection dialogen bliver nu vist: Udfyld Server name > vælg den ønskede database under "Select or enter a databasename" > Tryk OK. Der skulle nu være kommet et punkt svarende til valgene fra ovenfor under Data Connections i Server Explore vinduet. Trin 5) Navigér ned til punktet Tables. Her finder man de tre tabeller: Film, Rolle og Skuespiller. Markér alle tre, og træk dem så ind på det hvide skærmbillede fra før. De skal droppes på den venstre halvdel. De tre tabeller bliver nu vist grafisk. Hvis man har husket at oprette relationer imellem dem, vil disse også blive vist som pile fra hhv. Film- og Skuespiller-tabellen til Rolle-tabellen. Det man ser, er i virkeligheden en grafisk repræsentation af de tre entitets-klasser som Visual Studio nu har oprettet for os. Note 1) Hvis man bruger den samme database sammen med forskellige applikationer kan det være en fordel at have alle entitets-klasserne i én DLL som man så referere fra alle de programmer som skal bruge databasen. Dermed samler man alt database adgang på et centralt sted og det bliver meget nemmere at lave strukturelle ændringer i databasen uden at skulle lave en masse følgerettelser i koden Note 2) Selvom du er typen som ønsker at skrive dine entitets-klasser selv for at have 100 % styr på dem, kan det godt være meget lærerigt at kigge designerens kode igennem for inspiration. Lad os straks tage dem i brug - samme eksempel som ovenfor: using System; using System.Linq; using System.Data.Linq; namespace Film05

13 class Program static void Main(string[] args) // Opret en type-sikker DataContext. FilmSkuespillerRolleDataContext db = new FilmSkuespillerRolleDataContext(); // Opret en binding mellem filmtbl og Film-tabellen. Table<Film> filmtbl = db.films; // Definér en forespørgsel som: //... henter alle dansksprogede film //... sorteret faldende efter premiere //... og vi vil specifikt have titlen var titelquery = from f in filmtbl where f.sprog == "DK" orderby f.premiere descending select f.titel; foreach (string titel in titelquery) Console.WriteLine(titel); Et par ting man bør lægge mærke til: 1) Der er ikke behov for at angive en connection string. Dette skyldes at denne er defineret inde sammen med alt den andet VVS kode som VS 2008 har genereret for os - "VVS" fordi det kaldes for plumbing på engelsk. 2) Forbindelsen oprettes nu med klassen FilmSkuespillerRolleDataContext, som er en typesikker version af DataContext. Dette betyder bl.a. at man kan få fat på Film-tabellen på den viste måde - altså uden at skulle kalde datactx.gettable<film>() som før. 3) Læg i øvrigt mærke til det lille 's' i db.films. Det skyldes simpelthen at værktøjet er Microsoft's og at det forsøger at sætte et amerikansk flertals-s på navnet. Det virker godt nok en smule malplaceret her i denne sammenhæng, men havde sikkert virket ganske naturligt hvis tabellen havde heddet "Movie". 4) Der er ikke nogen vigtig grund til at bruge "var" som typen for titelquery. Hidtil har jeg skrevet IQueryable<string> og sådan kunne titelquery også have været stylet ovenfor. Var angiver at der er tale om en anonym klasse. Nogen gange - som om lidt - er det praktisk at kunne anvende denne betegnelse. Men i dette tilfælde er det egentlig bare sjusk og dovenskab. Så lad være med at gøre som jeg. Data på tværs af tabeller Nu vi har introduceret flere tabeller, og relationer mellem dem, kan man begynde at arbejde med

14 joins og den slags. Hvis vi f.eks. var interesseret i alle film som Mads Mikkelsen havde været med i: FilmSkuespillerRolleDataContext db = new FilmSkuespillerRolleDataContext(); db.log = Console.Out; Table<Film> filmtbl = db.films; Table<Skuespiller> skuespillertbl = db.skuespillers; Table<Rolle> rolletbl = db.rolles; var query = from f in filmtbl join r in rolletbl on f.id equals r.filmid join s in skuespillertbl on r.skuespillerid equals s.id where s.navn == "Mads Mikkelsen" orderby f.titel select f.titel + ", " + f.premiere.value.year; foreach (string film in query) Console.WriteLine(film); (Suk, igen de der amerikanske flertals s'er.) Læg specielt mærke til select-leddet; Der returneres en string som består af sammensatte værdier fra de fundne Film-objekter. Hvis man kigger nøje efter på den SQL sætning som der genereredes kan man se at dette faktisk gøres direkte i databasen før at resultatet returneres til C# programmet. Når man er kommet sig efter wow-effekten bør man nok lige vurdere om det rent performancemæssigt er den rette måde at gøre det på... En anden måde at opnå samme resultat: FilmSkuespillerRolleDataContext db = new FilmSkuespillerRolleDataContext(); db.log = Console.Out; Table<Film> filmtbl = db.films; var query = from f in filmtbl from r in f.rolles where r.skuespiller.navn == "Mads Mikkelsen" orderby f.titel select new f.titel, r.rolle1 ; foreach (var result in query) Console.WriteLine("0, 1", result.titel, result.rolle1);

15 Kigger man godt efter kan man se at LINQ for SQL designeren har lavet et par ekstra håndtag til os: Før det første er Film-klassen udvidet med en collection med navnet Rolles. Det er vores fremmednøgle til Rolle tabellen der er blevet inkluderet der - med flertals-s og det hele. Havde man ikke oprettet en fremmednøgle-constraint (en "relation" i Access) i databasen, ville denne property ikke være blevet oprettet af designeren. Rolles indeholder Rolle-objekter, ét objekt for hver relation i databasen. Hver Rolle-objekt har desuden en Skuespiller- og en Film-property som peger den anden vej i relationen. I koden er det dog kun Skuespiller-propertyen der bliver brugt. Endelig er der den der sjove new()-notation. I dette tilfælde bruges den til at oprette en ny klasse med to værdier - nemlig titel og rolle. Vi har overhovedet ikke defineret sådan en klasse på noget tidspunkt i vores kode, og den er i øvrigt heller ikke defineret i de klasser som LINQ til SQL designeren har lavet i baggrunden. Så hvor er den egentlig defineret henne? Svaret er: lige der hvor new() kaldes - klassen defineres på dét sted. Det er et eksempel på en anonym klasse, og C# sørger selv for at holde styr på at den består af to string-felter. Det vil man hurtigt opdage hvis man forsøgte at bruge dem som f.eks. Int32. Klassen er altså stadigvæk typestærk. Da det returnerede altså er en samling af anonyme klasser, bruges der også en var i foreachløkken. Til sidst et lille hmmm: Hvorfor står der egentlig "rolle1" et par steder? Det skyldes simpelthen at både tabellen og et af dens felter begge hedder "Rolle" - designeren har derfor sat et '1' efter den ene af dem for at skelne skarpt imellem dem. Rart at vide at den kan finde ud af det, men normalt fraråder jeg nu at man bruger det samme navn mellem tabellen og dens felter. Simpelthen for at undgå misforståelser. Vær flink mod database serveren Hvis vi ikke ønsker at udføre de vilde streng manipulationer i select-leddet, kan vi i stedet gøre det i foreach-løkken. Det næste eksempel viser hvordan vi udskriver alle film og deres rolle besætning: FilmSkuespillerRolleDataContext db = new FilmSkuespillerRolleDataContext(); db.log = Console.Out; Table<Film> filmtbl = db.films; var query = from f in filmtbl from r in f.rolles orderby f.titel, r.rolle1 select new f.titel, r.rolle1, r.skuespiller.navn ; foreach (var result in query) Console.WriteLine("0-1 (2)", result.titel, result.rolle1, result.navn);

16 Så hvad er der mere at fortælle? Temmelig meget faktisk; emnet er nemlig meget stort. Det vigtigste er nok at LINQ til SQL er fortolket; Selv om LINQ syntaksen ligner den fra f.eks. LINQ for Objekter så adskiller den sig ved at DataContext-klassen forsøger at oversætte LINQ koden til en tilsvarende SQL kode. LINQ for Objekter bliver derimod udført 100 % lokalt i applikationen. Det er imidlertid ikke alt LINQ kode som har en SQL ækvivalent. I de tilfælde vil LINQ motoren enten smide en runtime exception, eller udførelsen vil går fra at blive håndteret 100 % i SQL koden til at noget af den bliver suppleret med lokal kode. Jeg har helt undladt at nævne noget om hvordan LINQ bliver brugt sammen med kontroller som f.eks. DataGrid. For det vil jeg henvise til videoen nedenfor som giver et super eksempel på hvordan at man f.eks. kan arbejde med et GridView og et DetailView i den sammenhæng. Noget andet som videoen viser er hvordan at SQL koden faktisk først bliver udført i det øjeblik man skal bruge data. Det var det der kaldes for defeered execution. I det ovenstående har jeg vist nogle udvalgte LINQ-operatore som f.eks. Where(), Select(), OrderByDescending() og Single(). Der er mange flere end disse. Heldigvis er de universelle på tværs af de forskellige LINQ teknologier, og i min næste artikel vil jeg derfor komme meget mere ind på de manglende - den næste artikel bliver om LINQ for Objekter. Yderlig læsning Denne artikel er kraftigt inspireret af: C# 3.0 in a Nutshell O'Reilly 2007 Joseph Albahari & Ben Albahari ISBN: Specielt kapitlerne 8, 9 og 10 som handler om LINQ i forskellige afskygninger..ooo. For en generel artikel om O/RM, ORM, eller O/R mapping: Generelt om LINQ teknologierne:

17 En rigtig god video om emnet (eksemplerne er i VB.Net) Og til sidst en lille samling How-do-I videoer: Kommentar af nico26 d. 31. mar Kommentar af truelz d. 17. feb Kanon artikel. Jeg havde set Linq begrebet, men var ikke helt på det rene med hvad det var. Nu føler jeg mig klar til selv at skrive kode. Kommentar af frosty-dk d. 27. aug Har arbejdet med linq i noget tid nu, og kan bestemt fået større forståelse for linq efter denne artikel. Rigtig godt forklaret!

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

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

Introduktion til SQL queries

Introduktion til SQL queries Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til SQL queries Denne artikel beskriver nogle forskellige muligheder i SQL queries. Eksemplerne skulle gerne være standard SQL og virke i

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

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

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

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

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

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

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

Database design for begyndere

Database design for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Database design for begyndere Denne artikel beskriver hvordan man kommer fra ide til database design. Den stopper inden normal former. Den forudsætter

Læs mere

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010

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

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

Tagwall med Php & MySQL

Tagwall med Php & MySQL Denne guide er oprindeligt udgivet på Eksperten.dk Tagwall med Php & MySQL Her laver vi en tagwall i Php & MySQL... jeg forklarer dog ikke så meget, men jeg håber du kan få det til at blive til en tagwall

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

LINQ for Objekter med C#

LINQ for Objekter med C# Denne guide er oprindeligt udgivet på Eksperten.dk LINQ for Objekter med C# LINQ er den store nye teknologi med.net 3.5. Der er i virkeligheden tale om en familie af teknologier som deler et fælles fundament

Læs mere

DB undervisning 01-01

DB undervisning 01-01 Databaser... 2 Tabeller... 2 Redundans... 3 Første regel... 4 Anden regel... 4 Tredje regel... 5 Relationer... 5 Opskrift... 6 SQL sætninger til at oprette tabeller... 7 SQL sætninger til at indsætte data...

Læs mere

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder. Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations

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

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

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

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

SQL for MySQL-begyndere

SQL for MySQL-begyndere Denne guide er oprindeligt udgivet på Eksperten.dk SQL for MySQL-begyndere I denne artikel vil jeg prøve at beskrive MySQL på begynderniveau. SQL står for Structured Query Language, og er et sprog til

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Register-databasen med.net

Register-databasen med.net Denne guide er oprindeligt udgivet på Eksperten.dk Register-databasen med.net Mange programmer gemmer deres konfiguration-data i register-database. Denne artikel viser hvordan du - f.eks. vha. C# - henter

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

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

Ratingsystem i PHP og MySQL

Ratingsystem i PHP og MySQL Denne guide er oprindeligt udgivet på Eksperten.dk Ratingsystem i PHP og MySQL Lær at lave et system til at vise rating/bedømmelse på artikler og nyheder. Skrevet den 03. Feb 2009 af virtual1ty I kategorien

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

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

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin Trin 1: Lav en Domain model Opgave beskrivelse - Scandic hotel kæde Lav en domain model af Hotel-kæden.

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

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &. MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig

Læs mere

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen. Denne guide er oprindeligt udgivet på Eksperten.dk Grundlæggende PHP I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Læs mere

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online. Denne guide er oprindeligt udgivet på Eksperten.dk Hvem er online? Online script, som tager højde for at der kan være flere personer, som har den samme IP-adresse. Scriptet viser hvor lang tid brugeren

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

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

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Denne guide er oprindeligt udgivet på Eksperten.dk MySQL C API Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

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

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

.NET 3.5 og C# 3.0. Denne artikel viser hvordan man kan bruge nogle af de nye features i.net 3.5 og C# 3.0. Det er ikke en komplet oversigt.

.NET 3.5 og C# 3.0. Denne artikel viser hvordan man kan bruge nogle af de nye features i.net 3.5 og C# 3.0. Det er ikke en komplet oversigt. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 3.5 og C# 3.0 Denne artikel viser hvordan man kan bruge nogle af de nye features i.net 3.5 og C# 3.0. Det er ikke en komplet oversigt. Den forudsætter

Læs mere

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 Webshop2 API Model... 3 Brugen af API et... 4

Læs mere

Indhold. Senest opdateret:03. september 2013. Side 1 af 8

Indhold. Senest opdateret:03. september 2013. Side 1 af 8 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 API Modeller... 2 Webshop2 API Model v1... 3

Læs mere

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet. Denne guide er oprindeligt udgivet på Eksperten.dk Refleksion med.net Refleksion bruges til at undersøge klasser på runtime tidspunktet. Se hvordan du f.eks. loader en klasse fra en DLL, gennemkigger dens

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

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

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i C# Denne artikel vil vise lidt om hvordan man kan bruge XML i C#. Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Læs mere

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i VB.NET Denne artikel vil vise lidt om hvordan man kan bruge XML i VB.NET. Den forudsætter kendskab til XML og VB.NET men ikke til brug af

Læs mere

I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen ud i en løkke

I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen ud i en løkke Denne guide er oprindeligt udgivet på Eksperten.dk MySQL for nybegynder I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen

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

Casper Fabricius http://casperfabricius.com. ActiveRecord. O/RM i Ruby on Rails

Casper Fabricius http://casperfabricius.com. ActiveRecord. O/RM i Ruby on Rails Casper Fabricius http://casperfabricius.com ActiveRecord O/RM i Ruby on Rails Casper Fabricius Freelance webudvikler - casperfabricius.com 9 års erfaring med webudvikling 6 år med ASP/ASP.NET/C# 3 år med

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

3) Først og fremmest kan du vælge hvilket tema din side skal have.

3) Først og fremmest kan du vælge hvilket tema din side skal have. Wordpress er et open source software du kan bruge til at oprette blogs og hjemmesider i. Du har mulighed for at vælge forskellig temaer og designe din side som du har lyst. Blogs og hjemmesider kan blandt

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

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

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB.

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB. GeoCad modul GeoDB I GeoCAD er det muligt at koble relationsdatabase til GeoEDIT. Her igennem er det muligt at lagre forskellige oplysninger i databasen og koble disse oplysninger til objekter i kortet.

Læs mere

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk Denne guide er oprindeligt udgivet på Eksperten.dk Database tips Denne artikel vil give nogle forskellige små praktiske råd om ting man skal tænke på når man arbejder med databaser og applikationer som

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

Flerbruger miljø, opdel database

Flerbruger miljø, opdel database Denne guide er oprindeligt udgivet på Eksperten.dk Flerbruger miljø, opdel database Denne artikel henvender sig primært til begyndere og let øvede brugere af Access der ønsker at vide noget om flerbruger

Læs mere

Guide til oprettelse/redigering af events på bornholm.info

Guide til oprettelse/redigering af events på bornholm.info Guide til oprettelse/redigering af events på bornholm.info Trin Login Beskrivelse 1. Login på hjemmesiden: URL: http://bornholm.info/wp-admin/ Brugernavn: se mailen Adgangskode: se mailen Opret event 1.

Læs mere

Introduction til.net remoting i VB.NET

Introduction til.net remoting i VB.NET Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

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

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Send  fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende  fra Java. Denne guide er oprindeligt udgivet på Eksperten.dk Send email fra Java Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt

Læs mere

Undtagelseshåndtering i C#

Undtagelseshåndtering i C# Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide

Læs mere

Begrynder til at lave log ind system

Begrynder til at lave log ind system Denne guide er oprindeligt udgivet på Eksperten.dk Begrynder til at lave log ind system Hej Vil jeg gerne lave en lille programmering forklare til hvordan du laver din helt egen lille start på at log ind

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

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel

Læs mere

Loginsystem (med MySQL)

Loginsystem (med MySQL) Denne guide er oprindeligt udgivet på Eksperten.dk Loginsystem (med MySQL) Dette er en guide til, hvordan man kan lave et loginsystem med php og muligvis også med sessioner og MySQL Skrevet den 02. Feb

Læs mere

Brugerdefineret menuer i Access

Brugerdefineret menuer i Access Denne guide er oprindeligt udgivet på Eksperten.dk Brugerdefineret menuer i Access Denne artikel henvender sig primært til let øvede brugere af Access, der ønsker at komme i gang med at tilpasse egne menuer

Læs mere

Gæstebog med validering opbygget med MySQL

Gæstebog med validering opbygget med MySQL Denne guide er oprindeligt udgivet på Eksperten.dk Gæstebog med validering opbygget med MySQL Dette er en simpel gæstebog, som kan hjælpe folk med at lave en velfungerende gæstebog uden alt for meget arbejde.

Læs mere

Velkommen til kursusevaluering i Blackboard

Velkommen til kursusevaluering i Blackboard Vælg et emne klik på et af nedenstående emner og benyt pil frem og tilbage for at bladre Velkommen til kursusevaluering i Blackboard Login i Blackboard Opstart og valg af kursus Find evalueringsmodulet

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Brugervejledning Joomla

Brugervejledning Joomla Brugervejledning Joomla Denne brugervejledning vil guide dig gennem de funktioner, som du skal bruge for at redigere indhold på dit website. Indholdsfortegnelse LOG- IN:... 2 OPRET ARTIKEL:... 3 INDSÆT

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Introduktion til programmering

Introduktion til programmering Introduktion til programmering Databaser Uge 38 L. Ingemann: SQL databaser på nettet, kap 2-4. Kompendium L. Ingemann: SQL databaser på nettet, kap 6-20, Kompendium Sidste gang Databaser Relationelle databaser

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

Ø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

Opret ODBC datakilde Vejledning

Opret ODBC datakilde Vejledning Vejledning V. 1 APRIL 2011 FOR KUNDESERVICE Indholdsfortegnelse 1 Indledning... 3 1.1 Formål... 3 1.2 Målgruppe... 3 1.3 Krav... 3 2 Opret ODBC Datakilde (Open Database Connectivity)... 3 2.1 Forbindelse

Læs mere

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.0 og C# 4.0 Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 14.

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

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser Indholdsfortegnelse PSpice modul 3 Model Editor, opret diode ud fra model fundet på internettet.... 2 Parametrisk Analyse... 6 Ekstra - Parametrisk analyse på diode parameter... 9 Forudsætninger For at

Læs mere

Interaktionsudvikling

Interaktionsudvikling Projektopgave 3: Interaktionsudvikling CPH business, klasse: MulA2013 Projektansvarlige undervisere Thomas Hartmann MereteGeldermann lützen: Projekt produkt url: www.amalieardahl.dk/projekt3/index.html

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

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

Dokumentation af programmering i Python 2.75

Dokumentation af programmering i Python 2.75 Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt

Læs mere

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

Skriftlig eksamen i kurset. Informationssystemer

Skriftlig eksamen i kurset. Informationssystemer 6. semester sundhedsteknologi Skriftlig eksamen i kurset Informationssystemer Der er 3 timer til at besvare opgaven. Alle hjælpemidler er tilladte. Skriv kort og præcist. Referer gerne til kursuslitteraturen.

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

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

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

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

Kom godt i gang med PubMed

Kom godt i gang med PubMed Kom godt i gang med PubMed Søgeeksempel i PubMed: Tværfagligt samarbejde omkring genoptræning efter udskrivning fra hospital Første skridt: Opløs problemformuleringen i de søgeord som dækker problemstillingen

Læs mere

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13 1 Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Hvad er en makro... 10 Hvad kan du bruge en makro til... 10 Hvad en makro er (Visual Basic for Applications)... 11 Det hele sker

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

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

applikation----x----odbc driver manager----foobar ODBC driver----foobar database Denne guide er oprindeligt udgivet på Eksperten.dk ODBC i C/C++ Denne artikel beskriver hvordan man bruger ODBC i C/C++. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

Læs mere

Dynamisk PHP design OPDATERET

Dynamisk PHP design OPDATERET Denne guide er oprindeligt udgivet på Eksperten.dk Dynamisk PHP design OPDATERET I har måske undret jer over "http://bla.dk/?side=kontakt", her beskriver jeg hvordan, og hvorfor Skrevet den 03. Feb 2009

Læs mere

Easy Guide i GallupPC

Easy Guide i GallupPC Easy Guide i GallupPC Version. 6.00.00 Gallup A/S Masnedøgade 22-26 DK 2100 København Ø Telefon 39 27 27 27 Fax 39 27 50 80 Indhold SÅDAN KOMMER DU I GANG MED AT ANVENDE GALLUPPC... 2 TILFØJELSE AF UNDERSØGELSER

Læs mere