Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De DataSet klassen en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.
De LINQ naar SQL-hulpprogramma's in Visual Studio biedt een visueel ontwerpoppervlak voor het maken en bewerken van LINQ naar SQL-klassen (entiteitsklassen) die zijn gebaseerd op objecten in een database. Met LINQ naar SQL kunt u LINQ-technologie gebruiken voor toegang tot SQL-databases. Zie LINQ (Language Integrated Query) voor meer informatie.
De logica voor het uitvoeren van updates wordt standaard geleverd door de LINQ naar SQL Runtime. De runtime maakt standaardInsert- en UpdateDelete instructies op basis van het schema van de tabel (de kolomdefinities en informatie over de primaire sleutel). Wanneer u het standaardgedrag niet wilt gebruiken, kunt u het updategedrag configureren en specifieke opgeslagen procedures opgeven voor het uitvoeren van de benodigde invoegingen, updates en verwijderingen die nodig zijn om met de gegevens in de database te werken. U kunt dit ook doen wanneer het standaardgedrag niet wordt uitgevoerd, bijvoorbeeld wanneer uw entiteitsklassen worden gemapt naar weergaven. Daarnaast kunt u het standaardgedrag voor bijwerken overschrijven wanneer voor de database toegang tot tabellen is vereist via opgeslagen procedures. Zie Bewerkingen aanpassen met behulp van opgeslagen procedures voor meer informatie.
Opmerking
Deze procedure vereist de beschikbaarheid van de opgeslagen procedures InsertCustomer, UpdateCustomer en DeleteCustomer voor de Northwind-database.
Deze procedure bevat de stappen die u moet volgen om het standaardgedrag van LINQ naar SQL-runtime te overschrijven voor het opslaan van gegevens in een database met behulp van opgeslagen procedures.
Tijdens deze stapsgewijze uitleg leert u hoe u de volgende taken uitvoert:
Maak een nieuwe Windows Forms-toepassing en voeg een LINQ toe aan het SQL-bestand.
Maak een entiteitsklasse die is toegewezen aan de Northwind-tabel
Customers.Maak een objectgegevensbron die verwijst naar de LINQ naar SQL-klasse
Customer.Maak een Windows-formulier dat een DataGridView formulier bevat dat is gebonden aan de
Customerklasse.Implementeer de functionaliteit voor opslaan voor het formulier.
Maak methoden DataContext door opgeslagen procedures toe te voegen aan de O/R Designer.
Configureer de
Customerklasse voor het gebruik van opgeslagen procedures voor het uitvoeren van invoegingen, updates en verwijderingen.
Vereiste voorwaarden
In dit scenario worden SQL Server Express LocalDB en de Northwind-voorbeelddatabase gebruikt.
Als u geen SQL Server Express LocalDB hebt, installeert u deze via de downloadpagina van SQL Server Express of via het installatieprogramma van Visual Studio. In de Visual Studio Installerkunt u SQL Server Express LocalDB installeren als onderdeel van de Gegevensopslag en -verwerking workload of als een afzonderlijk onderdeel.
Installeer de Northwind-voorbeelddatabase door de volgende stappen uit te voeren:
Open in Visual Studio het venster SQL Server-objectverkenner. (SQL Server Object Explorer wordt geïnstalleerd als onderdeel van de werkbelasting voor gegevensopslag en -verwerking in het Visual Studio-installatieprogramma.) Vouw het SQL Server-knooppunt uit. Klik met de rechtermuisknop op uw LocalDB-exemplaar en selecteer Nieuwe query.
Er wordt een venster van de queryeditor geopend.
Kopieer het script Northwind Transact-SQL naar het klembord. Met dit T-SQL-script wordt de volledig nieuwe Northwind-database gemaakt en gevuld met gegevens.
Plak het T-SQL-script in de queryeditor en kies vervolgens de knop uitvoeren.
Na korte tijd wordt de query uitgevoerd en wordt de Northwind-database gemaakt.
Een toepassing maken en LINQ toevoegen aan SQL-klassen
Omdat u met LINQ werkt aan SQL-klassen en de gegevens op een Windows-formulier weergeeft, maakt u een nieuwe Windows Forms-toepassing en voegt u een LINQ toe aan het SQL-klassenbestand.
Opmerking
De instructies in dit artikel illustreren de meest recente versie van de interactieve ontwikkelervaring (IDE) die beschikbaar is in Visual Studio. Uw computer kan verschillende namen of locaties weergeven voor sommige elementen van de gebruikersinterface. Mogelijk gebruikt u een andere versie van Visual Studio of andere omgevingsinstellingen. Zie De IDE-personaliseren voor meer informatie.
Een nieuw Windows Forms-toepassingsproject maken met LINQ-naar-SQL-klassen
Selecteer In Visual Studio in het menu Bestand de optie Nieuw>project.
Vouw Visual C# of Visual Basic uit in het linkerdeelvenster en selecteer Vervolgens Windows Desktop.
Selecteer in het middelste deelvenster het projecttype Windows Forms App .
Geef het project de naam UpdatingWithSProcsWalkthrough en kies VERVOLGENS OK.
Het project UpdatingWithSProcsWalkthrough wordt gemaakt en toegevoegd aan Solution Explorer.
Klik in het menu Project op Nieuwe item toevoegen.
Klik op de sjabloon LINQ naar SQL-klassen en typ Northwind.dbml in het vak Naam.
Klik op Toevoegen.
Er wordt een lege LINQ toegevoegd aan het SQL Classes-bestand (Northwind.dbml) en de O/R Designer wordt geopend.
De klantentiteitsklasse en objectgegevensbron maken
Maak LINQ naar SQL-klassen die zijn toegewezen aan databasetabellen door tabellen vanuit Server Explorer of Database Explorer naar O /R Designer te slepen. Het resultaat is LINQ naar SQL-entiteitsklassen die zijn toegewezen aan de tabellen in de database. Nadat u entiteitsklassen hebt gemaakt, kunnen ze worden gebruikt als objectgegevensbronnen, net als andere klassen met openbare eigenschappen.
Een klantentiteitsklasse maken en er een gegevensbron mee configureren
Zoek in Server Explorer of Database Explorer de tabel Customer in de SQL Server-versie van de Northwind-voorbeelddatabase.
Sleep het knooppunt Klanten vanuit Server Explorer of Database Explorer naar het *O/R Designer-oppervlak .
Er wordt een entiteitsklasse met de naam Klant gemaakt. Het heeft eigenschappen die overeenkomen met de kolommen in de tabel Klanten. De entiteitsklasse heet Klant (niet Klanten), omdat deze één klant uit de tabel Klanten vertegenwoordigt.
Opmerking
Dit hernoemingsgedrag wordt pluralisatie genoemd. Deze kan worden ingeschakeld of uitgeschakeld in het dialoogvenster Opties. Zie Procedure: Pluralisatie in- en uitschakelen (O/R Designer) voor meer informatie.
Klik in het menu Build op Build UpdatingwithSProcsWalkthrough om het project te bouwen.
Als u het venster Gegevensbronnen wilt openen, klikt u in het menu Gegevens op Gegevensbronnen weergeven.
Klik in het venster Gegevensbronnen op Nieuwe gegevensbron toevoegen.
Klik op Object op de pagina Kies een Type Gegevensbron en selecteer Volgende.
Vouw de UpdatingwithSProcsWalkthrough node uit en zoek de klasse Klant en selecteer deze.
Opmerking
Als de klasse Klant niet beschikbaar is, annuleert u de wizard, bouwt u het project en voert u de wizard opnieuw uit.
Klik op Voltooien om de gegevensbron te maken en voeg de entiteitsklasse Klant toe aan het venster Gegevensbronnen .
Een DataGridView maken om de klantgegevens op een Windows-formulier weer te geven
Besturingscomponenten maken die gebonden zijn aan entiteitsklassen door LINQ-naar-SQL-gegevensbronitems uit het venster Gegevensbronnen naar een Windows-formulier te slepen.
Besturingselementen toevoegen die zijn gebonden aan de entiteitsklassen
Open Form1- in de ontwerpweergave.
Sleep vanuit het Gegevensbronnen venster het Klant knooppunt naar Form1.
Opmerking
Als u het venster Gegevensbronnen wilt weergeven, klikt u op Gegevensbronnen weergeven in het menu Gegevens .
Open Form1 in de Code Editor.
Voeg de volgende code toe aan het formulier, globaal aan het formulier, buiten een specifieke methode, maar binnen de
Form1klasse:Maak een gebeurtenis-handler voor de
Form_Loadgebeurtenis en voeg de volgende code toe aan de handler:
Save-functionaliteit implementeren
De knop Opslaan is standaard niet ingeschakeld en de functionaliteit voor opslaan is niet geïmplementeerd. Code wordt ook niet automatisch toegevoegd om gewijzigde gegevens op te slaan in de database wanneer gegevensgebonden besturingselementen worden gemaakt voor objectgegevensbronnen. In deze sectie wordt uitgelegd hoe u de knop Opslaan inschakelt en de functionaliteit voor opslaan implementeert voor LINQ naar SQL-objecten.
De functionaliteit voor opslaan implementeren
Open Form1- in de ontwerpweergave.
Selecteer de knop Opslaan op de CustomerBindingNavigator (de knop met het diskettepictogram).
Stel in het venster Eigenschappen de eigenschap Ingeschakeld in op Waar.
Dubbelklik op de knop Opslaan om een gebeurtenis-handler te maken en over te schakelen naar de Code-editor.
Voeg de volgende code toe aan de gebeurtenis-handler van de knop opslaan:
Overschrijf het standaardgedrag voor het uitvoeren van updates (invoegingen, updates en verwijderingen)
Het standaardgedrag van de update overschrijven
Open de LINQ naar het SQL-bestand in de O/R Designer. (Dubbelklik op het bestand Northwind.dbml in Solution Explorer.)
Vouw in Server Explorer of Database Explorer het knooppunt Opgeslagen procedures van Northwind-databases uit en zoek de opgeslagen procedures InsertCustomers, UpdateCustomers en DeleteCustomers.
Versleep alle drie de opgeslagen procedures naar de O/R Designer.
De opgeslagen procedures worden als methoden toegevoegd aan het deelvenster DataContext Methoden. Zie DataContext methods (O/R Designer)voor meer informatie.
Selecteer de entiteitsklasse Klant in de O/R Designer.
Selecteer in het venster Eigenschappen de eigenschap Invoegen .
Klik op het beletselteken (...) naast Runtime gebruiken om het dialoogvenster Gedrag configureren te openen.
Selecteer Aanpassen.
Selecteer de methode InsertCustomers in de lijst Aanpassen .
Klik op Toepassen om de configuratie voor de geselecteerde klasse en het geselecteerde gedrag op te slaan.
Opmerking
U kunt het gedrag voor elke combinatie van klasse/gedrag blijven configureren zolang u op Toepassen klikt nadat u elke wijziging hebt aangebracht. Als u de klasse of het gedrag wijzigt voordat u op Toepassen klikt, wordt er een waarschuwingsdialoogvenster weergegeven waarin u wijzigingen kunt toepassen.
Selecteer Bijwerken in de lijst Gedrag .
Selecteer Aanpassen.
Selecteer de methode UpdateCustomers in de lijst Aanpassen .
Controleer de lijst met methodeargumenten en klasse-eigenschappen en u ziet dat er twee methodeargumenten en twee klasse-eigenschappen zijn voor sommige kolommen in de tabel. Dit maakt het eenvoudiger om wijzigingen bij te houden en uitspraken te maken die controleren op gelijktijdigheidsschendingen.
Koppel het methodeargument Original_CustomerID aan de klasse-eigenschap CustomerID (Original).
Opmerking
Standaard worden methodeargumenten toegewezen aan klasse-eigenschappen wanneer de namen overeenkomen. Als eigenschapsnamen worden gewijzigd en niet meer overeenkomen tussen de tabel en de entiteitsklasse, moet u mogelijk de equivalente klasse-eigenschap selecteren waaraan moet worden toegewezen als de O/R Designer de juiste toewijzing niet kan bepalen. Als methodeargumenten geen geldige eigenschappen binnen de klasse hebben om aan toe te wijzen, kunt u de waarde van Klasse-eigenschappen instellen op (Geen).
Klik op Toepassen om de configuratie voor de geselecteerde klasse en het geselecteerde gedrag op te slaan.
Selecteer Verwijderen in de lijst Gedrag .
Selecteer Aanpassen.
Selecteer de methode DeleteCustomers in de lijst Aanpassen .
Koppel het methodeargument Original_CustomerID aan de klasse-eigenschap CustomerID (Original).
Klik op OK.
Opmerking
Hoewel het geen probleem is voor deze specifieke walkthrough, is het de moeite waard om te vermelden dat LINQ to SQL automatisch database-gegenereerde waarden verwerkt voor identiteit (auto-increment), rowguidcol (database-gegenereerde GUID) en tijdstempelkolommen tijdens invoegingen en updates. Door de database gegenereerde waarden in andere kolomtypen leiden onverwacht tot een null-waarde. Als u de door de database gegenereerde waarden wilt retourneren, moet u deze handmatig instellen IsDbGeneratedtrue op en AutoSync op een van de volgende opties: AutoSync.Always, AutoSync.OnInsert of AutoSync.OnUpdate.
De toepassing testen
Voer de toepassing opnieuw uit om te controleren of de opgeslagen procedure UpdateCustomers de klantrecord correct bijwerkt in de database.
Druk op F5.
Wijzig een record in het raster om het updategedrag te testen.
Voeg een nieuwe record toe om het invoeggedrag te testen.
Klik op de knop Opslaan om wijzigingen weer op te slaan in de database.
Sluit het formulier.
Druk op F5 en controleer of de bijgewerkte record en de zojuist ingevoegde record behouden blijven.
Verwijder de nieuwe record die u in stap 3 hebt gemaakt om het verwijderingsgedrag te testen.
Klik op de knop Opslaan om de wijzigingen in te dienen en de verwijderde record uit de database te verwijderen.
Sluit het formulier.
Druk op F5 en controleer of de verwijderde record uit de database is verwijderd.
Opmerking
Als uw toepassing gebruikmaakt van SQL Server Express Edition, afhankelijk van de waarde van de eigenschap Copy to Output Directory van het databasebestand, worden de wijzigingen mogelijk niet weergegeven wanneer u in stap 10 op F5 drukt.
Volgende stappen
Afhankelijk van uw toepassingsvereisten zijn er verschillende stappen die u mogelijk wilt uitvoeren nadat u LINQ hebt gemaakt voor SQL-entiteitsklassen. Enkele verbeteringen die u aan deze toepassing kunt aanbrengen, zijn onder andere:
Gelijktijdigheidscontrole implementeren tijdens updates. Zie Optimistische gelijktijdigheid voor meer informatie: overzicht.
LINQ-query's toevoegen om gegevens te filteren. Zie Inleiding tot LINQ-query's (C#) voor meer informatie.