Delen via


Gegevens invoegen, bijwerken en verwijderen met sqlDataSource (VB)

door Scott Mitchell

PDF downloaden

In eerdere zelfstudies hebben we geleerd hoe het besturingselement ObjectDataSource het mogelijk maakt om gegevens in te voegen, bij te werken en te verwijderen. Het besturingselement SqlDataSource ondersteunt dezelfde bewerkingen, maar de benadering verschilt. In deze zelfstudie ziet u hoe u sqlDataSource configureert om gegevens in te voegen, bij te werken en te verwijderen.

Introductie

Zoals beschreven in Een overzicht van invoegen, bijwerken en verwijderen, biedt het GridView-besturingselement ingebouwde mogelijkheden voor bijwerken en verwijderen, terwijl de besturingselementen DetailsView en FormView ondersteuning bieden, samen met bewerkings- en verwijderingsfunctionaliteit. Deze mogelijkheden voor het wijzigen van gegevens kunnen rechtstreeks worden aangesloten op een gegevensbronbeheer zonder dat er een coderegel hoeft te worden geschreven. Een overzicht van invoegen, bijwerken en verwijderen, onderzocht met behulp van de ObjectDataSource om het invoegen, bijwerken en verwijderen te vergemakkelijken bij de besturingselementen GridView, DetailsView en FormView. U kunt de SqlDataSource ook gebruiken in plaats van de ObjectDataSource.

Zoals u zich herinnert, moeten we bij het gebruik van ObjectDataSource de methoden van de objectlaag specificeren die moeten worden aangeroepen om de acties invoegen, bijwerken of verwijderen uit te voeren. Met sqlDataSource moeten we SQL-instructies (of opgeslagen procedures) opgeven INSERTUPDATEDELETE om uit te voeren. Zoals we in deze zelfstudie zien, kunnen deze instructies handmatig worden gemaakt of automatisch worden gegenereerd door de wizard Gegevensbron configureren van SqlDataSource.

Opmerking

Omdat we de mogelijkheden voor invoegen, bewerken en verwijderen van de besturingselementen GridView, DetailsView en FormView al hebben besproken, richt deze zelfstudie zich op het configureren van het besturingselement SqlDataSource ter ondersteuning van deze bewerkingen. Als u deze functies in GridView, DetailsView en FormView wilt implementeren, gaat u terug naar de zelfstudies Bewerken, Invoegen en Verwijderen van gegevens, te beginnen met een overzicht van invoegen, bijwerken en verwijderen.

Stap 1: INSERT-, UPDATE- en DELETE-instructies opgeven

Zoals we in de afgelopen twee zelfstudies hebben gezien, moeten we twee eigenschappen instellen om gegevens op te halen uit een SqlDataSource-besturingselement:

  1. ConnectionString, waarmee wordt opgegeven naar welke database de query moet worden verzonden, en
  2. SelectCommand, waarmee de ad-hoc SQL-instructie of opgeslagen procedurenaam wordt opgegeven die moet worden uitgevoerd om de resultaten te retourneren.

Voor SelectCommand waarden met parameters worden de parameterwaarden opgegeven via de verzameling SqlDataSource SelectParameters en kunnen vastgelegde waarden, algemene parameterbronwaarden (queryreeksvelden, sessievariabelen, webbeheerwaarden enzovoort) worden opgenomen of programmatisch worden toegewezen. Wanneer de Select()-methode van het SqlDataSource-besturingselement programmatisch of automatisch wordt aangeroepen vanuit een gegevenswebbesturingselement, wordt een verbinding met de database tot stand gebracht, worden de parameterwaarden toegewezen aan de query en wordt het commando naar de database verzonden. De resultaten worden vervolgens geretourneerd als een DataSet of DataReader, afhankelijk van de waarde van de besturingselementeigenschap DataSourceMode.

Naast het selecteren van gegevens kan het besturingselement SqlDataSource worden gebruikt om gegevens in te voegen, bij te werken en te verwijderen door op ongeveer dezelfde manier SQL-instructies op te gevenINSERTUPDATEDELETE. Ken eenvoudig de eigenschappen InsertCommand, UpdateCommand en DeleteCommand de SQL-instructies INSERT, UPDATE en DELETE toe om uit te voeren. Als de instructies parameters hebben (wat meestal het geval zal zijn), neemt u deze op in de InsertParameters, UpdateParameters, en DeleteParameters verzamelingen.

Zodra een InsertCommand, UpdateCommandof DeleteCommand waarde is opgegeven, wordt de optie Invoegen inschakelen, Bewerken inschakelen of Verwijderen inschakelen in de bijbehorende infolabel van het webbesturingselement voor gegevens beschikbaar. Om dit te illustreren, gaan we een voorbeeld nemen van de Querying.aspx pagina die we in de zelfstudie Querygegevens hebben gemaakt met sqlDataSource Control en deze uitbreiden om verwijdermogelijkheden op te nemen.

Open eerst de InsertUpdateDelete.aspx en Querying.aspx pagina's uit de SqlDataSource map. Vanuit de Ontwerper op de Querying.aspx Pagina, selecteer de SqlDataSource en GridView uit het eerste voorbeeld (de ProductsDataSource en GridView1 besturingselementen). Nadat u de twee besturingselementen hebt geselecteerd, gaat u naar het menu Bewerken en kiest u Kopiëren (of drukt u op Ctrl+C). Ga vervolgens naar de Designer van InsertUpdateDelete.aspx en plak de bedieningselementen. Nadat u de twee instellingen hebt verplaatst naar InsertUpdateDelete.aspx, test u de pagina in een browser. U ziet de waarden van de ProductID, ProductNameen UnitPrice kolommen voor alle records in de Products databasetabel.

Alle producten worden vermeld, besteld op product-id

Afbeelding 1: Alle producten worden vermeld, Gesorteerd op ProductID (klik om de afbeelding op volledige grootte weer te geven)

De eigenschappen DeleteCommand en DeleteParameters van SqlDataSource toevoegen

Op dit moment hebben we een SqlDataSource die simpelweg alle records uit de Products tabel retourneert en een GridView die deze gegevens weergeeft. Ons doel is om dit voorbeeld uit te breiden zodat de gebruiker producten kan verwijderen via GridView. Hiervoor moeten we waarden opgeven voor de SqlDataSource-besturingselementen DeleteCommand en DeleteParameters -eigenschappen en vervolgens de GridView configureren ter ondersteuning van verwijderen.

De DeleteCommand eigenschappen en DeleteParameters eigenschappen kunnen op verschillende manieren worden opgegeven:

  • Via de declaratieve syntaxis
  • Vanuit het venster Eigenschappen in de ontwerpfunctie
  • In het scherm Specificeer een aangepaste SQL-instructie of opgeslagen procedure in de wizard Configureren van Gegevensbron
  • Via de knop Geavanceerd in het scherm Kolommen specificeren uit een tabelweergave in de wizard Gegevensbron configureren, wordt automatisch de DELETE SQL-instructie en parameterverzameling gegenereerd die in de DeleteCommand en DeleteParameters eigenschappen worden gebruikt.

We zullen onderzoeken hoe u de DELETE instructie automatisch kunt laten aanmaken in stap 2. Voorlopig gebruiken we het venster Eigenschappen in de ontwerpfunctie, hoewel de wizard Gegevensbron configureren of de declaratieve syntaxisoptie ook zou werken.

Klik in InsertUpdateDelete.aspxde Ontwerper op SqlDataSource ProductsDataSource en open vervolgens het venster Eigenschappen (kies het venster Eigenschappen in het menu Beeld of druk eenvoudigweg op F4). Selecteer de eigenschap DeleteQuery, waardoor een set ellipsen wordt weergegeven.

Schermopname van het venster ProductsDataSource Properties met de eigenschap DeleteQuery geselecteerd.

Afbeelding 2: Selecteer de eigenschap DeleteQuery in het venster Eigenschappen

Opmerking

SqlDataSource heeft geen eigenschap DeleteQuery. In plaats daarvan is DeleteQuery een combinatie van de eigenschappen DeleteCommand en DeleteParameters en wordt deze alleen weergegeven in het venster Eigenschappen wanneer u het venster bekijkt via de ontwerper. Als u het venster Eigenschappen in de bronweergave bekijkt, vindt u in plaats daarvan de DeleteCommand eigenschap.

Klik op het beletselteken in de eigenschap DeleteQuery om het dialoogvenster Opdracht- en parametereditor weer te geven (zie afbeelding 3). In dit dialoogvenster kunt u de DELETE SQL-instructie opgeven en de parameters opgeven. Voer de volgende query in het tekstvak voor de DELETE opdracht in (handmatig of met de opbouwfunctie voor query's, indien gewenst):

DELETE FROM Products
WHERE ProductID = @ProductID

Klik vervolgens op de knop Parameters vernieuwen om de @ProductID parameter toe te voegen aan de onderstaande lijst met parameters.

Schermopname van het venster Command en Parameter Editor met de parameter <span class= @ProductID toegevoegd aan de lijst met delete-opdrachtparameters. />

Afbeelding 3: Selecteer de eigenschap DeleteQuery in het venster Eigenschappen (klik om de afbeelding op volledige grootte weer te geven)

Geef geen waarde op voor deze parameter (laat de parameterbron op Geen staan). Zodra we ondersteuning voor het verwijderen van rijen in de GridView hebben toegevoegd, geeft de GridView automatisch deze parameterwaarde op door de waarde te gebruiken uit de DataKeys collectie voor de rij waarvan op de knop Verwijderen is geklikt.

Opmerking

De parameternaam die in de DELETE query wordt gebruikt, moet gelijk zijn aan de naam van de DataKeyNames waarde in GridView, DetailsView of FormView. Dat wil zeggen, de parameter in de DELETE instructie is doelbewust benoemd als @ProductID (in plaats van bijvoorbeeld @ID), omdat de naam van de primaire sleutelkolom in de tabel Producten (en daarom de waarde van DataKeyNames in de GridView) ProductID is.

Als de parameternaam en DataKeyNames -waarde niet overeenkomen, kan de GridView de parameter niet automatisch toewijzen aan de waarde uit de DataKeys verzameling.

Nadat u de verwijdergerelateerde informatie hebt ingevoerd in het dialoogvenster Opdracht- en Parametereditor, klikt u op OK en gaat u naar de bronweergave om de resulterende declaratieve markeringen te bekijken:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"
    DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" />
    </DeleteParameters>
</asp:SqlDataSource>

Let op de toevoeging van de DeleteCommand eigenschap, evenals de <DeleteParameters> sectie en het parameterobject met de naam productID.

De GridView configureren voor verwijderen

Nu de DeleteCommand eigenschap is toegevoegd, bevat de infotag van GridView nu de optie Verwijderen inschakelen. Schakel dit selectievakje in. Zoals besproken in Een overzicht van invoegen, bijwerken en verwijderen, zorgt dit ervoor dat GridView een CommandField toevoegt met de ShowDeleteButton eigenschap ingesteld op True. Zoals in afbeelding 4 wordt weergegeven, wordt er een knop Verwijderen opgenomen wanneer de pagina wordt bezocht via een browser. Test deze pagina door enkele producten te verwijderen.

Elke GridView-rij bevat nu een knop Verwijderen

Afbeelding 4: Elke GridView-rij bevat nu een knop Verwijderen (klik om de volledige afbeelding weer te geven)

Wanneer u op de knop Verwijderen klikt, treedt er een postback op, en wijst de GridView-parameter ProductID toe aan de waarde uit de DataKeys-verzameling voor de rij waarop de knop Verwijderen is aangeklikt en roept de SqlDataSource-methode Delete() aan. Het besturingselement SqlDataSource maakt vervolgens verbinding met de database en voert de DELETE instructie uit. De GridView wordt vervolgens opnieuw gekoppeld aan de SqlDataSource, waarna de huidige set producten wordt weergegeven (die niet langer de zojuist verwijderde record bevat).

Opmerking

Aangezien gridView de verzameling gebruikt DataKeys om de SqlDataSource-parameters te vullen, is het essentieel dat de eigenschap GridView DataKeyNames wordt ingesteld op de kolommen die de primaire sleutel vormen en dat de SqlDataSource-s SelectCommand deze kolommen retourneert. Bovendien is het belangrijk dat de parameternaam in de SqlDataSource s DeleteCommand is ingesteld op @ProductID. Als de DataKeyNames eigenschap niet is ingesteld of de parameter niet de naam @ProductsIDheeft, wordt er een postback gemaakt door op de knop Verwijderen te klikken, maar wordt er geen record verwijderd.

Afbeelding 5 geeft deze interactie grafisch weer. Verwijs naar de zelfstudie Gebeurtenissen die zijn gekoppeld aan het invoegen, bijwerken en verwijderen voor een gedetailleerdere bespreking van de keten van gebeurtenissen die zijn gekoppeld aan het invoegen, bijwerken en verwijderen van een gegevenswebbesturingselement.

Als u in GridView op de knop Verwijderen klikt, wordt de methode Delete() van SqlDataSource aangeroepen

Afbeelding 5: Door te klikken op de knop Verwijderen in GridView wordt de methode SqlDataSource aangeroepen Delete()

Stap 2: De instructies INSERT, UPDATE, en DELETE automatisch genereren

Zoals stap 1 onderzocht, kunnen INSERT, UPDATE, en DELETE SQL-instructies worden opgegeven via het venster Eigenschappen of de declaratieve syntaxis van het besturingselement. Voor deze aanpak moeten we echter handmatig de SQL-instructies schrijven, wat monotonisch en foutgevoelig kan zijn. Gelukkig biedt de wizard Gegevensbron configureren een optie om de INSERT, UPDATE, en DELETE instructies automatisch te laten genereren wanneer u het scherm Specificeer kolommen uit een tabel of view gebruikt.

Laten we deze optie voor automatische generatie verkennen. Voeg een DetailsView toe aan de ontwerper in InsertUpdateDelete.aspx en stel de eigenschap ID in op ManageProducts. Kies vervolgens vanuit de infotag van DetailsView om een nieuwe gegevensbron te maken en een SqlDataSource met de naam ManageProductsDataSourcete maken.

Een nieuwe SqlDataSource maken met de naam ManageProductsDataSource

Afbeelding 6: Maak een nieuwe SqlDataSource-naam ManageProductsDataSource (klik om de volledige afbeelding weer te geven)

Kies in de wizard Gegevensbron configureren de NORTHWINDConnectionString verbindingsreeks te gebruiken en klik op Volgende. Laat op het scherm Select Instructie het keuzerondje "Kolommen opgeven uit een tabel of weergave" geselecteerd en kies de Products tabel in de keuzelijst. Selecteer de ProductID, ProductName, UnitPrice, en Discontinued kolommen in de lijst met selectievakjes.

Met behulp van de tabel Producten retourneert u de kolommen ProductID, ProductName, UnitPrice en Stopgezette kolommen

Afbeelding 7: De Products tabel gebruiken, de ProductID, ProductNameen UnitPriceDiscontinued kolommen retourneren (klik om de afbeelding op volledige grootte weer te geven)

Als u automatisch INSERT, UPDATE en DELETE instructies wilt genereren op basis van de geselecteerde tabel en kolommen, klikt u op de knop Geavanceerd en schakelt u het selectievakje Genereren INSERT, UPDATE en DELETE instructies in.

Selecteer het selectievakje 'INSERT-, UPDATE- en DELETE-instructies genereren'

Afbeelding 8: Vink het selectievakje Genereren INSERT, UPDATE en DELETE instructies aan

Het selectievakje Genereren INSERT, UPDATE, en DELETE instructies kan alleen worden aangevinkt als de geselecteerde tabel een primaire sleutel heeft en de primaire sleutelkolom (of kolommen) is opgenomen in de lijst met geretourneerde kolommen. Het selectievakje Optimistische gelijktijdigheid gebruiken, dat kan worden geselecteerd zodra het selectievakje Genereren INSERT, UPDATE, en DELETE instructies is aangevinkt, zal de WHERE clausules in de resulterende UPDATE en DELETE instructies uitbreiden om optimistische gelijktijdigheidscontrole te bieden. Laat dit selectievakje voorlopig uitgeschakeld. In de volgende zelfstudie bekijken we optimistische gelijktijdigheid met het besturingselement SqlDataSource.

Nadat u het selectievakje voor het genereren van INSERT, UPDATE, en DELETE instructies hebt ingeschakeld, klikt u op OK om terug te keren naar het scherm Configureren van Select-instructie, klik vervolgens op Volgende en daarna op Voltooien om de wizard Gegevensbron configureren af te ronden. Wanneer u de wizard hebt voltooid, voegt Visual Studio BoundFields toe aan de DetailsView voor de ProductID, ProductNameen UnitPrice kolommen en een CheckBoxField voor de Discontinued kolom. Schakel in de smarttag van DetailsView de optie 'Paginering inschakelen' in, zodat de gebruiker die deze pagina bezoekt, de producten kan doorlopen. Wis ook de DetailsView's Width en Height eigenschappen.

U ziet dat voor de infolabel de opties Invoegen inschakelen, Bewerken inschakelen en Verwijderen inschakelen beschikbaar zijn. Dit komt doordat de SqlDataSource waarden bevat voor InsertCommand, UpdateCommand, en DeleteCommand, zoals de volgende declaratieve syntaxis laat zien.

<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True"
    AutoGenerateRows="False" DataKeyNames="ProductID"
    DataSourceID="ManageProductsDataSource" EnableViewState="False">
    <Fields>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
            SortExpression="UnitPrice" />
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
            SortExpression="Discontinued" />
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    DeleteCommand=
        "DELETE FROM [Products] WHERE [ProductID] = @ProductID"
    InsertCommand=
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
         VALUES (@ProductName, @UnitPrice, @Discontinued)"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued]
         FROM [Products]"
    UpdateCommand=
        "UPDATE [Products] SET [ProductName] = @ProductName,
         [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued
         WHERE [ProductID] = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
        <asp:Parameter Name="ProductID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
    </InsertParameters>
</asp:SqlDataSource>

Merk op hoe het besturingselement SqlDataSource automatisch waarden heeft ingesteld voor zijn InsertCommand, UpdateCommand en DeleteCommand eigenschappen. De set kolommen waarnaar wordt verwezen in de InsertCommand en UpdateCommand eigenschappen zijn gebaseerd op de kolommen in de SELECT instructie. Dat betekent dat in plaats van dat elke productenkolom in de InsertCommand en UpdateCommand zou staan, er alleen die kolommen zijn gespecificeerd in de SelectCommand (minder ProductID, die wordt weggelaten omdat het een IDENTITY kolom is, waarvan de waarde niet kan worden gewijzigd bij het bewerken en die automatisch wordt toegewezen bij het invoegen). Bovendien zijn er voor elke parameter in de InsertCommand, UpdateCommanden DeleteCommand eigenschappen bijbehorende parameters in de InsertParameters, UpdateParametersen DeleteParameters verzamelingen.

Als u de gegevenswijzigingsfuncties van DetailsView wilt inschakelen, schakelt u de opties Invoegen inschakelen, Bewerken inschakelen en Verwijderen inschakelen in zijn smarttag in. Hiermee voegt u een CommandField toe met de ShowInsertButtonbijbehorende , ShowEditButtonen ShowDeleteButton eigenschappen die zijn ingesteld op True.

Ga naar de pagina in een browser en noteer de knoppen Bewerken, Verwijderen en Nieuw die zijn opgenomen in de DetailsView. Als u op de knop Bewerken klikt, wordt de DetailsView omgezet in de bewerkingsmodus, waarin elke BoundField wordt weergegeven waarvan ReadOnly de eigenschap is ingesteld False op (de standaardinstelling) als een tekstvak en het SelectievakjeVeld als een selectievakje.

De standaardbewerkingsinterface van DetailsView

Afbeelding 9: De standaardbewerkingsinterface van DetailsView (klik om de afbeelding op volledige grootte weer te geven)

Op dezelfde manier kunt u het geselecteerde product verwijderen of een nieuw product toevoegen aan het systeem. Omdat de InsertCommand instructie alleen werkt met de ProductName, UnitPrice en Discontinued kolommen, hebben de andere kolommen NULL of krijgen bij het invoegen hun standaardwaarde toegewezen door de database. Net als bij ObjectDataSource, treedt er een SQL-fout op als er kolommen in de InsertCommand databasetabel ontbreken die geen s toestaan NULL en geen standaardwaarde hebben, treedt er een SQL-fout op bij het uitvoeren van de INSERT instructie.

Opmerking

Het DetailsView invoeg- en bewerkinterfaces missen volledig enige vorm van aanpassing of validatie. Als u validatiebesturingselementen wilt toevoegen of de interfaces wilt aanpassen, moet u de BoundFields converteren naar TemplateFields. Raadpleeg de tutoriëls Het toevoegen van validatiebesturingselementen aan de bewerkings- en invoeginterfaces en Het aanpassen van de interface voor gegevenswijziging voor meer informatie.

Houd er ook rekening mee dat voor het bijwerken en verwijderen van DetailsView de huidige productwaarde DataKey wordt gebruikt, die alleen aanwezig is als de DataKeyNames eigenschap is geconfigureerd. Als bewerken of verwijderen geen effect heeft, controleert u of de DataKeyNames eigenschap is ingesteld.

Beperkingen van het automatisch genereren van SQL-instructies

Omdat de optie Genereren INSERT, UPDATEen DELETE instructies alleen beschikbaar is bij het kiezen van kolommen uit een tabel, moet u voor complexere query's uw eigen INSERTquery's schrijven, UPDATEen DELETE instructies zoals in stap 1. SQLSELECT-instructies gebruiken meestal JOINs om gegevens op te halen uit een of meer opzoektabellen voor weergavedoeleinden (zoals het ophalen van het Categories-veld van de CategoryName-tabel bij het weergeven van productgegevens). Tegelijkertijd willen we de gebruiker toestaan om gegevens in de kerntabel te bewerken, bij te werken of in te voegen (Productsin dit geval).

Houd rekening met de volgende tijdbesparende tip, ook al kunnen de INSERT, UPDATE en DELETE verklaringen handmatig worden ingevoerd. Stel de SqlDataSource in eerste instantie zo in dat gegevens worden opgehaald uit de Products tabel. Gebruik de wizard Gegevensbron configureren om kolommen op te geven uit een tabel of weergavescherm, zodat u automatisch de INSERT, UPDATE, en DELETE-instructies kunt genereren. Nadat u de wizard hebt voltooid, kiest u ervoor om SelectQuery te configureren in het venster Eigenschappen (of gaat u terug naar de wizard Gegevensbron configureren, maar gebruikt u de optie Een aangepaste SQL-instructie of opgeslagen procedure opgeven). Werk vervolgens de SELECT instructie bij om de JOIN syntaxis op te nemen. Deze techniek biedt de tijdbesparende voordelen van de automatisch gegenereerde SQL-instructies en biedt een meer aangepaste SELECT instructie.

Een andere beperking van het automatisch genereren van de INSERT, UPDATE, en DELETE instructies is dat de kolommen in de INSERT en UPDATE instructies zijn gebaseerd op de kolommen die door de SELECT instructie worden geretourneerd. Mogelijk moeten we echter meer of minder velden bijwerken of invoegen. In het voorbeeld van stap 2 willen we bijvoorbeeld dat het UnitPrice BoundField alleen-lezen is. In dat geval zou het niet moeten worden weergegeven in de UpdateCommand. U kunt ook de waarde instellen van een tabelveld dat niet wordt weergegeven in de GridView. Als u bijvoorbeeld een nieuwe record toevoegt, wilt u mogelijk dat de QuantityPerUnit waarde is ingesteld op TODO.

Als dergelijke aanpassingen vereist zijn, moet u deze handmatig maken via het venster Eigenschappen, de optie Een aangepaste SQL-instructie of opgeslagen procedure opgeven in de wizard of via de declaratieve syntaxis.

Opmerking

Wanneer u parameters toevoegt die geen overeenkomende velden hebben in het gegevenswebbesturingselement, moet u er rekening mee houden dat aan deze parameterswaarden op een bepaalde manier waarden moeten worden toegewezen. Deze waarden kunnen zijn: hardcoded rechtstreeks in de InsertCommand of UpdateCommand; kunnen afkomstig zijn van een vooraf gedefinieerde bron (de queryreeks, sessiestatus, webbesturingselementen op de pagina, enzovoort); of kunnen programmatisch worden toegewezen, zoals we in de voorgaande tutorial hebben gezien.

Samenvatting

Om ervoor te zorgen dat de besturingselementen van het gegevensweb hun ingebouwde mogelijkheden voor invoegen, bewerken en verwijderen gebruiken, moet het besturingselement voor gegevensbronnen dat ze nodig hebben dergelijke functionaliteit bieden. Voor sqlDataSource betekent dit dat INSERT, UPDATEen DELETE SQL-instructies moeten worden toegewezen aan de InsertCommand, UpdateCommanden DeleteCommand eigenschappen. Deze eigenschappen en de bijbehorende parametersverzamelingen kunnen handmatig worden toegevoegd of automatisch worden gegenereerd via de wizard Gegevensbron configureren. In deze zelfstudie hebben we beide technieken onderzocht.

We hebben het gebruik van optimistische gelijktijdigheid onderzocht met de ObjectDataSource in de zelfstudie Optimistische gelijktijdigheid implementeren . Het besturingselement SqlDataSource biedt ook optimistische gelijktijdigheidsondersteuning. Zoals vermeld in stap 2, biedt de wizard, bij het automatisch genereren van de INSERT, UPDATE en DELETE instructies, de optie 'Optimistische gelijktijdigheid gebruiken'. Zoals we in de volgende zelfstudie zullen zien, wijzigt het gebruik van optimistische gelijktijdigheid met SqlDataSource de WHERE componenten, in de UPDATE en DELETE instructies om ervoor te zorgen dat de waarden voor de andere kolommen niet zijn veranderd sinds de gegevens voor het laatst op de pagina werden weergegeven.

Veel plezier met programmeren!

Over de auteur

Scott Mitchell, auteur van zeven ASP/ASP.NET-boeken en oprichter van 4GuysFromRolla.com, werkt sinds 1998 met Microsoft-webtechnologieën. Scott werkt als onafhankelijk consultant, trainer en schrijver. Zijn laatste boek is Sams Teach Yourself ASP.NET 2.0 in 24 uur. Hij kan worden bereikt op mitchell@4GuysFromRolla.com.