Partager via


Insertion, mise à jour et suppression de données avec SqlDataSource (VB)

par Scott Mitchell

Télécharger le PDF

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, UPDATEet 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 :

  1. ConnectionString, qui spécifie la base de données à laquelle envoyer la requête, et
  2. 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, UPDATEet 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.

Tous les produits sont répertoriés, commandés par ProductID

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

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.aspxcliquez sur ProductsDataSourceSqlDataSource, 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.

Capture d’écran montrant la fenêtre Propriétés ProductsDataSource avec la propriété DeleteQuery sélectionnée.

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.

Capture d’écran montrant la fenêtre Éditeur de commandes et de paramètres avec le paramètre @ProductID ajouté à la liste des paramètres de commande DELETE. />

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), @IDcar 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.

Chaque ligne GridView inclut désormais un bouton Supprimer

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.

Cliquer sur le bouton Supprimer dans GridView appelle la méthode SqlDataSource s Delete()

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.

Créer une ressource SqlDataSource nommée ManageProductsDataSource

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.

À l'aide du tableau Products, affichez les colonnes ProductID, ProductName, UnitPrice et Discontinued

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.

Cochez la case Générer des 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, UPDATEet 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.

Interface d’édition par défaut de DetailsView

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 (Productsdans 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.