Einfügen, Aktualisieren und Löschen von Daten mit dem SqlDataSource-Steuerelement (C#)
von Scott Mitchell
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 INSERT
UPDATE
werden. 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:
ConnectionString
, das angibt, an welche Datenbank die Abfrage gesendet werden soll, undSelectCommand
, 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
, UPDATE
und DELETE
auf die gleiche Weise bereitgestellt werden. Weisen Sie einfach den InsertCommand
Eigenschaften , UpdateCommand
und DeleteCommand
die SQL-Anweisungen zuDELETE
, UPDATE
die INSERT
ausgeführt werden sollen. Wenn die -Anweisungen Parameter aufweisen (wie dies am meisten immer der DerEins ist), schließen Sie sie in die InsertParameters
Auflistungen , UpdateParameters
und DeleteParameters
ein.
Sobald ein InsertCommand
- oder UpdateCommand
DeleteCommand
-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.aspx
verschoben haben, testen Sie die Seite in einem Browser. Die Werte der ProductID
Spalten , ProductName
und UnitPrice
für alle Datensätze in der Products
Datenbanktabelle sollten angezeigt werden.
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 denDeleteCommand
Eigenschaften undDeleteParameters
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.aspx
auf 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.
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.
@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, @ID
z. 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 true
festgelegt 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.
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 @ProductID
festgelegt 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.
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
, UPDATE
und 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 , UPDATE
und 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 ManageProductsDataSource
zu erstellen.
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 ProductID
Spalten , ProductName
, UnitPrice
und Discontinued
aus der Kontrollkästchenliste aus.
Abbildung 7: Verwenden der Products
Tabelle, Zurückgeben der ProductID
Spalten , ProductName
, UnitPrice
und 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 generierenUPDATE
INSERT
, und , und DELETE
um die Anweisungen automatisch zu generierenINSERT
UPDATE
.
Abbildung 8: Aktivieren des Kontrollkästchens "Anweisungen generieren INSERT
", UPDATE
", " und DELETE
"
Das Kontrollkästchen Anweisungen generierenINSERT
UPDATE
, , 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
, UPDATE
und 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 generierenINSERT
UPDATE
, , 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 ProductID
Spalten , ProductName
und 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 , InsertCommand
UpdateCommand
und DeleteCommand
enthä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 InsertCommand
Eigenschaften , UpdateCommand
und 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 InsertCommand
SelectCommand
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 InsertCommand
Eigenschaften , UpdateCommand
und DeleteCommand
entsprechende Parameter in den InsertParameters
Auflistungen , UpdateParameters
und 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 ShowInsertButton
Eigenschaften , ShowEditButton
und ShowDeleteButton
auf true
festgelegt 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.
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 ProductName
Spalten , UnitPrice
und 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 INSERT
Anweisungen, UPDATE
, und DELETE
schreiben, wie UPDATE
in 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 (Products
in diesem Fall).
Während die INSERT
Anweisungen , UPDATE
und 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 INSERT
Anweisungen , UPDATE
und 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 INSERT
Anweisungen , UPDATE
und 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 UpdateCommand
angezeigt 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 INSERT
die SQL-Anweisungen , UPDATE
und DELETE
den InsertCommand
Eigenschaften , UpdateCommand
und 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 INSERT
Anweisungen , UPDATE
und 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.