Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
par Scott Mitchell
Dans les didacticiels précédents, nous avons appris comment ObjectDataSource permet d'insérer, de mettre à jour et de supprimer des données. Le contrôle SqlDataSource prend en charge les mêmes opérations, mais l’approche est différente, et ce didacticiel montre comment configurer SqlDataSource pour insérer, mettre à jour et supprimer des données.
Présentation
Comme indiqué dans Une 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 la modification et la suppression des fonctionnalités. Ces fonctionnalités de modification des données peuvent être connectées directement à 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ées à 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 avons besoin de spécifier les méthodes de couche d’objets à appeler pour effectuer l’action d’insertion, de mise à jour ou de suppression. Avec SqlDataSource, nous devons fournir INSERT
, UPDATE
et DELETE
des instructions SQL (ou des procédures stockées) à exécuter. Comme nous le verrons dans ce tutoriel, ces instructions peuvent être créées manuellement ou peuvent être générées automatiquement par l’Assistant Configurer la source de données SqlDataSource.
Remarque
É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 didacticiel se concentre sur la configuration du contrôle SqlDataSource pour prendre en charge ces opérations. Si vous avez besoin de procéder à l’implémentation de ces fonctionnalités dans GridView, DetailsView et FormView, revenez aux didacticiels Édition, 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 d’instructions INSERT, UPDATE et DELETE
Comme nous l’avons vu dans les deux didacticiels précédents, 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, et -
SelectCommand
, 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 SqlDataSource SelectParameters
et peuvent inclure des valeurs codées en dur, des valeurs sources de paramètres communes (champs de requête, variables de session, valeurs de contrôle Web, et ainsi de suite) ou peuvent être affectées par programme. Lorsque la méthode 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 affectées à la requête et la commande est envoyée vers la base de données. Les résultats sont ensuite retournés sous forme de DataSet ou de DataReader, selon la valeur de la propriété de contrôle DataSourceMode
.
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
, UPDATE
et DELETE
des instructions SQL de la même façon. Attribuez simplement aux propriétés InsertCommand
, UpdateCommand
, et DeleteCommand
les instructions SQL INSERT
, UPDATE
, et DELETE
à exécuter. Si les instructions ont des paramètres (comme c'est presque toujours le cas), incluez-les dans les collections InsertParameters
, UpdateParameters
, et DeleteParameters
.
Une fois qu'une valeur InsertCommand
, UpdateCommand
ou DeleteCommand
a été spécifiée, l'option Activer l'insertion, Activer l'édition ou Activer la suppression dans l'étiquette intelligente du contrôle Web de données correspondant deviendra disponible. Pour illustrer cela, prenons un exemple de la Querying.aspx
page que nous avons créée dans le didacticiel Interrogation de données avec le didacticiel Contrôle SqlDataSource et augmentez-la pour inclure des fonctionnalités de suppression.
Commencez par ouvrir les pages InsertUpdateDelete.aspx
et Querying.aspx
du dossier SqlDataSource
. Dans le Concepteur de la page Querying.aspx
, sélectionnez SqlDataSource et GridView du premier exemple (les contrôles ProductsDataSource
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 Concepteur de InsertUpdateDelete.aspx
et collez-y les éléments de contrôle. Une fois que vous avez déplacé les deux contrôles vers InsertUpdateDelete.aspx
, testez la page dans un navigateur. Vous devriez voir les valeurs des colonnes ProductID
, ProductName
, et UnitPrice
pour tous les enregistrements de la table de base de données Products
.
Figure 1 : Tous les produits sont répertoriés, classés par ProductID
(cliquez pour afficher l’image de taille complète)
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 le contrôle SqlDataSource et les propriétés DeleteCommand
et DeleteParameters
, et configurer ensuite le GridView pour prendre en charge la suppression.
Les propriétés DeleteCommand
et DeleteParameters
peuvent être spécifiées de plusieurs façons :
- Par le biais de la syntaxe déclarative
- À partir de la fenêtre Propriétés dans le Concepteur
- À partir de la fenêtre Spécifier une instruction SQL personnalisée ou une procédure stockée dans l'Assistant Configuration de la source de données
- Via le bouton Avancé dans l’écran Spécifier les colonnes d'une table dans l’Assistant Configurer la source de données, qui génère automatiquement l’instruction SQL et la collection de paramètres utilisée dans les propriétés
DELETE
etDeleteCommand
Nous allons examiner comment créer automatiquement l’instruction DELETE
à l’étape 2. Pour l’instant, nous allons utiliser la fenêtre des propriétés dans le Concepteur, bien que l’Assistant Configurer la source de données ou l'option de syntaxe déclarative fonctionne également.
Dans le Concepteur, InsertUpdateDelete.aspx
cliquez sur ProductsDataSource
SqlDataSource, puis affichez la 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, ce qui fera apparaître un ensemble de points de suspension.
Figure 2 : Sélectionner la propriété DeleteQuery dans la fenêtre Propriétés
Remarque
SqlDataSource n’a pas de propriété DeleteQuery. DeleteQuery est plutôt une combinaison des propriétés DeleteCommand
et DeleteParameters
et n'est répertorié dans la fenêtre Propriétés que lors de l'affichage de la fenêtre via le Concepteur. Si vous examinez la fenêtre Propriétés dans l’affichage de la source, vous trouverez plutôt la propriété DeleteCommand
.
Cliquez sur les points de suspension dans la propriété DeleteQuery pour afficher la boîte de dialogue d'édition de commande et de paramètres (voir la 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
Cliquez ensuite sur le bouton Actualiser les paramètres pour ajouter le @ProductID
paramètre à la liste des paramètres ci-dessous.
Figure 3 : Sélectionner la propriété DeleteQuery dans la fenêtre Propriétés (cliquez pour afficher l’image de taille complète)
Ne fournissez pas de valeur pour ce paramètre (laissez sa source de paramètre sur None). 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é.
Remarque
Le nom du 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 délibérément nommé @ProductID
(à la place de, par exemple), @ID
car le nom de colonne de clé primaire dans la table Products (et par conséquent la valeur DataKeyNames dans GridView) est ProductID
.
Si le nom du paramètre et la valeur DataKeyNames
ne coïncident pas, le GridView ne peut pas attribuer automatiquement au paramètre la valeur provenant de la collection DataKeys
.
Après avoir entré les informations relatives à la suppression dans la boîte de dialogue Éditeur de commande et de paramètre, 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 la <DeleteParameters>
section et l’objet Parameter nommé productID
.
Configuration de GridView pour la suppression
Une fois la DeleteCommand
propriété ajoutée, la balise active de GridView contient désormais l’option Activer la suppression. Cochez cette case. Comme indiqué dans Une vue d’ensemble de l’insertion, de la mise à jour et de la suppression, cela pousse GridView à ajouter un Champ de commande avec sa propriété ShowDeleteButton
définie à 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 (cliquez pour afficher l’image de taille complète)
Lorsque vous cliquez sur un bouton Supprimer, un postback se produit, GridView attribue au paramètre ProductID
la valeur de la collection DataKeys
pour la ligne où le bouton Supprimer a été cliqué et appelle la méthode Delete()
de SqlDataSource. Le contrôle SqlDataSource se connecte ensuite à la base de données et exécute l’instruction DELETE
. GridView se reconnecte ensuite à SqlDataSource, récupère et affiche l’ensemble actuel de produits (qui n’inclut plus l’enregistrement juste supprimé).
Remarque
Étant donné que GridView utilise sa DataKeys
collection pour remplir les paramètres SqlDataSource, il est essentiel que la propriété GridView DataKeyNames
soit définie sur la ou les colonnes qui constituent la clé primaire et que sqlDataSource SelectCommand
renvoie ces colonnes. En outre, il est important que le nom du paramètre dans sqlDataSource soit DeleteCommand
défini sur @ProductID
. Si la propriété n’est pas définie ou si le DataKeyNames
paramètre n’est pas nommé @ProductsID
, le fait de cliquer sur le bouton Supprimer entraîne une publication, mais ne supprime pas réellement d’enregistrement.
La figure 5 illustre cette interaction graphiquement. Reportez-vous au didacticiel Examen des événements associés à l’insertion, à la mise à jour et à la suppression pour obtenir 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 SqlDataSource s Delete()
Étape 2 : Génération automatique des instructions INSERT
, UPDATE
et DELETE
Comme examiné à l'étape 1, les instructions SQL, INSERT
, UPDATE
, et DELETE
peuvent être spécifiées via la fenêtre Propriétés ou la syntaxe déclarative du contrôle. Toutefois, cette approche exige que nous écrivions manuellement les instructions SQL manuellement, qui peuvent être monotones et sujettes aux erreurs. Heureusement, l'Assistant Configurer la source de données propose une option permettant de générer automatiquement les instructions INSERT
, UPDATE
, et DELETE
lors de l'utilisation de l'écran pour spécifier les colonnes à partir d'une vue de table.
Examinons cette option de génération automatique. Ajoutez un DetailsView au concepteur dans InsertUpdateDelete.aspx
et définissez sa propriété ID
sur ManageProducts
. Ensuite, à partir de la balise active DetailsView, choisissez de créer une nouvelle source de données nommée ManageProductsDataSource
SqlDataSource.
Figure 6 : Créer une nouvelle source SqlDataSource nommée ManageProductsDataSource
(cliquez pour afficher l’image de taille complète)
Dans l’Assistant Configurer la source de données, sélectionnez la NORTHWINDConnectionString
chaîne de connexion, puis 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 cochée et sélectionnez la table Products
dans la liste déroulante. Sélectionnez les colonnes ProductID
, ProductName
, UnitPrice
et Discontinued
dans la liste des cases à cocher.
Figure 7 : Utilisation de la Products
table, retourner les colonnes ProductID
, ProductName
, UnitPrice
, et Discontinued
(Cliquez pour afficher l’image de taille complète)
Pour générer automatiquement les instructions INSERT
, UPDATE
et DELETE
basés sur la table et les colonnes sélectionnées, cliquez sur le bouton Avancées et cochez la case Générer les instructions INSERT
, UPDATE
et DELETE
.
Figure 8 : Cochez la case à cocher Générer les déclarations INSERT
, UPDATE
, et DELETE
La case à cocher Générer INSERT
, UPDATE
et les DELETE
instructions ne peuvent être cochées que si la table sélectionnée a une clé primaire et que la colonne de clé primaire (ou colonnes) est incluse dans la liste des colonnes retournées. La case à cocher Utiliser la concurrence optimiste, qui devient sélectionnable une fois que les cases à cocher Générer INSERT
, UPDATE
, et DELETE
ont été cochées, augmentera les clauses WHERE
dans les instructions UPDATE
et DELETE
, afin de fournir un contrôle de concurrence optimiste. Pour l’instant, laissez cette case désactivée ; Nous examinerons l’accès concurrentiel optimiste avec le contrôle SqlDataSource dans le tutoriel suivant.
Après avoir coché la case pour générer les instructions INSERT
, UPDATE
et DELETE
, cliquez sur OK pour revenir à l'écran Configurer l'instruction Select, puis cliquez sur Suivant, ensuite sur Terminer, pour terminer l'assistant de configuration de la source de données. Une fois l’Assistant terminé, Visual Studio ajoutera des BoundFields aux colonnes ProductID
, ProductName
, et UnitPrice
dans le DetailsView, et un CheckBoxField pour la colonne Discontinued
. À partir de la balise active DetailsView, cochez l’option Activer la pagination afin que l’utilisateur qui visite cette page puisse parcourir les produits. Effacez également les propriétés Width
et Height
du DetailsView.
Notez que la balise active a les options Activer l’insertion, Activer l’édition 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 comment le contrôle SqlDataSource a des valeurs définies automatiquement pour ses propriétés InsertCommand
, UpdateCommand
et DeleteCommand
. L’ensemble de colonnes référencées dans les propriétés InsertCommand
et UpdateCommand
est basé sur celles de l’instruction SELECT
. Autrement dit, au lieu d’avoir chaque colonne Products dans le InsertCommand
et UpdateCommand
, il n’y a que les colonnes spécifiées dans le SelectCommand
(moins ProductID
, qui est omise 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 dans les propriétés InsertCommand
, UpdateCommand
, et DeleteCommand
, il existe des paramètres correspondants dans les collections InsertParameters
, UpdateParameters
, et DeleteParameters
.
Pour activer les fonctionnalités de modification des données de DetailsView, cochez les options Activer l’insertion, Activer l’édition et Activer la suppression dans sa balise active. Cela ajoute un CommandField avec ses propriétés ShowInsertButton
, ShowEditButton
et ShowDeleteButton
définies sur True
.
Accédez à 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, affichant chaque BoundField dont la propriété ReadOnly
est définie sur False
(par défaut) en tant que zone de texte et CheckBoxField sous forme de case à cocher.
Figure 9 : Interface d’édition par défaut de DetailsView (cliquez pour afficher l’image de taille complète)
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
, UnitPrice
, et Discontinued
colonnes, les autres colonnes ont soit NULL
, soit leur valeur par défaut attribuée par la base de données lors de l’insertion. Tout comme avec ObjectDataSource, s'il manque des colonnes dans la table de base de données qui n'autorisent pas les InsertCommand
et qui n'ont pas de valeur par défaut, une erreur SQL se produit lors de la tentative d'exécution de l'instruction NULL
.
Remarque
Les interfaces d’insertion et de modification de DetailsView n’ont pas de type de personnalisation ou de validation. Pour ajouter des contrôles de validation ou personnaliser les interfaces, vous devez convertir boundFields en TemplateFields. Pour plus d’informations, reportez-vous à l’ajout de contrôles de validation aux interfaces d’édition et d’insertion et à la personnalisation des didacticiels sur l’interface de modification des données .
Gardez également à l’esprit que pour la mise à jour et la suppression, DetailsView utilise la valeur du DataKey
produit actuel, qui est présente uniquement si la DataKeyNames
propriété est configurée. Si la modification ou la suppression semble ne pas avoir d’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 des instructions INSERT
, UPDATE
et DELETE
n’est disponible que lors de la sélection de colonnes dans une table, pour des requêtes plus complexes, vous devrez écrire vos propres instructions INSERT
, 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 recherche à des fins d’affichage (par exemple, ramener le champ s de Categories
table lors de l’affichage des informations sur le CategoryName
produit). En 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 instructions INSERT
, UPDATE
et DELETE
puissent être entrées manuellement, prenez en compte le conseil pour gagner du temps suivant. Configurez initialement SqlDataSource afin qu’il récupère les données uniquement à partir de la Products
table. Utilisez l’Assistant Configurer la source de données pour spécifier des colonnes à partir d'une table ou d'une vue, afin de pouvoir générer automatiquement les instructions INSERT
, UPDATE
, et DELETE
. Ensuite, après avoir terminé l’Assistant, choisissez de configurer SelectQuery à partir de la fenêtre Propriétés (ou, sinon, revenez à l’Assistant Configurer la source de données, mais utilisez l’option Spécifier une instruction SQL personnalisée ou une procédure stockée). Ensuite, mettez à jour l’instruction SELECT
pour inclure la JOIN
syntaxe. Cette technique offre les avantages en termes de gain de temps des instructions SQL générées automatiquement et permet de créer une instruction plus personnalisée SELECT
.
Une autre limitation de la génération automatique des instructions INSERT
, UPDATE
et DELETE
est que les colonnes des instructions INSERT
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 boundField UnitPrice
soit en lecture seule. Dans ce cas, il ne doit pas apparaître dans le UpdateCommand
. Ou nous pouvons 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, nous pouvons souhaiter que la QuantityPerUnit
valeur soit définie sur TODO .
Si de telles personnalisations sont requises, vous devez les rendre manuellement, soit via la fenêtre Propriétés, l’option Spécifier une instruction SQL personnalisée ou une option de procédure stockée dans l’Assistant, soit via la syntaxe déclarative.
Remarque
Lors de l’ajout de 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 de certaines manières. Ces valeurs peuvent être : codées en dur directement dans le InsertCommand
ou 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, et ainsi de suite) ; ou peut être affectée par programme, comme nous l’avons vu dans le didacticiel 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 de telles fonctionnalités. Pour SqlDataSource, cela signifie que les instructions SQL INSERT
, UPDATE
, et DELETE
doivent être affectées aux propriétés InsertCommand
, 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 la concurrence optimiste. Comme indiqué à l'étape 2, lors de la génération automatique des instructions INSERT
, 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 dans les UPDATE
et DELETE
instructions pour garantir que les valeurs des autres colonnes n’ont pas changé depuis que les données ont été affichées pour la dernière fois 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 en tant que consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 en 24 heures. On peut le joindre à mitchell@4GuysFromRolla.com.