22.1 Inleiding Connected toegang
22.2 Klassen
22.3 Wijzigingen aanbrengen
22.4 Overige methoden
22.5 Stored procedure
Oefeningen hoofdstuk 22
22.1 Inleiding Connected toegang
Bij connected toegang wordt een rechtstreekse verbinding geopend met de database. Deze verbinding blijft open gedurende de verwerking van de gegevens. In het geheugen zit telkens slechts één record. Dit record kan enkel bewerkt worden via specifieke commando’s.
Connected toegang is niet belastend voor het geheugen maar wel voor het netwerkverkeer.
Top
22.2 Klassen
Connected toegang wordt beheerd door de onderstaande 2 klassen:
- System.Data.SQLClient.SqlConnection: dit is de klasse om de verbinding met de database te openen en te sluiten:
- System.Data.SQLClient.SqlCommand: dit is de klasse om gegevens op te vragen of aan te passen. Meestal is dit een SQL-instructie die uitgevoerd wordt bij het oproepen van de SQLCommand.
22.3 Wijzigingen aanbrengen: ExecuteNonQuery
In dit onderdeel is een oefening uitgewerkt om de postcode te wijzigen in de tabel tblKlanten van de database Artemis.
Maak in Visual Studio Express for Desktop een nieuw project aan “Hoofdstuk22”.
Verander de naam van het standaardformulier Form1.cs in frmWijzigPostcode.cs en klik op OK.
Verander ook de Property Text in het design van het formulier in Postcode wijzigen.
Voeg via het snelmenu Add, New Item een ADO.NET Entity Data Model toe met als naam Artemis.
Selecteer EF Designer from Database om een model aan te maken op basis van een bestaande database.
Klik op Next en kies de gewenste database, in dit geval ArtemisSQL.mdf.
Beantwoord onderstaande vraag met Ja.
Kies voor Entity Framework 6.x, klik op Next. Selecteer vervolgens alle onderdelen van de database die je wenst toe te voegen en klik op Finish.
Voeg op het formulier een knop “POSTCODE WIJZIGEN” toe. Sleep vervolgens een SqlConnection naar het formulier. Wijzig de naam in cnnArtemisSQL en kies bij ConnectionString voor ArtemisSQL.mdf. Voeg daarnaast ook een SqlCommand toe met de naam scmdWijzigPostcode.
Wanneer het tabblad Data van de Toolbox geen SqlConnection of SqlCommand bevat, voeg dan deze klassen toe door rechts te klikken in de toolbox en via het snelmenu Choose Items de gewenste klassen te selecteren.
Kies in de Property Connection van de klasse scmdWijzigPostcode voor de bestaande verbinding cnnArtemisSQL.
Door op de 3 puntjes te klikken bij de Property CommandText opent de Query Builder. Selecteer de gewenste tabel, namelijk tblKlanten. Kies vervolgens via het Snelmenu Change Type voor Update.
Selecteer het veld Postnr en voer onderstaande SQL-instructie in. Klik vervolgens op OK.
Wanneer op de knop Postcode Wijzigen geklikt wordt dan wordt de postcode 2000 van alle klanten gewijzigd naar postcode 3000. In een Messagebox wordt meegedeeld hoeveel records gewijzigd zijn. Achter de knop zit de onderstaande code:
Het is van groot belang om de verbinding te verbreken (cnnArtemis.Close) nadat de data gewijzigd is. Indien dit niet gebeurt dan blijft de connection open staan. Dit kan problemen veroorzaken bij bezoekers omdat het aantal connections dat gelijktijdig geopend mag worden beperkt is.
Ziehier het resultaat wanneer op de knop gedrukt wordt.
22.4 Overige methoden
Om één gegeven uit de database op te vragen en weer te geven, wordt de methode ExecuteScalar gebruikt. Deze methode geeft de eerste kolom van de eerste rij van de resultaatset van het SELECT-SQL-statement. Omdat het resultaat van het gegevenstype Object is moet er meestal een conversie van het type plaats vinden.
Met het SELECT-statement kunnen ook meerdere gegevens opgevraagd worden. De uitvoering hiervan gebeurt met de methode ExecuteReader. Met deze methode wordt bij een SqlCommand een SqlDataReaderObject gecreëerd.
In een SQL-statement kunnen ook parameters gebruikt worden. Via code wordt een waarde toegekend aan deze parameters. In SQL Server worden parameters aangeduid met een @.
Top
22.5 Stored procedure
Naast SQL-statements kunnen ook stored procedures gebruikt worden om gegevens uit een database te halen. Een stored procedure is eigenlijk een opgeslagen SQL-statement met uitgebreide programmeerinstructies. Stored procedures zijn vooral handig wanneer hetzelfde SQL-commando meermaals gebruikt wordt.
Met de property CommandType wordt bepaalt hoe de property CommandText geïnterpreteerd moet worden. De mogelijkheden zijn:
- Text: SQL-statement (zie de methoden eerder dit hoofdstuk);
- StoredProcedure: naam van een stored procedure in een SQL database;
- TableDirect: alle gegevens van de tabel worden opgehaald.
Open de Database Explorer en rechtsklik op Stored Procedures om via Add New Stored Procedure een nieuwe stored procedure toe te voegen.
Geef de procedure de naam ProductenTeBestellen en voeg de onderstaande SQL-instructies toe.
Als bij CommandType de optie Stored Procedure geselecteerd wordt dan kan gekozen worden tussen de opgeslagen Stored Procedures.
De Stored procedure kan getest worden door in het snelmenu van de Stored Procedure te kiezen voor Execute.
Oefeningen Connected Toegang
Oefening 22-1 Herneem het uitgewerkte voorbeeld frmWijzigPostcode. Ontwerp een formulier frmWijzigPostcodeUitbreiding en voorzie een invoervak om zowel de te wijzigen als de nieuwe postcode in te voeren.
Oefening 22-2 Ontwerp een formulier frmPrijsVerhoging. Voorzie dit formulier van een knop waarmee de PrijsPerEenheid van alle producten verhoogd kan worden met 2 %.
Oefening 22-3 Ontwerp een formulier frmVerwijder. Met behulp van dit formulier kan de gebruiker de gegevens van de postmedewerkers uit de tabel tblWerknemers verwijderen.
Oefening 22-4 Maak een formulier frmAantal waarop het aantal klanten, het aantal werknemers en het aantal leveranciers getoond worden wanneer op de knop AANTAL OPVRAGEN gedrukt wordt. Omdat het aantal telkens met een ander SQL-statement opgehaald wordt, wordt de property CommandText niet ingevuld in het designvenster of in de Query Builder maar wel in de code.
Oefening 22-5 Herneem oefening 22-4 en zorg dat wanneer op de knop gedrukt wordt, ook de totale waarde van de voorraad wordt weergegeven.
Oefening 22-6 Ontwerp een formulier frmWerknemer waarop de naam en voornaam van alle werknemers alfabetisch op naam worden weergegeven in een listbox.
Oefening 22-7 Ontwerp een formulier waarop een keuzelijst voorzien is. In deze keuzelijst kan de gebruiker de naam van een klant selecteren. Automatisch verschijnt dan het aantal geplaatste orders.
Oefening 22-8 Breid de toepassing voor het wijzigen van de postcode verder uit. De huidige postcode kan in een keuzelijst geselecteerd worden en de nieuwe wordt ingevoerd in een tekstvak.
Oefening 22-9 Maak een formulier frmTeBestellen waarop productnummer en productnaam van de producten, waarvan de voorraad kleiner is dan het bestelpunt, worden weergegeven in een listbox. Maak hiervoor gebruik van een stored procedure.