Insertion, mise à jour et suppression de données avec SqlDataSource (C#)
par Scott Mitchell
Dans les tutoriels précédents, nous avons appris comment le contrôle ObjectDataSource autorisait l’insertion, la mise à jour et la suppression de données. Le contrôle SqlDataSource prend en charge les mêmes opérations, mais l’approche est différente, et ce tutoriel montre comment configurer sqlDataSource pour insérer, mettre à jour et supprimer des données.
Introduction
Comme indiqué dans Vue d’ensemble de l’insertion, de la mise à jour et de la suppression, le contrôle GridView fournit des fonctionnalités intégrées de mise à jour et de suppression, tandis que les contrôles DetailsView et FormView incluent la prise en charge de l’insertion ainsi que des fonctionnalités de modification et de suppression. Ces fonctionnalités de modification des données peuvent être directement connectées à un contrôle de source de données sans qu’une ligne de code ait besoin d’être écrite. Vue d’ensemble de l’insertion, de la mise à jour et de la suppression examinée à l’aide de ObjectDataSource pour faciliter l’insertion, la mise à jour et la suppression avec les contrôles GridView, DetailsView et FormView. Vous pouvez également utiliser SqlDataSource à la place de ObjectDataSource.
Rappelez-vous que pour prendre en charge l’insertion, la mise à jour et la suppression, avec ObjectDataSource, nous avions besoin de spécifier les méthodes de couche objet à appeler pour effectuer l’action d’insertion, de mise à jour ou de suppression. Avec SqlDataSource, nous devons fournir des INSERT
instructions SQL , UPDATE
et DELETE
(ou procédures stockées) à exécuter. Comme nous le verrons dans ce tutoriel, ces instructions peuvent être créées manuellement ou générées automatiquement par l’Assistant Configuration de la source de données de SqlDataSource.
Notes
Étant donné que nous avons déjà abordé les fonctionnalités d’insertion, de modification et de suppression des contrôles GridView, DetailsView et FormView, ce tutoriel se concentre sur la configuration du contrôle SqlDataSource pour prendre en charge ces opérations. Si vous devez mettre au point l’implémentation de ces fonctionnalités dans GridView, DetailsView et FormView, revenez aux didacticiels Modification, insertion et suppression de données, en commençant par Une vue d’ensemble de l’insertion, de la mise à jour et de la suppression.
Étape 1 : spécification des instructions INSERT, UPDATE et DELETE
Comme nous l’avons vu dans les deux derniers tutoriels, pour récupérer des données à partir d’un contrôle SqlDataSource, nous devons définir deux propriétés :
ConnectionString
, qui spécifie la base de données à laquelle envoyer la requête, etSelectCommand
, qui spécifie l’instruction SQL ad hoc ou le nom de procédure stockée à exécuter pour retourner les résultats.
Pour SelectCommand
les valeurs avec des paramètres, les valeurs de paramètre sont spécifiées via la collection s SelectParameters
SqlDataSource et peuvent inclure des valeurs codées en dur, des valeurs sources de paramètres courantes (champs de chaîne de requêtes, variables de session, valeurs de contrôle web, etc.) ou peuvent être attribuées par programmation. Lorsque la méthode s du Select()
contrôle SqlDataSource est appelée par programmation ou automatiquement à partir d’un contrôle Web de données, une connexion à la base de données est établie, les valeurs de paramètre sont attribuées à la requête et la commande est supprimée vers la base de données. Les résultats sont ensuite retournés sous la forme d’un DataSet ou d’un DataReader, en fonction de la valeur de la propriété s du DataSourceMode
contrôle.
En plus de sélectionner des données, le contrôle SqlDataSource peut être utilisé pour insérer, mettre à jour et supprimer des données en fournissant INSERT
des instructions SQL , UPDATE
et DELETE
de la même manière. Attribuez simplement aux InsertCommand
propriétés , UpdateCommand
et DeleteCommand
les INSERT
instructions SQL , UPDATE
et DELETE
à exécuter. Si les instructions ont des paramètres (comme c’est le cas le plus souvent), incluez-les dans les InsertParameters
collections , UpdateParameters
et DeleteParameters
.
Une fois qu’une InsertCommand
valeur , UpdateCommand
ou DeleteCommand
a été spécifiée, l’option Activer l’insertion, Activer la modification ou Activer la suppression dans la balise active du contrôle Web de données correspondantes devient disponible. Pour illustrer cela, prenons un exemple à partir de la Querying.aspx
page que nous avons créée dans le didacticiel Interrogation des données avec le contrôle SqlDataSource et augmentons-le pour inclure des fonctionnalités de suppression.
Commencez par ouvrir les InsertUpdateDelete.aspx
pages et Querying.aspx
à partir du SqlDataSource
dossier. Dans le Designer de la Querying.aspx
page, sélectionnez SqlDataSource et GridView dans le premier exemple (ProductsDataSource
les contrôles et GridView1
). Après avoir sélectionné les deux contrôles, accédez au menu Modifier et choisissez Copier (ou appuyez simplement sur Ctrl+C). Ensuite, accédez au Designer de InsertUpdateDelete.aspx
et collez les contrôles. Une fois que vous avez déplacé les deux contrôles vers InsertUpdateDelete.aspx
, testez la page dans un navigateur. Vous devez voir les valeurs des ProductID
colonnes , ProductName
et UnitPrice
pour tous les enregistrements de la Products
table de base de données.
Figure 1 : Tous les produits sont répertoriés, commandés par ProductID
(cliquer pour afficher l’image en taille réelle)
Ajout des propriétés DeleteCommand et DeleteParameters de SqlDataSource
À ce stade, nous avons un SqlDataSource qui retourne simplement tous les enregistrements de la Products
table et un GridView qui affiche ces données. Notre objectif est d’étendre cet exemple pour permettre à l’utilisateur de supprimer des produits via GridView. Pour ce faire, nous devons spécifier des valeurs pour les propriétés et DeleteParameters
les propriétés du DeleteCommand
contrôle SqlDataSource, puis configurer GridView pour prendre en charge la suppression.
Les DeleteCommand
propriétés et DeleteParameters
peuvent être spécifiées de plusieurs façons :
- Via la syntaxe déclarative
- À partir du Fenêtre Propriétés dans le Designer
- À partir de l’écran Spécifier une instruction SQL personnalisée ou une procédure stockée dans l’Assistant Configurer la source de données
- Via le bouton Avancé de l’écran Spécifier les colonnes d’une table d’affichage de l’Assistant Configurer la source de données, qui génère en fait automatiquement l’instruction SQL et la
DELETE
collection de paramètres utilisées dans lesDeleteCommand
propriétés etDeleteParameters
Nous allons examiner comment créer automatiquement l’instruction à l’étape DELETE
2. Pour l’instant, utilisons le Fenêtre Propriétés dans le Designer, bien que l’Assistant Configurer la source de données ou l’option de syntaxe déclarative fonctionne tout aussi bien.
À partir du Designer dans InsertUpdateDelete.aspx
, cliquez sur SqlDataSourceProductsDataSource
, puis affichez le Fenêtre Propriétés (dans le menu Affichage, choisissez Fenêtre Propriétés, ou appuyez simplement sur F4). Sélectionnez la propriété DeleteQuery, qui fera apparaître un ensemble de points de suspension.
Figure 2 : Sélectionnez la propriété DeleteQuery dans la fenêtre Propriétés
Notes
SqlDataSource n’a pas de propriété DeleteQuery. DeleteQuery est plutôt une combinaison des DeleteCommand
propriétés et DeleteParameters
et n’est répertorié que dans la Fenêtre Propriétés lors de l’affichage de la fenêtre via le Designer. Si vous examinez le Fenêtre Propriétés dans la vue Source, vous trouverez la propriété à la DeleteCommand
place.
Cliquez sur les points de suspension de la propriété DeleteQuery pour afficher la boîte de dialogue Commande et paramètre Rédacteur (voir figure 3). Dans cette boîte de dialogue, vous pouvez spécifier l’instruction DELETE
SQL et spécifier les paramètres. Entrez la requête suivante dans la DELETE
zone de texte de commande (manuellement ou à l’aide du Générateur de requêtes, si vous préférez) :
DELETE FROM Products
WHERE ProductID = @ProductID
Ensuite, cliquez sur le bouton Actualiser les paramètres pour ajouter le @ProductID
paramètre à la liste des paramètres ci-dessous.
@ProductID ajouté à la liste des paramètres de commande DELETE. » />
Figure 3 : Sélectionnez la propriété DeleteQuery dans la fenêtre Propriétés (cliquez pour afficher l’image en taille réelle)
Ne fournissez pas de valeur pour ce paramètre (laissez sa source de paramètre sur Aucun ). Une fois que nous avons ajouté la prise en charge de la suppression à GridView, GridView fournit automatiquement cette valeur de paramètre, en utilisant la valeur de sa DataKeys
collection pour la ligne dont le bouton Supprimer a été cliqué.
Notes
Le nom de paramètre utilisé dans la DELETE
requête doit être identique au nom de la DataKeyNames
valeur dans GridView, DetailsView ou FormView. Autrement dit, le paramètre de l’instruction DELETE
est nommé de manière délibérée @ProductID
(au lieu de, par exemple, @ID
), car le nom de colonne de clé primaire dans la table Products (et donc la valeur DataKeyNames dans GridView) est ProductID
.
Si le nom et DataKeyNames
la valeur du paramètre ne correspondent pas, GridView ne peut pas affecter automatiquement au paramètre la valeur de la DataKeys
collection.
Après avoir entré les informations relatives à la suppression dans la boîte de dialogue Commande et paramètre Rédacteur, cliquez sur OK et accédez à la vue Source pour examiner le balisage déclaratif résultant :
<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>
Notez l’ajout de la DeleteCommand
propriété ainsi que de la <DeleteParameters>
section et de l’objet Parameter nommé productID
.
Configuration de GridView pour la suppression
Une fois la DeleteCommand
propriété ajoutée, la balise active GridView contient désormais l’option Activer la suppression. Allez-y et case activée cette case à cocher. Comme indiqué dans Une vue d’ensemble de l’insertion, de la mise à jour et de la suppression, GridView ajoute un CommandField avec sa ShowDeleteButton
propriété définie sur true
. Comme le montre la figure 4, lorsque la page est visitée via un navigateur, un bouton Supprimer est inclus. Testez cette page en supprimant certains produits.
Figure 4 : Chaque ligne GridView inclut désormais un bouton Supprimer (cliquer pour afficher l’image en taille réelle)
Lorsque vous cliquez sur un bouton Supprimer, une publication se produit, gridView affecte au paramètre la ProductID
valeur de la collection pour la DataKeys
ligne dont le bouton Supprimer a été cliqué, et appelle la méthode s Delete()
SqlDataSource. Le contrôle SqlDataSource se connecte ensuite à la base de données et exécute l’instruction DELETE
. GridView se relie ensuite à SqlDataSource, récupérant et affichant l’ensemble actuel de produits (qui n’inclut plus l’enregistrement qui vient de supprimer).
Notes
Étant donné que GridView utilise sa DataKeys
collection pour remplir les paramètres SqlDataSource, il est essentiel que la propriété GridView soit DataKeyNames
définie sur la ou les colonnes qui constituent la clé primaire et que la valeur SqlDataSource retourne SelectCommand
ces colonnes. En outre, il est important que le nom du paramètre dans sqlDataSource s DeleteCommand
soit défini sur @ProductID
. Si la DataKeyNames
propriété n’est pas définie ou si le paramètre n’est pas nommé @ProductsID
, le fait de cliquer sur le bouton Supprimer entraîne une publication, mais ne supprime pas d’enregistrement.
La figure 5 illustre cette interaction sous forme graphique. Reportez-vous au didacticiel Examen des événements associés à l’insertion, à la mise à jour et à la suppression pour une discussion plus détaillée sur la chaîne d’événements associée à l’insertion, à la mise à jour et à la suppression d’un contrôle web de données.
Figure 5 : Cliquer sur le bouton Supprimer dans GridView appelle la méthode s Delete()
SqlDataSource
Étape 2 : Génération automatique des instructions INSERT, UPDATE et DELETE
À l’étape 1, INSERT
UPDATE
les instructions SQL , et DELETE
peuvent être spécifiées par le biais de la syntaxe déclarative Fenêtre Propriétés ou du contrôle. Toutefois, cette approche exige que nous écrivions manuellement les instructions SQL à la main, ce qui peut être monotone et sujet aux erreurs. Heureusement, l’Assistant Configurer la source de données offre une option permettant de générer automatiquement les INSERT
instructions , UPDATE
et DELETE
lors de l’utilisation de l’écran Spécifier des colonnes à partir d’une table d’affichage.
Explorons cette option de génération automatique. Ajoutez un DetailsView au Designer dans et définissez sa ID
propriété sur .InsertUpdateDelete.aspx
ManageProducts
Ensuite, à partir de la balise active DetailsView, choisissez de créer une source de données et de créer une source SqlDataSource nommée ManageProductsDataSource
.
Figure 6 : Créer un nom SqlDataSource ManageProductsDataSource
(cliquer pour afficher l’image en taille réelle)
Dans l’Assistant Configuration de la source de données, choisissez d’utiliser le NORTHWINDConnectionString
chaîne de connexion et cliquez sur Suivant. Dans l’écran Configurer l’instruction Select, laissez la case d’option Spécifier les colonnes d’une table ou d’une vue sélectionnée et sélectionnez la Products
table dans la liste déroulante. Sélectionnez les ProductID
colonnes , ProductName
, UnitPrice
et Discontinued
dans la liste à cocher.
Figure 7 : À l’aide de la Products
table, renvoyer les ProductID
colonnes , ProductName
, UnitPrice
et Discontinued
(cliquez pour afficher l’image en taille réelle)
Pour générer INSERT
automatiquement des instructions , UPDATE
et DELETE
en fonction de la table et des colonnes sélectionnées, cliquez sur le bouton Avancé et case activée la case à cocher Générer INSERT
, UPDATE
et DELETE
les instructions .
Figure 8 : Cochez la case à cocher Générer INSERT
, UPDATE
et DELETE
La case à cocher Générer INSERT
les instructions , UPDATE
et DELETE
ne peut être cochée que si la table sélectionnée a une clé primaire et si la colonne de clé primaire (ou les colonnes) est incluse dans la liste des colonnes retournées. La case à cocher Utiliser l’accès concurrentiel optimiste, qui devient sélectionnable une fois la case à cocher Générer INSERT
, UPDATE
et DELETE
les instructions a été cochée, augmente les WHERE
clauses dans les instructions et DELETE
résultantes UPDATE
pour fournir un contrôle d’accès concurrentiel optimiste. Pour l’instant, laissez cette case à cocher désactivée . Nous allons examiner l’accès concurrentiel optimiste avec le contrôle SqlDataSource dans le tutoriel suivant.
Après avoir coché la case Générer INSERT
les instructions , UPDATE
et DELETE
, cliquez sur OK pour revenir à l’écran Configurer l’instruction Select, puis sur Suivant, puis sur Terminer, pour terminer l’Assistant Configuration de la source de données. À la fin de l’Assistant, Visual Studio ajoute BoundFields au DetailsView pour les ProductID
colonnes , ProductName
et UnitPrice
et un Champ CheckBoxField pour la Discontinued
colonne. À partir de la balise active DetailsView, case activée l’option Activer la pagination afin que l’utilisateur qui visite cette page puisse parcourir les produits. Effacez également les propriétés DetailsView Width
et Height
.
Notez que la balise active a les options Activer l’insertion, Activer la modification et Activer la suppression disponibles. Cela est dû au fait que SqlDataSource contient des valeurs pour ses InsertCommand
, UpdateCommand
et DeleteCommand
, comme le montre la syntaxe déclarative suivante :
<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>
Notez que les valeurs du contrôle SqlDataSource ont été automatiquement définies pour ses InsertCommand
propriétés , UpdateCommand
et DeleteCommand
. L’ensemble de colonnes référencées dans les InsertCommand
propriétés et UpdateCommand
est basé sur celles de l’instruction SELECT
. Autrement dit, au lieu d’avoir chaque colonne Products dans et InsertCommand
UpdateCommand
, il n’y a que les colonnes spécifiées dans ( SelectCommand
moins , qui est omis ProductID
car il s’agit d’une IDENTITY
colonne, dont la valeur ne peut pas être modifiée lors de la modification et qui est automatiquement affectée lors de l’insertion). En outre, pour chaque paramètre des InsertCommand
propriétés , UpdateCommand
et DeleteCommand
, il existe des paramètres correspondants dans les InsertParameters
collections , UpdateParameters
et DeleteParameters
.
Pour activer les fonctionnalités de modification de données de DetailsView, case activée les options Activer l’insertion, Activer la modification et Activer la suppression dans sa balise active. Cela ajoute un Champ de commande avec ses ShowInsertButton
propriétés , ShowEditButton
et ShowDeleteButton
définies sur true
.
Visitez la page dans un navigateur et notez les boutons Modifier, Supprimer et Nouveau inclus dans detailsView. En cliquant sur le bouton Modifier, le DetailsView passe en mode édition, qui affiche chaque objet BoundField dont ReadOnly
la propriété est définie false
sur (valeur par défaut) en tant que TextBox, et checkBoxField en tant que case à cocher.
Figure 9 : Interface d’édition par défaut de DetailsView (cliquer pour afficher l’image en taille réelle)
De même, vous pouvez supprimer le produit actuellement sélectionné ou ajouter un nouveau produit au système. Étant donné que l’instruction InsertCommand
fonctionne uniquement avec les ProductName
colonnes , UnitPrice
et Discontinued
, les autres colonnes ont NULL
leur valeur par défaut affectée par la base de données lors de l’insertion. Comme avec ObjectDataSource, s’il manque des InsertCommand
colonnes de table de base de données qui n’autorisent NULL
pas s et n’ont pas de valeur par défaut, une erreur SQL se produit lors de la tentative d’exécution de l’instruction INSERT
.
Notes
Les interfaces d’insertion et d’édition de DetailsView ne sont pas personnalisées ou validées. Pour ajouter des contrôles de validation ou personnaliser les interfaces, vous devez convertir les BoundFields en TemplateFields. Pour plus d’informations, reportez-vous aux didacticiels Ajout de contrôles de validation aux interfaces d’édition et d’insertion et Personnalisation de l’interface de modification des données .
En outre, gardez à l’esprit que pour la mise à jour et la suppression, DetailsView utilise la valeur du produit actuel, qui n’est DataKey
présente que si la DataKeyNames
propriété est configurée. Si la modification ou la suppression semble n’avoir aucun effet, vérifiez que la DataKeyNames
propriété est définie.
Limitations de la génération automatique d’instructions SQL
Étant donné que l’option Générer INSERT
des instructions , UPDATE
et DELETE
est disponible uniquement lors de la sélection de colonnes à partir d’une table, pour les requêtes plus complexes, vous devez écrire vos propres INSERT
instructions , UPDATE
et DELETE
, comme nous l’avons fait à l’étape 1. En règle générale, les instructions SQL SELECT
utilisent JOIN
s pour ramener des données d’une ou plusieurs tables de choix à des fins d’affichage (par exemple, pour ramener le champ s de CategoryName
la table lors de l’affichage Categories
d’informations sur le produit). Dans le même temps, nous pouvons autoriser l’utilisateur à modifier, mettre à jour ou insérer des données dans la table principale (Products
dans ce cas).
Bien que les INSERT
instructions , UPDATE
et DELETE
puissent être entrées manuellement, tenez compte du conseil de gain de temps suivant. Configurez initialement SqlDataSource pour qu’il extrait les données uniquement de la Products
table. Utilisez l’assistant Configurer la source de données de l’écran Spécifier des colonnes à partir d’une table ou d’une vue afin de pouvoir générer automatiquement les INSERT
instructions , UPDATE
et DELETE
. Ensuite, une fois l’Assistant terminé, choisissez de configurer SelectQuery à partir de l’Fenêtre Propriétés (ou, sinon, revenez à l’Assistant Configuration de la source de données, mais utilisez l’option Spécifier une instruction SQL personnalisée ou une procédure stockée). Mettez ensuite à jour l’instruction SELECT
pour inclure la JOIN
syntaxe. Cette technique offre les avantages de gain de temps des instructions SQL générées automatiquement et permet une instruction plus personnalisée SELECT
.
Une autre limitation de la INSERT
génération automatique des instructions , UPDATE
et DELETE
est que les colonnes des INSERT
instructions et UPDATE
sont basées sur les colonnes retournées par l’instruction SELECT
. Toutefois, nous devrons peut-être mettre à jour ou insérer plus ou moins de champs. Par exemple, dans l’exemple de l’étape 2, nous voulons peut-être que le UnitPrice
champ BoundField soit en lecture seule. Dans ce cas, il ne doit pas apparaître dans le UpdateCommand
. Vous pouvez également définir la valeur d’un champ de table qui n’apparaît pas dans GridView. Par exemple, lors de l’ajout d’un nouvel enregistrement, il se peut que la QuantityPerUnit
valeur soit définie sur TODO .
Si de telles personnalisations sont requises, vous devez les effectuer manuellement, soit via la Fenêtre Propriétés, l’option Spécifier une instruction SQL personnalisée ou une procédure stockée dans l’Assistant, soit via la syntaxe déclarative.
Notes
Lorsque vous ajoutez des paramètres qui n’ont pas de champs correspondants dans le contrôle Web de données, gardez à l’esprit que ces valeurs de paramètres doivent être affectées d’une manière ou d’une autre. Ces valeurs peuvent être : codées en dur directement dans ou InsertCommand
UpdateCommand
; peuvent provenir d’une source prédéfinie (la chaîne de requête, l’état de session, les contrôles Web sur la page, etc.) ; ou peuvent être affectées par programme, comme nous l’avons vu dans le tutoriel précédent.
Résumé
Pour que les contrôles Web de données utilisent leurs fonctionnalités intégrées d’insertion, de modification et de suppression, le contrôle de source de données auquel ils sont liés doit offrir ces fonctionnalités. Pour sqlDataSource, cela signifie que INSERT
les instructions SQL , UPDATE
et DELETE
doivent être affectées aux InsertCommand
propriétés , UpdateCommand
et DeleteCommand
. Ces propriétés et les collections de paramètres correspondantes peuvent être ajoutées manuellement ou générées automatiquement via l’Assistant Configuration de la source de données. Dans ce tutoriel, nous avons examiné les deux techniques.
Nous avons examiné l’utilisation de l’accès concurrentiel optimiste avec ObjectDataSource dans le didacticiel Implémentation de l’accès concurrentiel optimiste . Le contrôle SqlDataSource fournit également une prise en charge de l’accès concurrentiel optimiste. Comme indiqué à l’étape 2, lors de la INSERT
génération automatique des instructions , UPDATE
et DELETE
, l’Assistant offre une option Utiliser l’accès concurrentiel optimiste. Comme nous le verrons dans le tutoriel suivant, l’utilisation de l’accès concurrentiel optimiste avec SqlDataSource modifie les WHERE
clauses des UPDATE
instructions et DELETE
pour garantir que les valeurs des autres colonnes n’ont pas changé depuis la dernière fois que les données ont été affichées sur la page.
Bonne programmation !
À propos de l’auteur
Scott Mitchell, auteur de sept livres ASP/ASP.NET et fondateur de 4GuysFromRolla.com, travaille avec les technologies Web Microsoft depuis 1998. Scott travaille comme consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Il est accessible à l’adressemitchell@4GuysFromRolla.com . ou via son blog, qui se trouve à l’adresse http://ScottOnWriting.NET.