Freigeben über


Einfügen, Aktualisieren und Löschen von Daten mit dem SqlDataSource-Steuerelement (C#)

von Scott Mitchell

PDF herunterladen

In den vorherigen Tutorials haben wir gelernt, wie das ObjectDataSource-Steuerelement das Einfügen, Aktualisieren und Löschen von Daten erlaubt. Das SqlDataSource-Steuerelement unterstützt dieselben Vorgänge, aber der Ansatz ist anders, und in diesem Tutorial wird gezeigt, wie Die SqlDataSource zum Einfügen, Aktualisieren und Löschen von Daten konfiguriert wird.

Einführung

Wie in An Overview of Inserting, Updating, and Deleting beschrieben, bietet das GridView-Steuerelement integrierte Aktualisierungs- und Löschfunktionen, während die Steuerelemente DetailsView und FormView die Einfügeunterstützung zusammen mit Bearbeitungs- und Löschfunktionen enthalten. Diese Datenänderungsfunktionen können direkt an ein Datenquellensteuerelement angeschlossen werden, ohne dass eine Codezeile geschrieben werden muss. Eine Übersicht über das Einfügen, Aktualisieren und Löschen wurde mithilfe der ObjectDataSource untersucht, um das Einfügen, Aktualisieren und Löschen mit den GridView-, DetailsView- und FormView-Steuerelementen zu erleichtern. Alternativ kann die SqlDataSource anstelle von ObjectDataSource verwendet werden.

Zur Unterstützung des Einfügens, Aktualisierens und Löschens mit objectDataSource mussten die Methoden der Objektebene angegeben werden, die aufgerufen werden sollen, um die Einfüge-, Aktualisierungs- oder Löschaktion auszuführen. Bei SqlDataSource müssen die SQL-Anweisungen , und DELETE (oder gespeicherte Prozeduren) für die Ausführung bereitgestellt INSERTUPDATEwerden. Wie wir in diesem Tutorial sehen werden, können diese Anweisungen manuell erstellt oder automatisch vom SqlDataSource-Assistenten zum Konfigurieren von Datenquellen generiert werden.

Hinweis

Da wir bereits die Funktionen zum Einfügen, Bearbeiten und Löschen der GridView-, DetailsView- und FormView-Steuerelemente erläutert haben, konzentriert sich dieses Tutorial auf die Konfiguration des SqlDataSource-Steuerelements zur Unterstützung dieser Vorgänge. Wenn Sie die Implementierung dieser Features in GridView, DetailsView und FormView auffrischen müssen, kehren Sie zu den Tutorials zum Bearbeiten, Einfügen und Löschen von Daten zurück, beginnend mit Einer Übersicht über Einfügen, Aktualisieren und Löschen.

Schritt 1: Angeben von INSERT-, UPDATE- und DELETE-Anweisungen

Wie wir in den letzten beiden Tutorials gesehen haben, müssen wir zwei Eigenschaften festlegen, um Daten aus einem SqlDataSource-Steuerelement abzurufen:

  1. ConnectionString, das angibt, an welche Datenbank die Abfrage gesendet werden soll, und
  2. SelectCommand, der die Ad-hoc-SQL-Anweisung oder den Namen der gespeicherten Prozedur angibt, die ausgeführt werden soll, um die Ergebnisse zurückzugeben.

Für SelectCommand Werte mit Parametern werden die Parameterwerte über die SqlDataSource-Auflistung SelectParameters angegeben und können hartcodierte Werte, allgemeine Parameterquellwerte (Abfragezeichenfolgenfelder, Sitzungsvariablen, Websteuerelementwerte usw.) enthalten oder programmgesteuert zugewiesen werden. Wenn die Methode des SqlDataSource-Steuerelements Select() entweder programmgesteuert oder automatisch über ein Datenwebsteuerelement aufgerufen wird, wird eine Verbindung mit der Datenbank hergestellt, die Parameterwerte werden der Abfrage zugewiesen, und der Befehl wird in die Datenbank übertragen. Die Ergebnisse werden dann je nach Wert der Eigenschaft s DataSourceMode des Steuerelements als DataSet oder DataReader zurückgegeben.

Neben der Auswahl von Daten kann das SqlDataSource-Steuerelement verwendet werden, um Daten einzufügen, zu aktualisieren und zu löschen, indem die SQL-Anweisungen INSERT, UPDATEund DELETE auf die gleiche Weise bereitgestellt werden. Weisen Sie einfach den InsertCommandEigenschaften , UpdateCommandund DeleteCommand die SQL-Anweisungen zuDELETE, UPDATEdie INSERTausgeführt werden sollen. Wenn die -Anweisungen Parameter aufweisen (wie dies am meisten immer der DerEins ist), schließen Sie sie in die InsertParametersAuflistungen , UpdateParametersund DeleteParameters ein.

Sobald ein InsertCommand- oder UpdateCommandDeleteCommand -Wert angegeben wurde, wird die Option Einfügen aktivieren, Bearbeitung aktivieren oder Löschen aktivieren im entsprechenden Smarttag des Datenwebsteuerelements verfügbar. Um dies zu veranschaulichen, nehmen wir ein Beispiel auf der Seite, die Querying.aspx wir im Tutorial Abfragen von Daten mit dem SqlDataSource-Steuerelement erstellt haben, und erweitern sie, um Löschfunktionen einzuschließen.

Öffnen Sie zunächst die InsertUpdateDelete.aspx Seiten und Querying.aspx aus dem SqlDataSource Ordner. Wählen Sie im Designer auf der Querying.aspx Seite die Optionen SqlDataSource und GridView aus dem ersten Beispiel aus (die ProductsDataSource Steuerelemente und GridView1 ). Nachdem Sie die beiden Steuerelemente ausgewählt haben, wechseln Sie zum Menü Bearbeiten, und wählen Sie Kopieren aus (oder drücken Sie einfach STRG+C). Wechseln Sie als Nächstes zum Designer vonInsertUpdateDelete.aspx, und fügen Sie die Steuerelemente ein. Nachdem Sie die beiden Steuerelemente nach InsertUpdateDelete.aspxverschoben haben, testen Sie die Seite in einem Browser. Die Werte der ProductIDSpalten , ProductNameund UnitPrice für alle Datensätze in der Products Datenbanktabelle sollten angezeigt werden.

Alle Produkte sind aufgelistet, sortiert nach ProductID

Abbildung 1: Alle Produkte sind aufgelistet, sortiert nach ProductID (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Hinzufügen der Eigenschaften DeleteCommand und DeleteParameters von SqlDataSource

An diesem Punkt verfügen wir über eine SqlDataSource, die einfach alle Datensätze aus der Products Tabelle zurückgibt, und eine GridView, die diese Daten rendert. Unser Ziel ist es, dieses Beispiel zu erweitern, damit der Benutzer Produkte über GridView löschen kann. Um dies zu erreichen, müssen wir Werte für die SqlDataSource-Steuerelemente DeleteCommand und DeleteParameters -Eigenschaften angeben und dann GridView so konfigurieren, dass das Löschen unterstützt wird.

Die DeleteCommand Eigenschaften und DeleteParameters können auf verschiedene Arten angegeben werden:

  • Über die deklarative Syntax
  • Aus dem Eigenschaftenfenster im Designer
  • Auf dem Bildschirm Benutzerdefinierte SQL-Anweisung oder gespeicherte Prozedur angeben im Assistenten zum Konfigurieren von Datenquellen
  • Über die Schaltfläche Erweitert im Bildschirm Spalten aus einer Ansichtstabelle angeben im Assistenten zum Konfigurieren von Datenquellen, der tatsächlich automatisch die SQL-Anweisung und die Parametersammlung generiert, die DELETE in den DeleteCommand Eigenschaften und DeleteParameters verwendet werden.

Wir untersuchen, wie die DELETE Anweisung in Schritt 2 automatisch erstellt wird. Vorerst verwenden wir die Eigenschaftenfenster im Designer, obwohl der Assistent zum Konfigurieren von Datenquellen oder die option der deklarative Syntax genauso gut funktionieren würde.

Klicken Sie im Designer in InsertUpdateDelete.aspxauf sqlDataSourceProductsDataSource, und rufen Sie dann die Eigenschaftenfenster auf (wählen Sie im Menü Ansicht die Option Eigenschaftenfenster aus, oder drücken Sie einfach F4). Wählen Sie die DeleteQuery-Eigenschaft aus, die eine Reihe von Auslassungspunkten anzeigt.

Screenshot: ProductsDataSource-Eigenschaftenfenster mit ausgewählter DeleteQuery-Eigenschaft

Abbildung 2: Auswählen der DeleteQuery-Eigenschaft im Eigenschaftenfenster

Hinweis

SqlDataSource verfügt nicht über eine DeleteQuery-Eigenschaft. Stattdessen ist DeleteQuery eine Kombination der DeleteCommand Eigenschaften und DeleteParameters und wird nur im Eigenschaftenfenster aufgeführt, wenn das Fenster über die Designer angezeigt wird. Wenn Sie sich die Eigenschaftenfenster in der Quellansicht ansehen, finden Sie stattdessen die DeleteCommand -Eigenschaft.

Klicken Sie auf die Auslassungspunkte in der DeleteQuery-Eigenschaft, um das Dialogfeld Befehl und Parameter Editor anzuzeigen (siehe Abbildung 3). In diesem Dialogfeld können Sie die SQL-Anweisung DELETE und die Parameter angeben. Geben Sie die folgende Abfrage in das DELETE Befehlstextfeld ein (entweder manuell oder mit dem Abfrage-Generator, falls gewünscht):

DELETE FROM Products
WHERE ProductID = @ProductID

Klicken Sie als Nächstes auf die Schaltfläche Parameter aktualisieren, um den @ProductID Parameter der folgenden Parameterliste hinzuzufügen.

Screenshot: Fenster @ProductID", der der Liste der DELETE-Befehlsparameter hinzugefügt wurde." />

Abbildung 3: Auswählen der DeleteQuery-Eigenschaft im Eigenschaftenfenster (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Geben Sie keinen Wert für diesen Parameter an (behalten Sie die Parameterquelle bei None bei). Nachdem wir der GridView Unterstützung für das Löschen hinzugefügt haben, gibt GridView automatisch diesen Parameterwert an, wobei der Wert seiner DataKeys Auflistung für die Zeile verwendet wird, auf deren Schaltfläche Löschen geklickt wurde.

Hinweis

Der in der DELETE Abfrage verwendete Parametername muss mit dem Namen des DataKeyNames Werts in GridView, DetailsView oder FormView übereinstimmen. Das heißt, der Parameter in der DELETE Anweisung wird absichtlich benannt @ProductID (anstelle von, @IDz. B. ), da der Name der Primärschlüsselspalte in der Tabelle Products (und daher der DataKeyNames-Wert in gridView) ist ProductID.

Wenn der Parametername und DataKeyNames der Wert nicht übereinstimmen, kann GridView dem Parameter nicht automatisch den Wert aus der DataKeys Auflistung zuweisen.

Klicken Sie nach der Eingabe der löschbezogenen Informationen in das Dialogfeld Befehl und Parameter Editor auf OK, und wechseln Sie zur Quellansicht, um das resultierende deklarative Markup zu untersuchen:

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

Beachten Sie das Hinzufügen der DeleteCommand -Eigenschaft sowie des Abschnitts <DeleteParameters> und des Parameter-Objekts mit dem Namen productID.

Konfigurieren der GridView für das Löschen

Nachdem die DeleteCommand -Eigenschaft hinzugefügt wurde, enthält das Smarttag von GridView jetzt die Option Löschen aktivieren. Aktivieren Sie dieses Kontrollkästchen. Wie in An Overview of Inserting, Updating, and Deleting erläutert, führt dies dazu, dass GridView ein CommandField-Element hinzufügt, dessen ShowDeleteButton -Eigenschaft auf truefestgelegt ist. Wie Abbildung 4 zeigt, wird beim Aufrufen der Seite über einen Browser die Schaltfläche Löschen eingeschlossen. Testen Sie diese Seite, indem Sie einige Produkte löschen.

Jede GridView-Zeile enthält jetzt eine Schaltfläche

Abbildung 4: Jede GridView-Zeile enthält jetzt eine Schaltfläche "Löschen" (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wenn Sie auf eine Schaltfläche Löschen klicken, erfolgt ein Postback. GridView weist dem Parameter den ProductID Wert des Auflistungswerts für die DataKeys Zeile zu, auf deren Schaltfläche Löschen geklickt wurde, und ruft die SqlDataSource-Methode auf Delete() . Das SqlDataSource-Steuerelement stellt dann eine Verbindung mit der Datenbank her und führt die DELETE Anweisung aus. Das GridView-Objekt wird dann erneut an die SqlDataSource gebunden, sodass der aktuelle Satz von Produkten (der den gerade gelöschten Datensatz nicht mehr enthält) zurück und angezeigt wird.

Hinweis

Da GridView seine DataKeys Auflistung verwendet, um die SqlDataSource-Parameter aufzufüllen, ist es wichtig, dass die GridView-Eigenschaft DataKeyNames auf die Spalten festgelegt wird, die den Primärschlüssel bilden, und dass sqlDataSource diese SelectCommand Spalten zurückgibt. Darüber hinaus ist es wichtig, dass der Parametername in den SqlDataSource-Instanzen DeleteCommand auf @ProductIDfestgelegt ist. Wenn die DataKeyNames Eigenschaft nicht festgelegt ist oder der Parameter nicht heißt @ProductsID, führt das Klicken auf die Schaltfläche Löschen zu einem Postback, löscht jedoch keinen Datensatz.

Abbildung 5 zeigt diese Interaktion grafisch. Eine ausführlichere Erläuterung der Ereigniskette im Zusammenhang mit dem Einfügen, Aktualisieren und Löschen aus einem Datenwebsteuerelement finden Sie im Tutorial Untersuchen der Ereignisse im Zusammenhang mit dem Einfügen, Aktualisieren und Löschen aus einem Datenwebsteuerelement.

Wenn Sie in GridView auf die Schaltfläche Löschen klicken, wird die Delete()-Methode von SqlDataSource aufgerufen.

Abbildung 5: Klicken auf die Schaltfläche "Löschen" in GridView ruft die SqlDataSource-Methode auf Delete() .

Schritt 2: Automatisches Generieren der INSERT-, UPDATE- und DELETE-Anweisungen

In Schritt 1 können sql-Anweisungen, INSERT, UPDATEund DELETE über die Eigenschaftenfenster oder die deklarative Syntax des Steuerelements angegeben werden. Dieser Ansatz erfordert jedoch, dass wir die SQL-Anweisungen manuell von Hand schreiben, was monoton und fehleranfällig sein kann. Glücklicherweise bietet der Assistent zum Konfigurieren von Datenquellen eine Option, mit der die INSERT-Anweisungen , UPDATEund DELETE automatisch generiert werden, wenn sie den Bildschirm Spalten aus einer Tabellenansicht angeben verwenden.

Sehen wir uns diese Automatische Generierungsoption an. Fügen Sie dem Designer in InsertUpdateDelete.aspx ein DetailsView-Element hinzu, und legen Sie dessen ID Eigenschaft auf festManageProducts. Wählen Sie als Nächstes im Smarttag DetailsView aus, um eine neue Datenquelle zu erstellen und eine SqlDataSource mit dem Namen ManageProductsDataSourcezu erstellen.

Erstellen einer neuen SqlDataSource mit dem Namen ManageProductsDataSource

Abbildung 6: Erstellen einer neuen SqlDataSource namens ManageProductsDataSource (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wählen Sie im Assistenten Datenquelle konfigurieren die NORTHWINDConnectionString Verbindungszeichenfolge aus, und klicken Sie auf Weiter. Lassen Sie auf dem Bildschirm Anweisung auswählen das Optionsfeld Spalten aus einer Tabelle oder Ansicht angeben ausgewählt, und wählen Sie die Products Tabelle aus der Dropdownliste aus. Wählen Sie die ProductIDSpalten , ProductName, UnitPriceund Discontinued aus der Kontrollkästchenliste aus.

Geben Sie mithilfe der Tabelle Products die Spalten ProductID, ProductName, UnitPrice und Discontinued zurück.

Abbildung 7: Verwenden der Products Tabelle, Zurückgeben der ProductIDSpalten , ProductName, UnitPriceund Discontinued (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Klicken Sie auf die Schaltfläche Erweitert, und DELETE aktivieren Sie das Kontrollkästchen Anweisungen generieren, und aktivieren Sie das Kontrollkästchen Anweisungen generierenUPDATEINSERT, und , und DELETE um die Anweisungen automatisch zu generierenINSERTUPDATE.

Aktivieren Sie das Kontrollkästchen INSERT-, UPDATE- und DELETE-Anweisungen generieren.

Abbildung 8: Aktivieren des Kontrollkästchens "Anweisungen generieren INSERT", UPDATE", " und DELETE "

Das Kontrollkästchen Anweisungen generierenINSERTUPDATE, , und DELETE kann nur aktiviert werden, wenn die ausgewählte Tabelle über einen Primärschlüssel verfügt und die Primärschlüsselspalte (oder Spalten) in der Liste der zurückgegebenen Spalten enthalten sind. Das Kontrollkästchen Optimistische Parallelität verwenden, das aktiviert wird, nachdem das Kontrollkästchen Anweisungen generieren INSERT, UPDATEund DELETE aktiviert wurde, erweitert die Klauseln in den WHERE resultierenden UPDATE Anweisungen und DELETE , um eine Steuerung der optimistischen Parallelität zu ermöglichen. Lassen Sie dieses Kontrollkästchen vorerst deaktiviert. Im nächsten Tutorial wird die optimistische Parallelität mit dem SqlDataSource-Steuerelement untersucht.

Nachdem Sie das Kontrollkästchen Anweisungen generierenINSERTUPDATE, , und DELETE aktiviert haben, klicken Sie auf OK, um zum Bildschirm Anweisung konfigurieren zurückzukehren, und klicken Sie dann auf Weiter und dann auf Fertig stellen, um den Assistenten Datenquellen konfigurieren abzuschließen. Nach Abschluss des Assistenten fügt Visual Studio boundFields der DetailsView für die ProductIDSpalten , ProductNameund und UnitPrice sowie ein CheckBoxField-Element für die Discontinued Spalte hinzu. Aktivieren Sie im Smarttag von DetailsView die Option Paging aktivieren, damit der Benutzer, der diese Seite besucht, die Produkte durchlaufen kann. Löschen Sie außerdem die DetailsView-Eigenschaften Width und Height -Eigenschaften.

Beachten Sie, dass für das Smarttag die Optionen Einfügen aktivieren, Bearbeitung aktivieren und Löschen aktivieren verfügbar sind. Dies liegt daran, dass sqlDataSource Werte für , InsertCommandUpdateCommandund DeleteCommandenthält, wie die folgende deklarative Syntax zeigt:

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

Beachten Sie, dass für das SqlDataSource-Steuerelement automatisch Werte für seine InsertCommandEigenschaften , UpdateCommandund DeleteCommand festgelegt wurden. Die Spalten, auf die in den InsertCommand Eigenschaften und UpdateCommand verwiesen wird, basieren auf den Spalten in der SELECT -Anweisung. Das heißt, es gibt nicht jede Products-Spalte in und UpdateCommand, sondern nur die Spalten, die InsertCommandSelectCommand in angegeben sind (weniger ProductID, was weggelassen wird, weil es sich um eine IDENTITY Spalte handelt, deren Wert bei der Bearbeitung nicht geändert werden kann und die beim Einfügen automatisch zugewiesen wird). Darüber hinaus gibt es für jeden Parameter in den InsertCommandEigenschaften , UpdateCommandund DeleteCommand entsprechende Parameter in den InsertParametersAuflistungen , UpdateParametersund DeleteParameters .

Um die Datenänderungsfeatures von DetailsView zu aktivieren, aktivieren Sie die Optionen Einfügen aktivieren, Bearbeiten aktivieren und Löschen aktivieren im Smarttag. Dadurch wird ein CommandField hinzugefügt, dessen ShowInsertButtonEigenschaften , ShowEditButtonund ShowDeleteButton auf truefestgelegt sind.

Besuchen Sie die Seite in einem Browser, und notieren Sie sich die Schaltflächen Bearbeiten, Löschen und Neu, die in der Detailansicht enthalten sind. Durch Klicken auf die Schaltfläche Bearbeiten wird die DetailsView in den Bearbeitungsmodus versetzt, in dem jedes BoundField angezeigt wird, dessen ReadOnly Eigenschaft auf false (standard) als TextBox festgelegt ist, und das CheckBoxField als Kontrollkästchen.

Die Standardmäßige Bearbeitungsschnittstelle von DetailsView

Abbildung 9: Die Standardbearbeitungsschnittstelle für DetailsView (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Ebenso können Sie das aktuell ausgewählte Produkt löschen oder dem System ein neues Produkt hinzufügen. Da die InsertCommand -Anweisung nur mit den ProductNameSpalten , UnitPriceund Discontinued funktioniert, verfügen die anderen Spalten entweder NULL über oder ihren Standardwert, der von der Datenbank beim Einfügen zugewiesen wird. Wenn datenbanktabellenspalten fehlen, InsertCommand die s nicht zulassen NULL und keinen Standardwert haben, tritt wie bei ObjectDataSource ein SQL-Fehler auf, wenn versucht wird, die INSERT Anweisung auszuführen.

Hinweis

Den Einfüge- und Bearbeitungsschnittstellen von DetailsView fehlt jede Art von Anpassung oder Validierung. Um Validierungssteuerelemente hinzuzufügen oder die Schnittstellen anzupassen, müssen Sie boundFields in TemplateFields konvertieren. Weitere Informationen finden Sie in den Tutorials Hinzufügen von Validierungssteuerelementen zu den Bearbeitungs- und Einfügeschnittstellen und Anpassen der Datenänderungsschnittstelle .

Beachten Sie außerdem, dass DetailsView zum Aktualisieren und Löschen den aktuellen Wert des Produkts verwendet DataKey , der nur vorhanden ist, wenn die DataKeyNames Eigenschaft konfiguriert ist. Wenn das Bearbeiten oder Löschen keine Auswirkung hat, stellen Sie sicher, dass die DataKeyNames -Eigenschaft festgelegt ist.

Einschränkungen der automatischen Generierung von SQL-Anweisungen

Da die Option Anweisungen generierenINSERT, , und DELETE nur beim Auswählen von Spalten aus einer Tabelle verfügbar ist, müssen Sie für komplexere Abfragen eigene INSERTAnweisungen, UPDATE, und DELETE schreiben, wie UPDATEin Schritt 1. In der Regel verwenden SQL-Anweisungen SELECT s, um Daten aus einer oder mehreren Nachschlagetabellen zu Anzeigezwecken zurückzubringen (z. B. das Zurücksetzen des Tabellenfelds CategoryName beim Anzeigen von Categories Produktinformationen).JOIN Gleichzeitig können wir dem Benutzer das Bearbeiten, Aktualisieren oder Einfügen von Daten in die Kerntabelle ermöglichen (Productsin diesem Fall).

Während die INSERTAnweisungen , UPDATEund DELETE manuell eingegeben werden können, sollten Sie den folgenden zeitsparenden Tipp berücksichtigen. Richten Sie sqlDataSource zunächst so ein, dass Daten nur aus der Products Tabelle abgerufen werden. Verwenden Sie den Assistenten Zum Konfigurieren von Datenquellen den Bildschirm Spalten aus einer Tabelle oder Ansicht angeben, damit Sie die INSERTAnweisungen , UPDATEund DELETE automatisch generieren können. Nachdem Sie den Assistenten abgeschlossen haben, können Sie selectQuery aus dem Eigenschaftenfenster konfigurieren (oder wechseln Sie alternativ zum Assistenten Zum Konfigurieren von Datenquellen, aber verwenden Sie die Option Benutzerdefinierte SQL-Anweisung oder gespeicherte Prozedur angeben). Aktualisieren Sie dann die SELECT -Anweisung, um die Syntax einzuschließen JOIN . Diese Technik bietet die zeitsparenden Vorteile der automatisch generierten SQL-Anweisungen und ermöglicht eine besser angepasste SELECT Anweisung.

Eine weitere Einschränkung beim automatischen Generieren der INSERTAnweisungen , UPDATEund DELETE besteht darin, dass die Spalten in den INSERT - und UPDATE -Anweisungen auf den Spalten basieren, die von der SELECT -Anweisung zurückgegeben werden. Es kann jedoch erforderlich sein, mehr oder weniger Felder zu aktualisieren oder einzufügen. Im Beispiel aus Schritt 2 soll UnitPrice das BoundField beispielsweise schreibgeschützt sein. In diesem Fall sollte sie nicht im UpdateCommandangezeigt werden. Oder wir möchten den Wert eines Tabellenfelds festlegen, das nicht in gridView angezeigt wird. Wenn Sie beispielsweise einen neuen Datensatz hinzufügen, möchten wir möglicherweise, dass der QuantityPerUnit Wert auf TODO festgelegt ist.

Wenn solche Anpassungen erforderlich sind, müssen Sie sie manuell vornehmen, entweder über die Eigenschaftenfenster, die Option Benutzerdefinierte SQL-Anweisung oder gespeicherte Prozedur angeben im Assistenten oder über die deklarative Syntax.

Hinweis

Beachten Sie beim Hinzufügen von Parametern, die keine entsprechenden Felder im Datenwebsteuerelement enthalten, dass diesen Parameterwerten in irgendeiner Weise Werte zugewiesen werden müssen. Diese Werte können sein: hartcodiert direkt im InsertCommand oder UpdateCommand; können aus einer vordefinierten Quelle stammen (Abfragezeichenfolge, Sitzungszustand, Websteuerelemente auf der Seite usw.) oder programmgesteuert zugewiesen werden, wie im vorherigen Tutorial gezeigt.

Zusammenfassung

Damit die Datenwebsteuerelemente ihre integrierten Funktionen zum Einfügen, Bearbeiten und Löschen nutzen können, muss das Datenquellensteuerelement, an das sie gebunden sind, eine solche Funktionalität bieten. Für die SqlDataSource bedeutet dies, dass INSERTdie SQL-Anweisungen , UPDATEund DELETE den InsertCommandEigenschaften , UpdateCommandund DeleteCommand zugewiesen werden müssen. Diese Eigenschaften und die entsprechenden Parametersammlungen können manuell hinzugefügt oder automatisch über den Assistenten Datenquelle konfigurieren generiert werden. In diesem Tutorial haben wir beide Techniken untersucht.

Wir haben die Verwendung der optimistischen Parallelität mit objectDataSource im Tutorial Implementieren optimistischer Parallelität untersucht. Das SqlDataSource-Steuerelement bietet auch Unterstützung für optimistische Parallelität. Wie in Schritt 2 erwähnt, bietet der Assistent beim automatischen Generieren der INSERTAnweisungen , UPDATEund DELETE die Option Optimistische Parallelität verwenden. Wie wir im nächsten Tutorial sehen werden, ändert die Verwendung der optimistischen Parallelität mit SqlDataSource die WHERE -Klauseln in den UPDATE - und DELETE -Anweisungen, um sicherzustellen, dass sich die Werte für die anderen Spalten seit der letzten Anzeige der Daten auf der Seite nicht geändert haben.

Viel Spaß beim Programmieren!

Zum Autor

Scott Mitchell, Autor von sieben ASP/ASP.NET-Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.