Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nelle esercitazioni precedenti è stato illustrato come il controllo ObjectDataSource ha consentito l'inserimento, l'aggiornamento e l'eliminazione dei dati. Il controllo SqlDataSource supporta le stesse operazioni, ma l'approccio è diverso e questa esercitazione illustra come configurare SqlDataSource per inserire, aggiornare ed eliminare dati.
Introduzione
Come illustrato in Una panoramica dell'inserimento, dell'aggiornamento e dell'eliminazione, il controllo GridView offre funzionalità predefinite di aggiornamento ed eliminazione, mentre i controlli DetailsView e FormView includono l'inserimento del supporto insieme alla funzionalità di modifica ed eliminazione. Queste funzionalità di modifica dei dati possono essere collegate direttamente a un controllo origine dati senza dover scrivere una riga di codice. Panoramica dell'inserimento, dell'aggiornamento e dell'eliminazione esaminati tramite ObjectDataSource per facilitare l'inserimento, l'aggiornamento e l'eliminazione con i controlli GridView, DetailsView e FormView. In alternativa, è possibile usare SqlDataSource al posto di ObjectDataSource.
Tenere presente che per supportare l'inserimento, l'aggiornamento e l'eliminazione, con ObjectDataSource è necessario specificare i metodi del livello oggetto da richiamare per eseguire l'azione di inserimento, aggiornamento o eliminazione. Con SqlDataSource, è necessario fornire istruzioni SQL INSERT
, UPDATE
e DELETE
(o stored procedure) da eseguire. Come illustrato in questa esercitazione, queste istruzioni possono essere create manualmente o possono essere generate automaticamente dalla procedura guidata Configura origine dati di SqlDataSource.
Annotazioni
Poiché sono già state illustrate le funzionalità di inserimento, modifica ed eliminazione dei controlli GridView, DetailsView e FormView, questa esercitazione si concentrerà sulla configurazione del controllo SqlDataSource per supportare queste operazioni. Se è necessario rivedere l'implementazione di queste funzionalità all'interno di GridView, DetailsView e FormView, tornate alle esercitazioni su Modifica, Inserimento ed Eliminazione di Dati, a partire da Una panoramica dell'inserimento, dell'aggiornamento e dell'eliminazione.
Passaggio 1: Specificare le istruzioni INSERT, UPDATE e DELETE
Come illustrato nelle due esercitazioni precedenti, per recuperare i dati da un controllo SqlDataSource è necessario impostare due proprietà:
-
ConnectionString
, che specifica il database a cui inviare la query e -
SelectCommand
, che specifica l'istruzione SQL ad hoc o il nome della stored procedure da eseguire per restituire i risultati.
Per i valori con parametri, i valori dei parametri vengono specificati tramite l'insieme SqlDataSource SelectCommand
e possono includere valori predefiniti, valori di origine dei parametri comuni (campi querystring, variabili di sessione, valori di controllo Web e così via) oppure possono essere assegnati programmaticamente. Quando viene richiamato il metodo s Select()
del controllo SqlDataSource a livello di codice o automaticamente da un controllo Web dati viene stabilita una connessione al database, i valori dei parametri vengono assegnati alla query e il comando viene distribuito al database. I risultati vengono quindi restituiti come DataSet o DataReader, a seconda del valore della proprietà del DataSourceMode
controllo.
Oltre a selezionare i dati, il controllo SqlDataSource può essere usato per inserire, aggiornare ed eliminare dati fornendo istruzioni SQL come INSERT
, UPDATE
e DELETE
in modo analogo. È sufficiente assegnare le proprietà InsertCommand
, UpdateCommand
e DeleteCommand
alle istruzioni SQL INSERT
, UPDATE
e DELETE
da eseguire. Se le istruzioni hanno parametri (come quasi sempre accade), includerli nelle raccolte InsertParameters
, UpdateParameters
e DeleteParameters
.
Dopo aver specificato un valore InsertCommand
, UpdateCommand
o DeleteCommand
, l'opzione Abilita inserimento, Abilita modifica o Abilita eliminazione nello smart tag del controllo Web dati corrispondente verrà attivata. Per illustrare questo, prendiamo un esempio dalla pagina Querying.aspx
che abbiamo creato nell'esercitazione Interrogare i dati con il controllo SqlDataSource e miglioriamolo per includere le capacità di eliminazione.
Inizia aprendo le pagine InsertUpdateDelete.aspx
e Querying.aspx
dalla cartella SqlDataSource
. Dalla pagina Designer della Querying.aspx
, selezionare SqlDataSource e GridView nel primo esempio (i controlli ProductsDataSource
e GridView1
). Dopo aver selezionato i due controlli, passare al menu Modifica e scegliere Copia (o premere CTRL+C). Passare quindi alla finestra di progettazione di InsertUpdateDelete.aspx
e incollare i controlli. Dopo aver spostato i due controlli in InsertUpdateDelete.aspx
, testare la pagina in un browser. Verranno visualizzati i valori delle ProductID
colonne , ProductName
e UnitPrice
per tutti i record nella Products
tabella di database.
Figura 1: Tutti i prodotti sono elencati, ordinati per ProductID
(fare clic per visualizzare l'immagine a dimensione intera)
Aggiungere le proprietà DeleteCommand e DeleteParameters di SqlDataSource
A questo punto è disponibile un oggetto SqlDataSource che restituisce semplicemente tutti i record della Products
tabella e un controllo GridView che esegue il rendering di questi dati. L'obiettivo è estendere questo esempio per consentire all'utente di eliminare i prodotti tramite GridView. A tale scopo, è necessario specificare i valori per le proprietà DeleteCommand
e DeleteParameters
del controllo SqlDataSource e quindi configurare il controllo GridView per supportare l'eliminazione.
Le DeleteCommand
proprietà e DeleteParameters
possono essere specificate in diversi modi:
- Tramite la sintassi dichiarativa
- Dalla finestra delle proprietà nel Designer
- Nella schermata Specificare un'istruzione SQL personalizzata o una procedura memorizzata della procedura guidata Configura origine dati
- Tramite il pulsante Avanzate nella schermata Specifica colonne da una tabella di visualizzazione della procedura guidata Configura origine dati, verrà effettivamente generata automaticamente l'istruzione SQL e la raccolta di parametri
DELETE
utilizzata nelle proprietàDeleteCommand
eDeleteParameters
.
Si esaminerà come creare automaticamente l'istruzione DELETE
nel passaggio 2. Per il momento, è possibile usare la finestra Proprietà in Progettazione, anche se l'opzione Configura origine dati o sintassi dichiarativa funziona altrettanto bene.
Nella finestra di progettazione in InsertUpdateDelete.aspx
, fare clic su ProductsDataSource
SqlDataSource e quindi aprire la finestra Proprietà. Dal menu Visualizza, scegliere Proprietà oppure premere semplicemente F4. Selezionare la proprietà DeleteQuery che visualizzerà un set di puntini di sospensione.
Figura 2: Selezionare la proprietà DeleteQuery dalla finestra Proprietà
Annotazioni
SqlDataSource non dispone di una proprietà DeleteQuery. DeleteQuery, invece, è una combinazione delle proprietà DeleteCommand
e DeleteParameters
ed è elencata solo nella finestra Proprietà quando si visualizza la finestra tramite il Designer. Se si esamina la finestra Proprietà nella visualizzazione Origine, si troverà invece la DeleteCommand
proprietà .
Fare clic sui puntini di sospensione nella proprietà DeleteQuery per visualizzare la finestra di dialogo Editor di comandi e parametri (vedere la figura 3). In questa finestra di dialogo è possibile specificare l'istruzione DELETE
SQL e specificare i parametri. Immettere la query seguente nella casella di testo del DELETE
comando (manualmente o usando Generatore query, se si preferisce):
DELETE FROM Products
WHERE ProductID = @ProductID
Fare quindi clic sul pulsante Aggiorna parametri per aggiungere il @ProductID
parametro all'elenco dei parametri seguenti.
@ProductID aggiunto all'elenco dei parametri di comando DELETE." />
Figura 3: Selezionare la proprietà DeleteQuery dalla finestra Proprietà (fare clic per visualizzare l'immagine a dimensione intera)
Non specificare un valore per questo parametro (lasciare l'origine del parametro su None). Dopo aver aggiunto il supporto per l'eliminazione a GridView, GridView fornirà automaticamente questo valore di parametro, usando il valore della relativa DataKeys
raccolta per la riga su cui è stato fatto clic sul pulsante Elimina.
Annotazioni
Il nome del parametro usato nella DELETE
query deve corrispondere al nome del DataKeyNames
valore in GridView, DetailsView o FormView. Ovvero, il parametro nell'istruzione DELETE
è denominato @ProductID
intenzionalmente (invece di , @ID
), perché il nome della colonna chiave primaria nella tabella Products (e quindi il valore DataKeyNames in GridView) è ProductID
.
Se il nome del parametro e il valore DataKeyNames
non corrispondono, GridView non può assegnare automaticamente il valore dalla raccolta DataKeys
.
Dopo aver immesso le informazioni correlate all'eliminazione nella finestra di dialogo Editor di comandi e parametri, fare clic su OK e passare alla visualizzazione Origine per esaminare il markup dichiarativo risultante:
<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>
Si noti l'aggiunta della DeleteCommand
proprietà, nonché la <DeleteParameters>
sezione e l'oggetto Parameter denominato productID
.
Configurazione di GridView per l'eliminazione
Dopo aver aggiunto la DeleteCommand
proprietà, lo smart tag di GridView contiene ora l'opzione Abilita eliminazione. Procedere e selezionare questa casella di controllo. Come illustrato in Una panoramica dell'inserimento, dell'aggiornamento e dell'eliminazione, gridView aggiunge un oggetto CommandField con la relativa ShowDeleteButton
proprietà impostata su True
. Come illustrato nella figura 4, quando la pagina viene visitata tramite un browser è incluso un pulsante Elimina. Testare questa pagina eliminando alcuni prodotti.
Figura 4: Ogni riga gridView include ora un pulsante elimina (fare clic per visualizzare l'immagine a dimensione intera)
Quando si fa clic su un pulsante Elimina, si verifica un postback, la GridView assegna al parametro ProductID
il valore della raccolta DataKeys
per la riga sul cui pulsante Elimina è stato cliccato e richiama il metodo Delete()
di SqlDataSource. Il controllo SqlDataSource si connette quindi al database ed esegue l'istruzione DELETE
. GridView viene quindi riassociato a SqlDataSource, recuperando e visualizzando il set corrente di prodotti (che non include più il record appena eliminato).
Annotazioni
Poiché GridView usa DataKeys
la raccolta per popolare i parametri SqlDataSource, è fondamentale che la proprietà GridView DataKeyNames
sia impostata sulle colonne che costituiscono la chiave primaria e che sqlDataSource SelectCommand
restituisce queste colonne. Inoltre, è importante che il nome del parametro in SqlDataSource s DeleteCommand
sia impostato su @ProductID
. Se la DataKeyNames
proprietà non è impostata o il parametro non è denominato @ProductsID
, facendo clic sul pulsante Elimina verrà generato un postback, ma non eliminerà effettivamente alcun record.
La figura 5 illustra questa interazione graficamente. Fare riferimento nuovamente all'esercitazione su Analisi degli eventi associati all'inserimento, all'aggiornamento e all'eliminazione per una discussione dettagliata sulla catena di eventi associati all'inserimento, all'aggiornamento e all'eliminazione da un controllo Web di dati.
Figura 5: Fare clic sul pulsante Elimina in GridView richiama il metodo sqlDataSource Delete()
Passaggio 2: Generazione automatica delle dichiarazioni INSERT
, UPDATE
e DELETE
Come illustrato nel passaggio 1, INSERT
, UPDATE
, e DELETE
le istruzioni SQL possono essere specificate tramite la finestra Proprietà o la sintassi dichiarativa del controllo. Tuttavia, questo approccio richiede che vengano scritte manualmente le istruzioni SQL, che possono essere monotono e soggette a errori. Fortunatamente, la procedura guidata Configura origine dati offre un'opzione per fare in modo che le istruzioni INSERT
, UPDATE
e DELETE
vengano generate automaticamente quando si selezionano colonne da una tabella nella schermata della vista.
È possibile esplorare questa opzione di generazione automatica. Aggiungere un controllo DetailsView alla finestra di progettazione in InsertUpdateDelete.aspx
e impostare la proprietà ID
su ManageProducts
. Successivamente, dallo smart tag DetailsView scegliere di creare una nuova origine dati e creare un'istanza di SqlDataSource denominata ManageProductsDataSource
.
Figura 6: Creare un nuovo oggetto SqlDataSource denominato ManageProductsDataSource
(fare clic per visualizzare l'immagine a dimensione intera)
Nella procedura guidata Configura origine dati scegliere di usare la NORTHWINDConnectionString
stringa di connessione e fare clic su Avanti. Nella schermata Configura l'istruzione Select, lascia selezionato il pulsante di opzione Specifica colonne da una tabella o vista e scegli la tabella Products
dall'elenco a discesa. Selezionare le colonne ProductID
, ProductName
, UnitPrice
e Discontinued
dall'elenco delle caselle di controllo.
Figura 7: Utilizzando la Products
tabella, restituire le colonne ProductID
, ProductName
, UnitPrice
e Discontinued
(fare clic per visualizzare l'immagine a dimensione intera)
Per generare automaticamente le istruzioni INSERT
, UPDATE
, e DELETE
in base alla tabella e alle colonne selezionate, fare clic sul pulsante Avanzate e spunta la casella di controllo "Genera le istruzioni INSERT
, UPDATE
, e DELETE
".
Figura 8: Selezionare la casella di controllo Genera INSERT
, UPDATE
e DELETE
La casella di controllo Genera istruzioni INSERT
, UPDATE
e DELETE
sarà selezionabile solo se la tabella selezionata ha una chiave primaria e la colonna della chiave primaria (o le colonne) è inclusa nell'elenco delle colonne restituite. La casella di controllo Usa concorrenza ottimistica, che diventa selezionabile dopo che è stata selezionata la casella di controllo Genera INSERT
, UPDATE
e DELETE
istruzioni, aumenterà le clausole WHERE
nelle istruzioni risultanti UPDATE
e DELETE
per fornire il controllo della concorrenza ottimistica. Per il momento, lasciare deselezionata questa casella di controllo; esamineremo la concorrenza ottimistica con il controllo SqlDataSource nell'esercitazione successiva.
Dopo aver selezionato la casella di controllo Genera INSERT
, UPDATE
, e DELETE
istruzioni, fare clic su OK per tornare alla schermata Configura istruzione di selezione, quindi su Avanti e infine su Fine per completare la procedura guidata di configurazione dell'origine dati. Al termine della procedura guidata, Visual Studio aggiungerà i BoundFields al DetailsView per le colonne ProductID
, ProductName
e UnitPrice
, e un campo CheckBoxField per la colonna Discontinued
. Dallo smart tag DetailsView selezionare l'opzione Abilita paginazione in modo che l'utente che visita questa pagina possa sfogliare i prodotti. Cancellare anche le proprietà DetailsView s Width
e Height
.
Si noti che lo smart tag include le opzioni Abilita inserimento, Abilita modifica e Abilita eliminazione disponibili. Questo avviene perché SqlDataSource contiene valori per il relativo InsertCommand
, UpdateCommand
, e DeleteCommand
, come illustrato nella sintassi dichiarativa seguente:
<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>
Si noti che il controllo SqlDataSource ha impostato automaticamente i valori per le proprietà InsertCommand
, UpdateCommand
e DeleteCommand
. Il gruppo di colonne a cui si fa riferimento nelle proprietà InsertCommand
e UpdateCommand
si basano su quelle nell'istruzione SELECT
. Ovvero, anziché avere tutte le colonne Products in InsertCommand
e UpdateCommand
, sono presenti solo le colonne specificate in SelectCommand
(minore ProductID
, che viene omesso perché si tratta di una IDENTITY
colonna, il cui valore non può essere modificato quando viene modificato e che viene assegnato automaticamente durante l'inserimento). Inoltre, per ogni parametro nelle InsertCommand
proprietà , UpdateCommand
e DeleteCommand
sono presenti parametri corrispondenti nelle InsertParameters
raccolte , UpdateParameters
e DeleteParameters
.
Per attivare le funzionalità di modifica dei dati di DetailsView, selezionare le opzioni Abilita inserimento, Abilita modifica e Abilita eliminazione nello smart tag. Viene aggiunto un oggetto CommandField con le proprietà ShowInsertButton
, ShowEditButton
e ShowDeleteButton
impostate su True
.
Visitare la pagina in un browser e prendere nota dei pulsanti Modifica, Elimina e Nuovo inclusi in DetailsView. Facendo clic sul pulsante Modifica, DetailsView viene attivata la modalità di modifica, che visualizza ogni BoundField la cui ReadOnly
proprietà è impostata su False
(impostazione predefinita) come controllo TextBox e checkBoxField come casella di controllo.
Figura 9: Interfaccia di modifica predefinita di DetailsView (fare clic per visualizzare l'immagine a dimensione intera)
Analogamente, è possibile eliminare il prodotto attualmente selezionato o aggiungere un nuovo prodotto al sistema. Poiché l'istruzione InsertCommand
funziona solo con le ProductName
colonne , UnitPrice
e Discontinued
, le altre colonne hanno NULL
o il valore predefinito assegnato dal database al momento dell'inserimento. Analogamente a ObjectDataSource, se manca InsertCommand
una colonna della tabella di database che non consente NULL
s e non ha un valore predefinito, si verificherà un errore SQL quando si tenta di eseguire l'istruzione INSERT
.
Annotazioni
Le interfacce di inserimento e modifica di DetailsView non dispongono di qualsiasi tipo di personalizzazione o convalida. Per aggiungere controlli di convalida o per personalizzare le interfacce, è necessario convertire BoundFields in TemplateFields. Per altre informazioni, vedere le esercitazioni Aggiunta di controlli di convalida alle interfacce di modifica e inserimento e Personalizzazione dell'interfaccia di modifica dei dati.
Tenere inoltre presente che per l'aggiornamento e l'eliminazione, DetailsView usa il valore del DataKey
prodotto corrente, che è presente solo se la DataKeyNames
proprietà è configurata. Se la modifica o l'eliminazione sembra non avere alcun effetto, assicurarsi che la DataKeyNames
proprietà sia impostata.
Limitazioni della generazione automatica di istruzioni SQL
Poiché l'opzione Genera le istruzioni INSERT
, UPDATE
, e DELETE
è disponibile solo quando si selezionano colonne da una tabella, per le query più complesse sarà necessario scrivere le istruzioni INSERT
, UPDATE
, e DELETE
personalizzate come abbiamo fatto nel passaggio 1. In genere, le istruzioni SQL SELECT
usano JOIN
s per riportare i dati da una o più tabelle di ricerca a scopo di visualizzazione, ad esempio il ripristino del campo della Categories
tabella durante la CategoryName
visualizzazione delle informazioni sul prodotto. Allo stesso tempo, è possibile consentire all'utente di modificare, aggiornare o inserire dati nella tabella principale (Products
in questo caso).
Anche se le istruzioni INSERT
, UPDATE
e DELETE
possono essere immesse manualmente, considera il seguente suggerimento per risparmiare tempo. Inizialmente configurare SqlDataSource in modo che estrae i dati solo dalla Products
tabella. Utilizzare la procedura guidata "Configura origine dati" per specificare le colonne dalla schermata di una tabella o vista, in modo da poter generare automaticamente le istruzioni INSERT
, UPDATE
e DELETE
. Quindi, dopo aver completato la procedura guidata, scegliere di configurare SelectQuery dalla finestra Proprietà oppure, in alternativa, tornare alla procedura guidata Configura origine dati, ma usare l'opzione Specificare un'istruzione SQL personalizzata o una stored procedure. Aggiornare quindi l'istruzione SELECT
in modo da includere la JOIN
sintassi. Questa tecnica offre i vantaggi in termini di tempo delle istruzioni SQL generate automaticamente e consente un'istruzione più personalizzata SELECT
.
Un'altra limitazione della generazione automatica delle istruzioni INSERT
, UPDATE
, e DELETE
consiste nel fatto che le colonne nelle istruzioni INSERT
e UPDATE
sono basate sulle colonne restituite dall'istruzione SELECT
. Potrebbe essere necessario aggiornare o inserire più o meno campi, tuttavia. Ad esempio, nell'esempio del passaggio 2, potrebbe essere necessario che BoundField UnitPrice
sia di sola lettura. In tal caso, non dovrebbe essere visualizzato in UpdateCommand
. In alternativa, è possibile impostare il valore di un campo tabella che non viene visualizzato in GridView. Ad esempio, quando si aggiunge un nuovo record, è possibile impostare il valore QuantityPerUnit
su TODO.
Se tali personalizzazioni sono necessarie, è necessario renderle manualmente, tramite la finestra Proprietà, l'opzione Specificare un'istruzione SQL personalizzata o una stored procedure nella procedura guidata o tramite la sintassi dichiarativa.
Annotazioni
Quando si aggiungono parametri che non dispongono di campi corrispondenti nel controllo Web dei dati, tenere presente che questi valori dei parametri dovranno essere assegnati in qualche modo. Questi valori possono essere: codificati direttamente in InsertCommand
o UpdateCommand
; possono provenire da una fonte predefinita (la query string, lo stato della sessione, i controlli Web sulla pagina e così via); oppure possono essere assegnati programmaticamente, come illustrato nell'esercitazione precedente.
Riassunto
Affinché i controlli Web dati usino le funzionalità predefinite di inserimento, modifica ed eliminazione, il controllo origine dati a cui sono associati devono offrire tali funzionalità. Per SqlDataSource, ciò significa che INSERT
, UPDATE
, e DELETE
devono essere assegnati alle proprietà InsertCommand
, UpdateCommand
, e DeleteCommand
. Queste proprietà e le raccolte di parametri corrispondenti possono essere aggiunte manualmente o generate automaticamente tramite la procedura guidata Configura origine dati. In questa esercitazione sono state esaminate entrambe le tecniche.
È stata esaminata l'uso della concorrenza ottimistica con ObjectDataSource nell'esercitazione Implementazione della concorrenza ottimistica . Il controllo SqlDataSource fornisce anche supporto per la concorrenza ottimistica. Come indicato nel passaggio 2, quando si generano automaticamente le INSERT
, UPDATE
e DELETE
, la procedura guidata offre un'opzione Procedura guidata Usa concorrenza ottimistica. Come vedremo nel prossimo tutorial, l'uso della concorrenza ottimistica con SqlDataSource modifica le clausole WHERE
nelle istruzioni UPDATE
e DELETE
per assicurarsi che i valori delle altre colonne non siano stati modificati dall'ultima volta che i dati sono stati mostrati sulla pagina.
Buon programmatori!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, formatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2.0 in 24 ore. Può essere raggiunto a mitchell@4GuysFromRolla.com.