Megosztás a következőn keresztül:


Adatok beszúrása, frissítése és törlése az SqlDataSource (VB) használatával

által Scott Mitchell

PDF letöltése

A korábbi oktatóanyagokban megtanultuk, hogyan engedélyezett az ObjectDataSource vezérlő az adatok beszúrásához, frissítéséhez és törléséhez. Az SqlDataSource vezérlő ugyanazokat a műveleteket támogatja, de a megközelítés eltérő, és ez az oktatóanyag bemutatja, hogyan konfigurálhatja az SqlDataSource-t adatok beszúrására, frissítésére és törlésére.

Bevezetés

A Beszúrás, frissítés és törlés áttekintésében leírtaknak megfelelően a GridView vezérlő beépített frissítési és törlési képességeket biztosít, míg a DetailsView és a FormView vezérlők közé tartozik a támogatás beszúrása a szerkesztési és törlési funkciókkal együtt. Ezek az adatmódosítási képességek közvetlenül csatlakoztathatók egy adatforrás-vezérlőhöz anélkül, hogy kódsort kellene írni. Az ObjectDataSource használatával megvizsgált beszúrás, frissítés és törlés áttekintése a GridView, a DetailsView és a FormView vezérlők beszúrásának, frissítésének és törlésének megkönnyítése érdekében. Másik lehetőségként az SqlDataSource használható az ObjectDataSource helyett.

Ne feledje, hogy a beszúrás, a frissítés és a törlés támogatásához az ObjectDataSource-val meg kellett adnia a beszúrási, frissítési vagy törlési művelet végrehajtásához meghívandó objektumréteg-metódusokat. Az SqlDataSource-hoz meg kell adnunk INSERT, UPDATEés DELETE SQL-utasításokat (vagy tárolt eljárásokat) a végrehajtáshoz. Ahogy az oktatóanyagban látható, ezeket az utasításokat manuálisan is létrehozhatja, vagy automatikusan létrehozhatja az SqlDataSource Adatforrás konfigurálása varázslója.

Megjegyzés:

Mivel már szó volt a GridView, a DetailsView és a FormView vezérlők beszúrási, szerkesztési és törlési képességeiről, ez az oktatóanyag az SqlDataSource vezérlő konfigurálására összpontosít ezen műveletek támogatásához. Ha a GridView, a DetailsView és a FormView szolgáltatáson belül szeretné megvalósítani ezeket a funkciókat, térjen vissza az adatszerkesztési, beszúrási és törlési oktatóanyagokhoz, kezdve a beszúrás, a frissítés és a törlés áttekintésével.

1. lépés: INSERT, UPDATE és DELETE utasítások megadása

Ahogy az előző két oktatóanyagban láttuk, az adatok SqlDataSource-vezérlőből való lekéréséhez két tulajdonságot kell beállítanunk:

  1. ConnectionString, amely meghatározza, hogy melyik adatbázisba küldje a lekérdezést, és
  2. SelectCommand, amely megadja az alkalmi SQL-utasítást vagy a tárolt eljárás nevét az eredmények visszaadásához.

Paraméterekkel rendelkező értékek esetén SelectCommand a paraméterértékek az SqlDataSource SelectParameters gyűjteményén keresztül vannak megadva, és tartalmazhatnak rögzített értékeket, gyakori paraméterforrás-értékeket (lekérdezési mezőket, munkamenet-változókat, webvezérlő értékeket stb.), vagy programozott módon hozzárendelhetők. Amikor az SqlDataSource vezérlő Select() metódusát programozott módon vagy automatikusan meghívja egy adat-webvezérlőből, létrejön egy kapcsolat az adatbázissal, a paraméterértékek hozzá lesznek rendelve a lekérdezéshez, és a parancs ki lesz kapcsolva az adatbázisba. A rendszer ezután a vezérlő DataSourceMode tulajdonságának értékétől függően adatkészletként vagy DataReaderként adja vissza az eredményeket.

Az adatok kiválasztása mellett az SqlDataSource vezérlő használható adatok beszúrására, frissítésére és törlésére is, ha INSERT, UPDATE, és DELETE SQL utasításokat ad meg ugyanolyan módon. Egyszerűen rendelje hozzá a InsertCommand, UpdateCommand és DeleteCommand tulajdonságokat a végrehajtandó INSERT, UPDATE és DELETE SQL utasításokhoz. Ha az utasítások paraméterekkel rendelkeznek (ahogy a legtöbb esetben is), vegye fel őket a InsertParameters, UpdateParameters és DeleteParameters gyűjteményekbe.

Miután megadtak egy InsertCommand, UpdateCommand vagy DeleteCommand értéket, elérhetővé válik a "Beszúrás engedélyezése", "Szerkesztés engedélyezése" vagy "Törlés engedélyezése" opció a megfelelő adat-webvezérlő intelligens címkéjében. Ennek szemléltetéséhez vegyünk egy példát az Querying.aspx oldalon, amelyet a Adatok lekérdezése az SqlDataSource vezérlővel című oktatóanyagban hoztunk létre, és egészítsük ki a törlési képességek hozzáadásával.

Először nyissa meg a InsertUpdateDelete.aspx és Querying.aspx oldalakat a SqlDataSource mappából. Az Querying.aspx oldalon található Tervezőben válassza ki az SqlDataSource-t és a GridView-t az első példában található ProductsDataSource és GridView1 vezérlők közül. Miután kiválasztotta a két vezérlőt, lépjen a Szerkesztés menübe, és válassza a Másolás lehetőséget (vagy nyomja le a Ctrl+C billentyűkombinációt). Ezután lépjen a Tervező elemre InsertUpdateDelete.aspx , és illessze be a vezérlőket. Miután áthelyezte a két vezérlőt InsertUpdateDelete.aspx, tesztelje az oldalt egy böngészőben. Látnia kell az ProductID, ProductName és UnitPrice oszlopok értékeit az Products adatbázistábla összes rekordjánál.

Az összes termék listázva van, termékazonosító szerint rendezve

1. ábra: Az összes termék szerepel a listában, rendezve ProductID (Kattintson ide a teljes méretű kép megtekintéséhez)

Az SqlDataSource DeleteCommand és DeleteParameters tulajdonságainak hozzáadása

Ezen a ponton van egy SqlDataSource, amely egyszerűen visszaadja az összes rekordot a Products táblából, és egy GridView-t, amely megjeleníti ezeket az adatokat. Célunk, hogy kibővítsük ezt a példát, hogy lehetővé tegyük a felhasználó számára a termékek törlését a GridView-on keresztül. Ehhez meg kell adnunk az SqlDataSource vezérlőinek DeleteCommand és DeleteParameters tulajdonságainak értékeit, majd konfigurálnunk kell a GridView-t a törlés támogatására.

A DeleteCommand és DeleteParameters tulajdonságok számos módon megadhatók:

  • A deklaratív szintaxison keresztül
  • A Tervező Tulajdonságok ablakából
  • Az Adatforrás konfigurálása varázsló egyéni SQL-utasításának vagy tárolt eljárásának megadása képernyőről
  • Az Adatforrás konfigurálása varázslóban az Oszlopok megadása nézetképernyőjének Adattábla oszlopainak megadása gombra kattintva, automatikusan létrehozza az SQL-utasítást és paramétergyűjteményt, melyet a DELETE és DeleteCommand tulajdonságok, valamint a DeleteParameters használ.

Meg fogjuk vizsgálni, hogyan lehet az utasítást automatikusan létrehozni a DELETE 2. lépésben. Egyelőre használjuk a Tervező Tulajdonságok ablakát, bár az Adatforrás konfigurálása varázsló vagy a deklaratív szintaxis is ugyanúgy működik.

A Tervezőben kattintson az SqlDataSource-ra InsertUpdateDelete.aspx, majd nyissa meg a Tulajdonságok ablakát ProductsDataSource (a Nézet menüben válassza a Tulajdonságok ablakot, vagy egyszerűen nyomja le az F4 billentyűt). Válassza ki a DeleteQuery tulajdonságot, amely három pontot hoz létre.

Képernyőkép a ProductsDataSource Properties ablakról, amelyen a DeleteQuery tulajdonság van kiválasztva.

2. ábra: Válassza ki a DeleteQuery tulajdonságot a Tulajdonságok ablakból

Megjegyzés:

Az SqlDataSource-nak nincs DeleteQuery tulajdonsága. Ehelyett a DeleteQuery a DeleteCommand és DeleteParameters tulajdonságok kombinációja, és csak a Tulajdonságok ablakban szerepel, amikor az ablakot a Tervezőn keresztül tekinti meg. Ha a Forrás nézetben nézi a Tulajdonságok ablakot, akkor helyette a DeleteCommand tulajdonságot fogja megtalálni.

Kattintson a DeleteQuery tulajdonság három pontjára a Parancs- és paraméterszerkesztő párbeszédpanel megnyitásához (lásd a 3. ábrát). Ezen a párbeszédpanelen megadhatja az DELETE SQL-utasítást, és megadhatja a paramétereket. Írja be a következő lekérdezést a DELETE parancs szövegmezőbe (manuálisan vagy a Lekérdezésszerkesztő használatával, ha szeretné):

DELETE FROM Products
WHERE ProductID = @ProductID

Ezután a Paraméterek frissítése gombra kattintva adja hozzá a @ProductID paramétert az alábbi paraméterek listájához.

Képernyőkép a Parancs- és paraméterszerkesztő ablakról, amelyen a <span class= @ProductID paraméter szerepel a DELETE parancsparaméterek listájában." />

3. ábra: Válassza ki a DeleteQuery tulajdonságot a Tulajdonságok ablakból (kattintson ide a teljes méretű kép megtekintéséhez)

Ne adjon meg értéket ehhez a paraméterhez (hagyja meg a paraméter forrását a Nincs értéknél). Miután hozzáadtuk a törlési funkció támogatását a GridView-ban, a GridView automatikusan megadja ezt a paraméterértéket annak a sornak az DataKeys értékével, amelynek Törlés gombjára kattintottak.

Megjegyzés:

A lekérdezésben DELETE használt paraméternévnek meg kell egyeznie a GridView, a DetailsView vagy a DataKeyNames FormView értékének nevével. Ez azt jelenti, hogy az DELETE utasítás paramétere szándékosan van elnevezve @ProductID (nem mondjuk), @IDmert a Termékek tábla elsődleges kulcsoszlopának neve (és ezért a DataKeyNames értéke a GridView-ban) az ProductID.

Ha a paraméter neve és DataKeyNames értéke nem egyezik meg, a GridView nem tudja automatikusan hozzárendelni a paramétert a DataKeys gyűjteményből.

Miután beírta a törléssel kapcsolatos adatokat a Parancs- és paraméterszerkesztő párbeszédpanelre, kattintson az OK gombra, és lépjen a Forrás nézetre az eredményül kapott deklaratív korrektúra vizsgálatához:

<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>

Vegye figyelembe a DeleteCommand tulajdonság, a <DeleteParameters> szakasz és a productID nevű Paraméter objektum hozzáadását.

A GridView törléshez való konfigurálása

DeleteCommand A tulajdonság hozzáadásával a GridView intelligens címkéje most már tartalmazza az Enable Deleting (Törlés engedélyezése) lehetőséget. Jelölje be ezt a jelölőnégyzetet. A beszúrás, frissítés és törlés áttekintésében leírtaknak megfelelően a GridView hozzáad egy CommandFieldet, amelynek tulajdonsága ShowDeleteButton a következőre van állítva True. Ahogy a 4. ábra mutatja, a böngészőben a lap megnyitásakor megjelenik a Törlés gomb. Tesztelje ezt a lapot néhány termék törlésével.

Minden GridView-sor tartalmaz egy Törlés gombot

4. ábra: Minden GridView sor tartalmaz egy Törlés gombot (ide kattintva megtekintheti a teljes méretű képet)

A Törlés gombra való kattintáskor egy bejegyzési visszaküldés történik, a GridView hozzárendeli a ProductID paraméterértékét annak a sornak a DataKeys gyűjteményértékhez, amelynek Törlés gombjára kattintottak, és meghívja az SqlDataSource Delete() metódusát. Az SqlDataSource vezérlő ezután csatlakozik az adatbázishoz, és végrehajtja az utasítást DELETE . A GridView ezután újrakonfigurálja az SqlDataSource-t, visszaküldi és megjeleníti az aktuális termékkészletet (amely már nem tartalmazza az imént törölt rekordot).

Megjegyzés:

Mivel a GridView a gyűjteményével DataKeys tölti ki az SqlDataSource-paramétereket, elengedhetetlen, hogy a GridView tulajdonsága DataKeyNames az elsődleges kulcsot alkotó oszlop(ok)ra legyen állítva, és hogy az SqlDataSource SelectCommand ezeket az oszlopokat adja vissza. Emellett fontos, hogy az SqlDataSource s DeleteCommand paraméterneve a következőre @ProductIDlegyen állítva: . Ha a DataKeyNames tulajdonság nincs beállítva, vagy a paraméter neve nincs elnevezve @ProductsID, a Törlés gombra kattintva visszavételt fog eredményezni, de valójában nem töröl semmilyen rekordot.

Az 5. ábra grafikusan ábrázolja ezt az interakciót. A Beszúrásával, frissítésével és törlésével kapcsolatos események vizsgálata című oktatóanyagban található részletes ismertetés ad bővebb tájékoztatást az adatos webvezérlők esetén előforduló eseményláncokról.

Az SqlDataSource Törlés() metódus meghívása a GridView Törlés gombjára kattintva

5. ábra: A Törlés gombra kattintva a GridView meghívja az SqlDataSource metódust Delete()

2. lépés: Az INSERT, UPDATE, és DELETE utasítások automatikus létrehozása

Az 1. lépésben a INSERT, UPDATE és DELETE SQL-utasítások megadhatók a Tulajdonság ablakon vagy a vezérlő deklaratív szintaxisán keresztül. Ehhez a megközelítéshez azonban manuálisan kell kiírnunk az SQL-utasításokat, ami monoton és hibalehetőséget jelenthet. Szerencsére az Adatforrás konfigurálása varázsló lehetőséget nyújt arra, hogy a INSERT, UPDATE és DELETE utasítások automatikusan generálódjanak, amikor a nézetképernyő táblájának oszlopait adjuk meg.

Vizsgáljuk meg ezt az automatikus létrehozási lehetőséget. Adjon hozzá egy DetailsView nézetet a Tervezőhöz InsertUpdateDelete.aspx és állítsa be a ID tulajdonságát ManageProducts-ra/ré. Ezután a DetailsView intelligens címkéje alapján válasszon egy új adatforrást, és hozzon létre egy SqlDataSource nevű ManageProductsDataSourcenevet.

Hozzon létre egy új SqlDataSource-ot, a neve legyen ManageProductsDataSource

6. ábra: Új SqlDataSource névvel ellátott ManageProductsDataSource létrehozása (kattintson ide a teljes méretű kép megtekintéséhez)

Az Adatforrás konfigurálása varázslóban válassza a NORTHWINDConnectionString kapcsolati sztring használatát, és kattintson a Tovább gombra. A Select utasítás konfigurálása képernyőn hagyja kijelölve az "Oszlopok megadása táblából vagy nézetből" választógombot, és válassza ki a Products táblát a legördülő listából. Jelölje ki a ProductID, ProductName, UnitPrice és Discontinued oszlopokat a jelölőnégyzetlistából.

A Termékek tábla használatával adja vissza a ProductID, a ProductName, a UnitPrice és a Megszűnt oszlopokat

7. ábra: A táblázat használatával adja vissza a ProductsProductID, ProductName, UnitPriceés Discontinued oszlopokat (kattintson ide a teljes méretű kép megtekintéséhez)

Ha a kijelölt táblázat és oszlopok alapján szeretne automatikusan létrehozni INSERT, UPDATEés DELETE utasításokat, kattintson a Speciális gombra, és jelölje be a Létrehozás INSERT, UPDATEés DELETE az utasítások jelölőnégyzetet.

Jelölje be az INSERT, UPDATE és DELETE utasítás létrehozása jelölőnégyzetet

8. ábra: Jelölje be a Generálás INSERT, UPDATE, és DELETE utasítások jelölőnégyzetét

A INSERT, UPDATE és DELETE utasításokat generáló jelölőnégyzet csak akkor lesz bejelölhető, ha a kijelölt tábla rendelkezik elsődleges kulccsal, és az elsődleges kulcs oszlopa (vagy oszlopai) szerepelnek a visszakapott oszlopok listájában. Az "Optimista egyidejűség használata" jelölőnégyzet, amely akkor válik elérhetővé, amikor a "Létrehoz INSERT, UPDATE és DELETE utasítások" jelölőnégyzet be van jelölve, kibővíti az WHERE záradékokat az eredményül kapott UPDATE és DELETE utasításokban az optimista egyidejűség-vezérlés biztosítása érdekében. Egyelőre hagyja üresen ezt a jelölőnégyzetet; a következő oktatóanyagban az SqlDataSource vezérlővel való optimista egyidejűséget vizsgáljuk meg.

A Generálás INSERT, UPDATE, és DELETE utasítások jelölőnégyzetének bejelölése után kattintson az OK gombra az Kijelölés Utasítás képernyőre való visszatéréshez, majd kattintson a Tovább, és utána a Befejezés gombra az Adatforrás varázsló befejezéséhez. A varázsló befejezése után a Visual Studio hozzáadja a BoundFields elemet a DetailsView elemhez a ProductID, ProductNameés UnitPrice az oszlopokhoz, valamint egy jelölőnégyzetmezőt az Discontinued oszlophoz. A DetailsView gyorsmenüjében jelölje be a Lapozás engedélyezése opciót, hogy az oldalt látogató felhasználó végigléphessen a termékeken. Törölje a DetailsView-k Width és Height -tulajdonságok törlését is.

Figyelje meg, hogy az intelligens címkén elérhető a Beszúrás engedélyezése, a Szerkesztés engedélyezése és a Törlés engedélyezése lehetőség. Ennek az az oka, hogy az SqlDataSource a következő deklaratív szintaxis szerint tartalmaz értékeket InsertCommand, UpdateCommand, és DeleteCommand számára:

<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>

Figyelje meg, hogy az SqlDataSource-vezérlőn automatikusan beállított értékek vannak beállítva annak InsertCommand, UpdateCommandés DeleteCommand tulajdonságaihoz. A InsertCommand és UpdateCommand tulajdonságokban hivatkozott oszlopok az SELECT utasításban szereplő oszlopokon alapulnak. Vagyis ahelyett, hogy minden Termék oszlop szerepelne az InsertCommand és UpdateCommand, csak azok az oszlopok vannak megadva a SelectCommand-ban, kivéve az ProductID-et, amely ki van hagyva, mert ez egy olyan IDENTITY oszlop, amelynek értéke szerkesztéskor nem módosítható, és amely a beszúráskor automatikusan hozzá van rendelve. Ezenkívül a InsertCommand, UpdateCommand és DeleteCommand tulajdonságok minden paraméteréhez tartoznak megfelelő paraméterek a InsertParameters, UpdateParameters és DeleteParameters gyűjteményekben.

A DetailsView adatmódosítási funkcióinak bekapcsolásához ellenőrizze a Beszúrás engedélyezése, a Szerkesztés engedélyezése és a Törlés engedélyezése lehetőséget az intelligens címkéjén. Ez hozzáad egy CommandFieldet, amelynek ShowInsertButton, ShowEditButton és ShowDeleteButton tulajdonságai True-ra vannak állítva.

Nyissa meg a lapot egy böngészőben, és jegyezze fel a DetailsView szerkesztési, törlési és új gombjait. A Szerkesztés gombra kattintva a DetailsView szerkesztési módba vált, amely szövegmezőként jeleníti meg minden BoundFieldet, amelynek ReadOnly tulajdonsága False (alapértelmezett) értékre van állítva, és jelölőnégyzetként a CheckBoxFieldet.

A DetailsView alapértelmezett szerkesztőfelülete

9. ábra: A DetailsView alapértelmezett szerkesztőfelülete (ide kattintva megtekintheti a teljes méretű képet)

Hasonlóképpen törölheti az aktuálisan kiválasztott terméket, vagy hozzáadhat egy új terméket a rendszerhez. Mivel az InsertCommand utasítás csak az ProductName, UnitPrice, és Discontinued oszlopokkal működik, a többi oszlop beszúráskor vagy NULL, vagy az adatbázis által hozzárendelt alapértelmezett értékkel rendelkezik. Az ObjectDataSource-hoz hasonlóan, ha az InsertCommand adatbázistábla olyan oszlopai hiányoznak, amelyek nem engedélyezik NULL az s értéket, és nem rendelkeznek alapértelmezett értékkel, az utasítás végrehajtásakor INSERT SQL-hiba lép fel.

Megjegyzés:

A DetailsView beszúrási és szerkesztési felületei nem rendelkeznek semmilyen testreszabással vagy ellenőrzéssel. Érvényesítési vezérlők hozzáadásához vagy az interfészek testreszabásához a BoundFieldst sablonmezőkké kell konvertálnia. További információért tekintse meg az Érvényesítési vezérlők hozzáadása a szerkesztő- és beszúrási felületekhez , valamint az Adatmódosítási felület testreszabása oktatóanyagokat.

Ne feledje azt is, hogy a frissítéshez és törléshez a DetailsView az aktuális termék értékét DataKey használja, amely csak akkor jelenik meg, ha a DataKeyNames tulajdonság konfigurálva van. Ha úgy tűnik, hogy a szerkesztésnek vagy törlésnek nincs hatása, győződjön meg arról, hogy a DataKeyNames tulajdonság be van állítva.

Az SQL-utasítások automatikus generálásának korlátozásai

Mivel a INSERT, UPDATE és DELETE létrehozási utasítások lehetősége csak akkor érhető el, ha oszlopokat választ ki egy táblából, az összetettebb lekérdezésekhez saját INSERT, UPDATE és DELETE utasításokat kell írnia, ahogyan az első lépésben tettük. Az SQL-utasítások SELECT gyakran s használatával JOIN hoznak vissza adatokat egy vagy több keresési táblából megjelenítési célokra (például a termékinformációk megjelenítésekor visszahozzák a Categories tábla s CategoryName mezőjét). Ugyanakkor lehetővé szeretnénk tenni, hogy a felhasználó szerkessze, frissítse vagy beszúrja az adatokat az alaptáblába (Productsebben az esetben).

Bár a , INSERTés UPDATE az DELETEutasítások manuálisan is megadhatóak, vegye figyelembe az alábbi időtakarékos tippet. Először állítsa be az SqlDataSource-t, hogy csak a táblából kérje vissza az Products adatokat. Használja az Adatforrás konfigurálása varázslót az oszlopok megadásához egy táblázatból vagy nézetképernyőről, hogy automatikusan létrehozhassa a INSERT, UPDATE, és DELETE utasításokat. Ezután a varázsló befejezése után válassza a SelectQuery konfigurálását a Tulajdonságok ablakban (vagy másik lehetőségként lépjen vissza az Adatforrás konfigurálása varázslóhoz, de használja az Egyéni SQL-utasítás vagy a tárolt eljárás megadása lehetőséget). Ezután frissítse az utasítást SELECT úgy, hogy tartalmazza a szintaxist JOIN . Ez a technika időmegtakarítást kínál az automatikusan létrehozott SQL-utasítások révén, és lehetővé teszi a testreszabottabb SELECT utasítást.

Egy másik korlátozása a INSERT, UPDATE, és DELETE utasítások automatikus generálásának, hogy a INSERT és a UPDATE utasítások oszlopai az SELECT utasítás által visszaküldött oszlopokon alapulnak. Előfordulhat azonban, hogy több vagy kevesebb mezőt kell frissítenünk vagy beszúrnunk. A 2. lépésben például azt szeretnénk, hogy a UnitPrice BoundField csak olvasható legyen. Ebben az esetben nem jelenik meg a UpdateCommand. Vagy olyan táblamező értékét is meg szeretnénk adni, amely nem jelenik meg a GridView-ban. Ha például új rekordot ad hozzá, előfordulhat, hogy todo értékre szeretné állítani az QuantityPerUnit értéket.

Ha ilyen testreszabásra van szükség, manuálisan kell elvégeznie őket a Tulajdonságok ablakban, az Egyéni SQL-utasítás vagy tárolt eljárás megadásával a varázslóban, vagy a deklaratív szintaxis használatával.

Megjegyzés:

Ha olyan paramétereket ad hozzá, amelyek nem rendelkeznek megfelelő mezőkkel az adat webes vezérlőjében, vegye figyelembe, hogy ezeket a paramétereket valamilyen módon kell hozzárendelni. Ezek az értékek lehetnek: közvetlenül az InsertCommand vagy UpdateCommand fájlban kódoltak; származhatnak egy előre definiált forrásból (például lekérdezési karakterláncból, munkamenetállapotból, a lapon található webes vezérlőkből stb.); vagy programozott módon rendelhetők hozzá, ahogyan az előző oktatóanyagban láttuk.

Összefoglalás

Ahhoz, hogy az adat-webvezérlők kihasználhassák a beépített beszúrási, szerkesztési és törlési képességeiket, az adatforrás-vezérlőnek ilyen funkciókat kell nyújtania. Az SqlDataSource esetében ez azt jelenti, hogy INSERTa , UPDATEés DELETE az SQL-utasításokat hozzá kell rendelni a , InsertCommandés UpdateCommand a DeleteCommandtulajdonságokhoz. Ezek a tulajdonságok és a megfelelő paramétergyűjtemények manuálisan is hozzáadhatók, vagy automatikusan létrehozhatók az Adatforrás konfigurálása varázslóval. Ebben az oktatóanyagban mindkét technikát megvizsgáltuk.

Optimista egyidejűséget vizsgáltunk az ObjectDataSource-nal az Optimista egyidejűség megvalósítása oktatóanyagban. Az SqlDataSource vezérlő optimista egyidejűségi támogatást is biztosít. A 2. lépésben leírtak szerint, amikor a INSERT, UPDATE és DELETE utasításokat automatikusan generálja, a varázsló egy "Optimista egyidejűség használata" lehetőséget kínál. Ahogy a következő oktatóanyagban látni fogjuk, az SqlDataSource optimista egyidejűség használata módosítja a WHERE záradékokat a UPDATE és DELETE utasításokban annak érdekében, hogy a többi oszlop értékei ne változtak, mióta az adatok legutóbb megjelentek az oldalon.

Boldog programozást!

Tudnivalók a szerzőről

Scott Mitchell, hét ASP/ASP.NET-könyv szerzője és a 4GuysFromRolla.com alapítója, 1998 óta dolgozik a Microsoft webtechnológiáival. Scott független tanácsadóként, edzőként és íróként dolgozik. Legújabb könyve Sams Teach Yourself ASP.NET 2.0 24 óra alatt. Itt érhető el mitchell@4GuysFromRolla.com.