Hoofdstuk 2
Een ASP.NET applicatie met ADO.NET opzetten
In dit hoofdstuk ga je een eenvoudige website opzetten, waarbij je een aantal gegevens uit een database ophaalt. Je moet je kennis van ADO.NET dus toepassen in een webapplicatie. We maken hier weer gebruik van de database Northwind op de MS SQL-server databaseserver.
2.1
Aanmelden bij SQL server
We beginnen maar eens met een eenvoudige applicatie waarbij gegevens uit de database in een datagrid worden weergegeven. In grote lijnen kan dit op dezelfde manier als in een Windows-applicatie. Later zullen we zien dat een aantal zaken (zoals een connectionstring of query’s) op een wat ander manier in de applicatie kan worden verwerkt. Vooralsnog gaan we een recht toe recht aan applicatie bouwen. Om gebruik te maken van SQL server moeten we eerst de gebruiker ASPNET aanmelden bij SQL server. Dit doe je als volgt:
Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.
Figuur 2.1
Open in de Object Explorer (zie figuur 2.1) de map Security en daarna de map Logins. Je ziet dan de gebruikers die mogen inloggen op SQL Server. Klik rechts op de map Login en kies in het pop-up menu en kies hierin New login. Je ziet vervolgens het dialoogvenster van figuur 2.2 Vul bij loginnaam: %machinenaam%\ASPNET in bij Default database: Northwind en bij Default language Dutch. Links boven in het scherm zie je Server Roles. Selecteer dit item en grand de gebruiker aan sysadmin. Om in te loggen op de server gebruik je Windows authentication.
2.1
Figuur 2.2
Je hebt nu de voorwaarden gecreëerd voor een ASP.NET SQL-server applicatie. Voordat je de applicatie gaat maken moet je wel eerst SQL-server en IIS starten. Verder moet de applicatie zijn opgeslagen in de map c:\inetpub\wwwroot .
2.2
2.2
De applicatie maken
Wat moet de applicatie kunnen … De applicatie heeft een inlogscherm, waarmee een klant (in de database Northwind) kan inloggen. De klant logt in met zijn klant_id en een wachtwoord. Het veld password moet daarom nog worden toegevoegd aan de tabel Customers van de database. Als de klant is ingelogd, dan moet hij een scherm te zien krijgen met al zijn gegevens. Deze gegevens moet hij zelf kunnen aanpassen. De opmaak van de pagina’s mag je zelf bepalen, maar moet wel in een style sheet worden beschreven.
Opdracht 2.2.1 In deze opdracht gaan we de database aanpassen. In de tabel Customers moet een veld met de naam password komen en in dit veld moet een versleuteld wachtwoord komen te staan. a. Voeg aan de tabel Customers een veld met de naam password toe. Het type van dit veld is varbinary(100) . Het veld mag de waarde null hebben. Je gaat vervolgens in het veld password een versleuteld wachtwoord zetten. We gebruiken hiervoor de functie ENCRYPTBYPASSPHRASE gebruiken. Dit is een Transact SQL (T-SQL) functie. T-SQL is een uitbreiding op SQL met een aantal functionaliteiten die de uitvoering van SQL kunnen beïnvloeden. We gaan het versleutelde wachtwoord alfred in het veld password van de klant met klant_id alfki zetten. Een mogelijk SQL commando hiervoor is: UPDATE dbo.Customers SET password=ENCRYPTBYPASSPHRASE('Mijn voornaam', 'alfred') WHERE CustomerID='alfki'
De twee parameters van de functie ENCRYPTBYPASSPHRASE zijn: 'Mijn voornaam' de passphrase. Dit is een beveiliging op het geïncrypte wachtwoord. Het is
geen wachtwoord maar een wachtzin. In onze applicatie gaan we deze passphrase niet gebruiken, daarom gebruiken we voor elke klant dezelfde passphrase. 'alfred' het wachtwoord dat moet worden versleuteld.
We gebruiken het volgende SQL commando: UPDATE dbo.Customers SET password=ENCRYPTBYPASSPHRASE('sleutel', 'alfred') WHERE CustomerID='alfki'
Deze query kun je gewoon uitoeren in SQL server Management Studio. b. Zet het versleutelde wachtwoord alfred in het veld password van de klant met klant_id alfki . Bekijk de tabel Customers en controleer of er in het veld password van de gebruiker met het klant_id alfki een versleuteld wachtwoord staat (zoiets als : 0x01000000C486F7B05BDC0167A41EF684FC7B3447CA29E40AA38DD7C2)
2.3
We gaan controleren of dit versleutelde wachtwoord wel het wachtwoord alfred voorstelt. Doe dit met het T-SQL commando: SELECT CONVERT(varchar(100),DECRYPTBYPASSPHRASE('sleutel', 0x01000000C486F7B05BDC0167A41EF684FC7B3447CA29E40AA38DD7C2)) as [Oorspronkelijk wachtwoord]
Let hierbij op dat het versleutelde wachtwoord in dit commando niet tussen quotes staat. c. Controleer of het versleutelde wachtwoord wel het wachtwoord alfred voorstelt. d. Stel het T-SQL-statement op dat je straks gaat gebruiken om te controleren of de combinatie klant_id, wachtwoord bestaat. Gebruik in dit statement variabelen (b.v. @wachtwoord en @klant_id). Hieronder zie je een korte uitleg van hoe zo’n statement is opgebouwd. Als je parameters of variabelen gebruikt in het statement, dan moet je ze eerst declareren. Hieronder zie je een voorbeeld van zo’n declaratie. declare @wachtwoord varchar(100)
Als je aan een variabele een waarde wilt toekennen dan gebruik je de operator set. Hieronder zie je een voorbeeld. set @wachtwoord='alfred'
De variabelen kun je nu gewoon in je T-SQL statement gebruiken. Het gehele script kun je eventueel opslaan als stored procedure. De variabelen kun je binnen de stored procedure eventueel als parameters declareren. De statements met set zijn dan niet meer nodig. Je kunt deze stored procedure daarna in een applicatie gebruiken. Dan nu de applicatie. Opdracht 2.2.1 a. Ontwerp een inlogformulier op de pagina Default.aspx , met twee tekstboxen en een knop. De opmaak van dit formulier mag je geheel zelf bepalen in een style sheet. Het geheel moet als volgt werken:
Voer een customder ID en een wachtwoord in en druk op de knop. Bestaat de combinatie custumer ID; versleuteld wachtwoord, dan wordt een nieuwe pggina geopend. Deze pagina noemen we klantgegevens.aspx . Bestaat de combinatie (custumer ID; versleuteld wachtwoord) niet, dan verschijnt op het inlogscherm dat het inloggen mislukt is. Op het nieuwe scherm (de vervolgpagina) is te zien wat de klant die is ingelogd heeft besteld. Ook het totaalbedrag aan bestelde artikelen moet zichtbaar zijn.
Enige aanwijzingen: In dit geval hoef je in de tag: