Comment mettre à jour, insérer et supprimer des données avec le contrôle LinqDataSource
Mise à jour : novembre 2007
Avec le contrôle LinqDataSource, vous pouvez créer des pages Web qui permettent aux utilisateurs de mettre à jour, insérer et supprimer des données. Vous n'avez pas à spécifier de commandes SQL parce que le contrôle LinqDataSource utilise des commandes créées dynamiquement pour ces opérations. Pour permettre aux utilisateurs de modifier des données, vous pouvez activer les opérations de mise à jour, insertion ou suppression sur le contrôle LinqDataSource. Vous pouvez ensuite connecter le contrôle à un contrôle lié aux données pour permettre aux utilisateurs de mettre à jour les données, tel que le contrôle DetailsView ou GridView. Si vous souhaitez personnaliser les valeurs à mettre à jour, vous pouvez ajouter des paramètres ou créer un gestionnaire d'événements et modifier les valeurs dynamiquement.
Cette rubrique explique l'utilisation du contrôle LinqDataSource pour activer automatiquement les opérations de mise à jour, insertion et suppression. Elle explique également la personnalisation des valeurs mises à jour. Pour terminer, elle explique la création d'un gestionnaire d'événements pour définir par programme une propriété avant d'insérer ou de mettre à jour un enregistrement de base de données.
Les étapes pour activer les opérations automatiques de mise à jour, insertion et suppression sont toutes semblables et les procédures décrites dans cette rubrique indiquent comment activer les trois fonctions. Vous n'avez toutefois pas à les activer toutes les trois. Vous pouvez activer uniquement les fonctions dont vous avez besoin.
Si vous n'êtes pas familiarisé avec le contrôle LinqDataSource, consultez Vue d'ensemble du contrôle serveur Web LinqDataSource et Procédure pas à pas : récupération, mise à jour, insertion et suppression de données avec les contrôles LinqDataSource et DetailsView.
Mise à jour, insertion et suppression automatiques de données
Pour permettre au contrôle LinqDataSource de gérer automatiquement les mises à jour de données, les paramètres suivants sont requis :
L'objet spécifié dans la propriété ContextTypeName doit dériver de la classe DataContext.
Les propriétés Select et GroupBy ne doivent pas être définies.
Une ou plusieurs des propriétés EnableUpdate, EnableDelete et EnableInsert doivent avoir la valeur true.
Pour activer la mise à jour, l'insertion et la suppression automatiques de données
Ajoutez un contrôle LinqDataSource à une page Web ASP.NET.
Affectez à la propriété ContextTypeName le nom d'un objet qui dérive de la classe DataContext.
Lorsque vous utilisez l'Objet Relation Concepteur dans Visual Studio 2008 pour créer une classe qui représente une table de base de données SQL, la classe générée dérive automatiquement de DataContext.
Affectez à TableName le nom de la classe d'entité qui représente la table de base de données associée.
Affectez aux propriétés EnableUpdate, EnableDelete et EnableInsert du contrôle LinqDataSource la valeur true.
Ajoutez un contrôle lié aux données, tel qu'un contrôle DetailsView et affectez à sa propriété DataSourceID l'ID du contrôle LinqDataSource.
Affectez à la propriété DataKeyNames du contrôle de données le nom de la colonne qui contient la clé primaire dans la table.
Prévoyez un moyen permettant à l'utilisateur de basculer en mode de mise à jour, de suppression ou de modification dans le contrôle lié aux données.
Par exemple, vous pouvez ajouter des boutons au contrôle lié aux données ou activer le contrôle pour créer automatiquement ces boutons.
L'exemple suivant affiche le balisage déclaratif pour la partie d'une page Web ASP.NET qui contient un contrôle LinqDataSource et un contrôle DetailsView. Les contrôles sont configurés pour permettre à l'utilisateur d'afficher, mettre à jour, insérer et supprimer des données dans une table nommée Produits.
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource> <asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="ProductID" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" AutoGenerateInsertButton="true" AllowPaging="true" ID="DetailsView1" > </asp:DetailsView>
Ajout des paramètres à des mises à jour, insertion ou modification des données
Par défaut, vous n'avez pas à ajouter de paramètres pour la mise à jour, l'insertion ou la suppression de données. Un contrôle lié aux données passe ses valeurs au contrôle LinqDataSource et le contrôle LinqDataSource utilise les valeurs pour définir la propriété correspondante. LINQ to SQL crée les commandes pour modifier la source de données. Pour plus d'informations, consultez LINQ to SQL.
Vous pouvez spécifier des paramètres pour les opérations de mise à jour, insertion ou suppression. C'est le cas pour pouvoir fournir une valeur par défaut ou spécifier si les valeurs chaînes vides doivent être converties en null. Vous n'avez pas à spécifier un paramètre pour chaque valeur mise à jour ou insérée, uniquement pour les valeurs à personnaliser. Les valeurs qui ne sont pas définies par un paramètre sont gérées automatiquement par le contrôle LinqDataSource.
Le contrôle LinqDataSource contient les collections suivantes pour gérer des paramètres : UpdateParameters, InsertParameters et DeleteParameters.
Pour ajouter des paramètres de mise à jour, d'insertion et de suppression de données
Ajoutez une définition de paramètre pour chaque valeur à modifier.
L'exemple suivant montre comment ajouter un paramètre pour une propriété nommée Category. Le paramètre est ajouté aux collections UpdateParameters et InsertParameters.
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > <UpdateParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </InsertParameters> </asp:LinqDataSource>
Lorsque l'utilisateur ne fournit pas de valeur pour la propriété Category, la valeur par défaut est enregistrée dans la base de données.
Définition des valeurs par programme
Pour définir des propriétés par programme avant d'exécuter une opération de données, vous pouvez créer des gestionnaires d'événements pour les événements Inserting, Updating et Deleting du contrôle LinqDataSource. Toute propriété non définie dans le gestionnaire d'événements est configurée automatiquement par le contrôle LinqDataSource.
Pour définir des valeurs par programme
Créez un gestionnaire d'événements pour l'événement Inserting, Updating ou Deleting du contrôle LinqDataSource.
Ajoutez le code au gestionnaire d'événements qui définit par programme la valeur à modifier.
Les données à mettre à jour, insérer ou supprimer figurent dans les propriétés suivantes :
Événement
Propriété
Classe
Toutes ces propriétés retournent un objet de type Object. Vous pouvez convertir les objets retournés par ces propriétés au type de classe d'entité qui représente les données. Après avoir effectué la conversion, vous pouvez définir les propriétés de ce type.
L'exemple suivant illustre un gestionnaire d'événements pour l'événement Inserting qui définit la date et l'heure actuelles dans une colonne DateModified. Il effectue une conversion de l'objet dans la propriété NewObject en type Product.
Protected Sub LinqDataSource_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceInsertEventArgs) Dim product As Product product = CType(e.NewObject, Product) product.DateModified = DateTime.Now End Sub
protected void LinqDataSource_Inserting(object sender, LinqDataSourceInsertEventArgs e) { Product product = (Product)e.NewObject; product.DateModified = DateTime.Now; }
L'exemple suivant illustre le balisage déclaratif d'un contrôle LinqDataSource qui lie la méthode LinqDataSource_Inserting à l'événement Inserting.
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" OnInserting="LinqDataSource_Inserting" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource>
Compilation du code
Pour mettre à jour, insérer ou supprimer des données à l'aide du contrôle LinqDataSource, vous devez créer une classe d'entité qui représente une table de base de données. Vous pouvez créer une classe d'entité en utilisant l'Objet Relation Concepteur dans Visual Studio 2008.
Sécurité
Cet exemple comprend une zone de texte qui accepte une entrée d'utilisateur, ce qui constitue une menace potentielle pour la sécurité. Par défaut, les pages Web ASP.NET vérifient que les entrées d'utilisateur n'incluent pas de script ou d'éléments HTML. Pour plus d'informations, consultez Vue d'ensemble des attaques de script.
Pour plus d'informations sur le stockage d'une chaîne de connexion, consultez Comment : sécuriser des chaînes de connexion lors de l'utilisation de contrôles de source de données.
Pour plus d'informations sur l'affichage d'informations confidentielles dans les messages d'erreur, consultez Comment : afficher des messages d'erreur sécurisés.
Voir aussi
Concepts
Vue d'ensemble du contrôle serveur Web LinqDataSource