Programmeren in ASP.NET/Werken met databanken

Uit Wikibooks
Ga naar: navigatie, zoek

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen

OLEDB, ODBC, en ADO.NET[bewerken]

Je kunt met ASP.NET (of andere programmeeromgevingen) niet direct met een database werken. Hiervoor heb je een zogenaamde API (Application Programming Interface) nodig. Verder is er een verbinding met de database nodig. Een dergelijke verbinding wordt gemaakt met OLEDB of ODBC:

  OLEDB ODBC
Betekenis Object Linking and Embedding – DataBase Open DataBase Connectivity
Voordelen
  • Nieuwer
  • Flexibeler
  • Sneller
  • Ondersteunt meer verschillende soorten databanken

OLEDB of ODBC gebruik je via ADO.NET. ADO staat voor ActiveX Data Ojects. ADO is een verzameling objecten die als API dienen, en die je dus kan gebruiken in je code.

Om het bovenstaande te begrijpen kun je het geheel vergelijken met het telefoonnetwerk. ODBC is dan te vergelijken met het analoge telefoonnetwerk, OLEDB met ISDN (dezelfde functie, alleen sneller en geavanceerder). ADO.NET is het telefoontoestel en met SQL geef je aan welke gegevens je wil hebben, zoals je door een nummer te draaien aangeeft wie je wil spreken.

Een databaseconnectie maken[bewerken]

Om met een database te kunnen communiceren, moet je een databaseconnectie hebben. Om deze te maken bevat ADO.NET het Connection-object. Nadat je een Connection-object hebt aangemaakt, open je een database met de Open()-methode. Hierbij vermeld je de databank die je wil openen in een zogenaamde connectiestreng. Als je klaar bent met de gegevens gebruik je de Close()-methode om de connectie weer te sluiten.

Een connectiestring maken[bewerken]

De connectiestreng bevat alle gegevens waarmee de server de databank kan terugvinden en openen. In de connectiestreng specificeer je het type database, de plaats en de naam van de database. Je kan indien nodig ook parameters zoals een gebruikersnaam en wachtwoord opgeven.

Een connectiestreng bestaat uit namen van sleutels en waarden, gescheiden door puntkomma's.

Een connectiestreng ziet er bijvoorbeeld als volgt uit:

"sleutel1=waarde1;sleutel2=waarde2;sleutel3=waarde3;"

De volgorde van de verschillende sleutel/waarde koppels heeft geen belang.

Let op: spaties zijn soms heel belangrijk in deze strings, dus je moet ze letterlijk overnemen.

Dit zijn enkele veel voorkomende voorbeelden:

SQL Server
"Data source=(local);initial catalog=Northwind;Integrated Security=True;"
MS Access
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\databases\MijnDB.mdb;"

Lees [1] of [2] voor een lijst met verschillende connectiestrengen voor verschillende databases.

Vooraleer een database te kunnen aanspreken in een ASPX-bestand, kan deze al of niet via DSN (ODBC) op de server ter beschikking gesteld worden.

DSN[bewerken]

Als je wilt kan jij (of jouw provider) op de server een vaste naam (een soort "alias") voor de databankconnectie instellen. Vanuit alle ASPX-documenten is de database dan onder die naam bereikbaar. Dit noemt men een DSN (Data Source Name) voor de databank. In de telefoonanalogie van hierboven is DSN te vergelijken met een knop die je kan instellen op een bepaald telefoonnummer.

Voordelen en nadelen van DSN[bewerken]

DSN[bewerken]

Het grote voordeel van de methode is dat bij het wijzigen (type of bestandsnaam) van de database niet alle ASP.NET documenten hoeven te worden aangepast. De database blijft immers gewoon onder zijn DSN-naam op de server bekend! In ASP.NET kan tegenwoordig de connectiestreng ook centraal ingesteld worden, zodat dit voordeel niet meer speelt.

DSN-loos[bewerken]

De DSN-loze methode wordt vaak gebruikt bij experimenten en tijdelijke pagina's. Het is erg eenvoudig om de te gebruiken database te wisselen. Het verschil is dat met DSN?less de connectiestreng in de code gewijzigd moet worden als er van een andere database gebruik gaat worden gemaakt of als de database op een andere locatie (subfolder) komt te staan. DSN-loze verbindingen maken het ook gemakkelijk om toepassingen naar andere machines te verplaatsen, omdat je dan niet telkens een DSN moet opzetten.

Sommige providers rekenen extra kosten voor DSN-verbindingen, dus in dat geval is DSN-loos goedkoper.

Tenslotte is een DSN-loze verbinding soms minder veilig, met name als het wachtwoord in de code moet geschreven worden. Iedereen die toegang krijgt tot de code heeft dan ook toegang tot het wachtwoord op de databank.

Een connectie met DSN[bewerken]

Op de server wordt een DSN (Data Source Name) door de beheerder gedefinieerd. Dit kan gerealiseerd worden op verschillende manieren:

  • via het configuratiescherm van Windows onder Administrative Tools - Data Sources (ODBC). Kies de klep System DSN. Klik Add. Kies Microsoft Access Driver (*.mdb). Kies een naam voor de connectie in "Data Source Name". Klik op "Select" en blader naar het databank bestand dat je wil koppelen.
  • vanuit Visual Studio.NET
  • vanuit FrontPage
  • vanuit UltraDev of Dreamweaver MX

Veel databanken kan je bovendien beveiligen met een gebruikersnaam (UID) en wachtwoord (PWD).

Een SQL Server-database openen met DSN[bewerken]

Een SQL Server-database die zich op de internetserver bevindt en die via ODBC als DSN-naam "leden" heeft kan als volgt benaderd worden:

Dim strConn As String = "DSN=leden;UID=x1;PWD=x2"
Dim cn As New SqlConnection(strConn)
cn.Open()
......
cn.Close()

waarbij x1 de gebruikersnaam en x2 het wachtwoord is waarmee de database te bereiken is.

Een Access-database openen met DSN[bewerken]

Een Access-databank die zich op de internet-server bevindt en die via ODBC als DSN-naam "leden" heeft kan als volgt benaderd worden.

Dim strConn As String = "DSN=leden"
Dim cn As New ODBCConnection(strConn)
cn.Open()
......
cn.Close()

De connectiestreng is dus niets meer dan de DSN-naam!

Een connectie zonder DSN[bewerken]

De mogelijkheid bestaat een SQL Server- of een Access-databank rechtstreeks te activeren. Dit kan als volgt:

Een SQL Server-database openen zonder DSN[bewerken]

Een SQL-server database kan op deze manier opgeroepen worden:

Dim strConn As String="data source=x1;initial catalog=x2;Integrated Security=SSPI"
Dim cn As New SqlConnection(strConn)
cn.Open()
......
cn.Close()

waarbij:

  • x1=naam of IP-nummer van de server
  • x2=naam van de database op de SQL-server

Voor de connectiestreng zijn er nog verschillende mogelijkheden:

Windows Integrated authenticatie[bewerken]

"data source=x1;initial catalog=x2;Integrated Security=True"

of

"Server=x1;trusted_connection=true;Database=x2"

SQL-Server authenticatie[bewerken]

"Server=x1;Database=x2;User ID=x3;Password=x4"

waarbij:

  • x1=naam of IP-nummer van de server
  • x2=naam van de database op de SQL-server
  • x3=loginnaam op de SQL-server
  • x4=wachtwoord op de SQL-server

SQL Server 2005 bestandsgebaseerd[bewerken]

"Provider=SQLNCLI;Data Source=x1;AttachDbFileName=e:\data\Customers.mdf; Integrated Security=True;User Instance=True"

of

"Provider=SQLNCLI;Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|data.mdf;Integrated Security=True;User Instance=True"

De punt in .\SQLEXPRESS staat hier voor de lokale server. Je mag ook (local)\SQLEXPRESS schrijven.

In de laatste string wordt de expressie |DataDirectory| automatisch vervangen door het juiste pad naar de folder App_Data binnen de website. Hierdoor is de connectiestring onafhankelijk van de server waarop de site draait, en kan je de pagina gewoon kopiëren naar de server met FTP zonder wijzigingen.

SQL Server met ODBC[bewerken]

Het kan ook met ODBC als volgt:

"Driver={SQLServer};SERVER=x1;DATABASE=x2;UID=x3;PWD=x4"

Maar dan gebruik je een ODBCConnection in plaats van een SqlConnection.

Een Access-databank openen via ODBC[bewerken]

Een Access databank kan ook zonder DSN-instellingen op de internetserver bereikt worden, en wel als volgt (DSN-loze ODBC-verbinding):

Dim strConn As String = "DRIVER={Microsoft Access Driver (*.mdb)};" & _ 
   "DBQ=c:\inetpub\wwwroot\App_Data\adressen.mdb;
Dim cn As New ODBCConnection(strConn)
cn.Open()
......
cn.Close()

waarbij "adressen.mdb" de Access databank is.

Deze methode kan problemen geven als je de bestanden naar een andere server kopieert, waar de bestanden bijvoorbeeld op de d: schijf staan. Het kan zelfs zijn dat je de echte locatie van de bestanden niet weet.

Daarom is het altijd beter een relatief pad te gebruiken in je pagina's, relatief ten opzichte van de plaats van de huidige pagina. De server kan dit pad omzetten naar het echte absolute pad met de methode Server.MapPath().

Hoe dit gebeurt zie je in dit voorbeeld:

Dim strConn As String = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _
	Server.MapPath("App_Data\adressen.mdb") & ";"
Dim cn As New ODBCConnection(strConn)
cn.Open()
......
cn.Close()

waarbij "App_Data\adressen.mdb" het relatieve pad is naar de databank adressen.mdb.

Opmerking
Om een Access databank te kunnen openen, moet de gebruikersaccount de nodige bestandsrechten bezitten op het databank MDB-bestand (bv. adressen.mdb). ASP.NET maakt bij de installatie een gebruiker ASPNET (Windows 2000/XP) of NETWORK SERVICE (Windows 2003) aan, die gebruikt wordt tijdens het ganse proces (tenzij je impersonation gebruikt, zie hoofdstuk 25). Voor het opvragen van gegevens betekent dit dat de gebruiker ASPNET of NETWORK SERVICE leestoegang moet hebben tot het MDB-bestand. Voor het wijzigen van gegevens moet deze gebruiker bovendien modify-rechten hebben.

Een Access-databank openen zonder ODBC[bewerken]

Er is nog een tweede manier om een Access-databank te openen zonder ODBC te gebruiken (DSN-loze OLEDB-verbinding):

Dim strConn As String = " Microsoft.Jet.OLEDB.4.0;Data Source=" & _
Server.MapPath("App_Data\adressen.mdb"& ";"
Dim cn As New OleDbConnection(strConn)
cn.Open()
......
cn.Close()

De verbinding via OLEDB is iets sneller omdat de ODBC-driver overgeslagen wordt:

ADO → OLEDB → Databank

is sneller dan:

ADO → OLEDB → ODBC → Databank

Oefeningen[bewerken]

  1. Maak een pagina die een lijst toont met de uitgevers in de SQL Server-voorbeelddatabank "pubs". Gebruik een "trusted connection".
  2. Zelfde oefening, maar nu met een "untrusted connection".
  3. Maak een kleine databanktabel in Excel. Zoek op wat de connectiestreng is voor dit soort gegevensbron en toon de gegevens met een ASP.NET-pagina.
  4. Zelfde oefening, maar nu met een tekstbestand.

Een connectiestring instellen in web.config[bewerken]

Je kan dezelfde instelling ook maken in web.config. Dan geldt ze niet voor de ganse applicatie, maar wel voor de ganse directory (en subdirectory's). Het opvragen is ook verschillend.

In ASP.NET 2.0 is hier een speciaal element <connectionStrings> voor toegevoegd aan web.config (als onderdeel van <configuration>).

web.config

<configuration ...>
<appSettings>
    ...
</appSettings>
<connectionStrings>
  <add name="AdressenConnectionString" 
       connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data\adressen.mdb"
       providerName="System.Data.OleDb" />
</connectionStrings>
<system.web>
    ...
</system.web>
</configuration>

De instelling kan je in je pagina's opvragen met deze code:

Dim strConn As String = _
ConfigurationManager.ConnectionStrings("AdressenConnectionString").ConnectionString

Als je nog werkt met ASP.NET 1.x, dan moet je het <appSettings>-element gebruiken:

web.config

     <appSettings>
        <add key="connectionstring" 
        value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data\adressen.mdb"/>
     </appSettings>

De instelling kan je in je pagina's opvragen met deze code:

Dim strConn As String = ConfigurationSettings.AppSettings("connectionstring")


Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.