MySql et ASP.NET
Dans l’article précédent nous avons vu comment utiliser le connecteur MySql pour .net et configurer une SQLDataSource pour afficher des données issues d’une table MySql dans une GridView.
Aujourd’hui, nous allons insérer des enregistrements et utiliser les paramètres des requêtes.
Le contrôle GridView ne permettant pas de gérer nativement l’insertion, nous allons utiliser le contrôle DetailsView pour effectuer cette tache.
Note : Il est néanmoins possible par code VB ou c# d’ajouter cette fonctionnalité à la GridView d’autant plus qu’elle dispose d’un Template (modèle) d’insertion.
Tout d’abord, cliquez sur le Smart Tag de la GridView pour activer la sélection.
Le contrôle DetailsView permet d’afficher un ou plusieurs enregistrements d’une table et de les éditer.
Afin de pouvoir manipuler les données, il va falloir indiquer au DetailsView sur quel enregistrement on désire travailler.
Pour cela nous allons créer une nouvelle source de données identique à la première, mais en ajoutant une clause where qui permettra d’afficher seulement l’enregistrement sélectionné dans la grille.
Créons une autre source de données
Voir l’article précédent pour la procédure.
Au lieu de créer une nouvelle connexion, nous allons utiliser celle qui est déjà créée dans notre fichier Web.config. Il suffit de la sélectionner dans la liste déroulante.

Cliquez sur Suivant,
Sélectionnez la table clients, puis cochez tous les champs.
Ensuite cliquez sur le bouton WHERE
![]() |
Dans Colonne : sélectionnez CLI_ID (la clé primaire).
Tout naturellement, nous choisissons GridView1. (De toute façon si vous avez suivi les explications précédentes vous n’avez pas d’autre choix !) |
N’oubliez pas de cliquer sur le bouton Ajouter pour valider.
Visual Studio affiche un aperçu du code qu’il a généré.
Vous remarquerez qu’il recommence à mettre des crochets ([ ]) et des ?.
Cliquez sur OK, Suivant, Terminer.
(Ce n’est pas la peine de vouloir tester la requête, puisque ça ne fonctionnera pas !)
Regardons à quoi ressemble la DataSource générée.
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:basetestConnectionString %>"
ProviderName="<%$ ConnectionStrings:basetestConnectionString.ProviderName %>"
SelectCommand="SELECT [CLI_ID], [CLI_NOM], [CLI_CREATION], [CLI_VALIDE] FROM [clients] WHERE ([CLI_ID] = ?)">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="CLI_ID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
Ce qui nous intéresse ici c’est :
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="CLI_ID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
| <SelectParameters> |
Déclaration des paramètres de sélection |
|
<asp: ControlParameter |
Paramètre de la requête ayant pour origine un contrôle |
|
ControlID="GridView1" |
Nom du contrôle |
|
Name="CLI_ID" |
Nom du paramètre |
|
Type="Int32" |
Type du paramètre |
|
PropertyName="SelectedValue" |
Propriété du contrôle qui contient la valeur du paramètre |
Maintenant mettons un peut d’ordre dans nos DataSources.
Récapitulons :
Nous voulons afficher les données (Select) dans la GridView, les mettre à jour (UpDate), les supprimer (Delete) et pouvoir ajouter de nouveaux enregistrements (Insert).
Jusqu’à présent, il est possible de faire des mises à jour et des suppressions dans la GridView, mais pas d’insertion.
Afin d’illustrer la requête Where paramétrée nous allons pour commencer; essayer d’afficher un enregistrement dans le DetailsView lorsque l’on clique sur la GridView.
Commençons par modifier la requête de la DataSource2
- On enlève les crochets ([ et ])
- On remplace la paramètre ? par @CLI_ID
SelectCommand="SELECT [CLI_ID], [CLI_NOM], [CLI_CREATION], [CLI_VALIDE] FROM [clients] WHERE ([CLI_ID] = ?)">
Devient
SelectCommand="SELECT CLI_ID, CLI_NOM, CLI_CREATION, CLI_VALIDE FROM clients WHERE (CLI_ID = @CLI_ID)">
Insérons un DetailsView et affectons lui SqlDataSource2 comme source de données.
Lançons la page dans l’explorateur.
Cliquons sur Sélectionner
OK, ce n’est pas très beau, mais ça fonctionne.
Insertion
Dans le smart Tag du DetailsView nous ne trouvons que la pagination, mais ni mise à jour ni insertion.
Pourquoi ?
Tout simplement parce que la DataSource associée n’inclue qu’un SelectCommand.
Elle n'a pas les informations pour gérer l'insertion des données.
Pour permettre l’insertion, déplaçons la partie Insertion de SQLDataSource1 vers DataSource2 puisque l’insertion ne s’effectuera pas dans la GridView.
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:basetestConnectionString %>"
InsertCommand="INSERT INTO clients (CLI_ID, CLI_NOM, CLI_CREATION, CLI_VALIDE) VALUES (@CLI_ID, @CLI_NOM, @CLI_CREATION, @CLI_VALIDE)"
ProviderName="<%$ ConnectionStrings:basetestConnectionString.ProviderName %>"
SelectCommand="SELECT CLI_ID, CLI_NOM, CLI_CREATION, CLI_VALIDE FROM clients WHERE (CLI_ID = @CLI_ID)">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="CLI_ID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="CLI_ID" Type="Int32" />
<asp:Parameter Name="CLI_NOM" Type="String" />
<asp:Parameter Name="CLI_CREATION" Type="DateTime" />
<asp:Parameter Name="CLI_VALIDE" Type="int16" />
</InsertParameters>
</asp:SqlDataSource>
Une fois la modification effectuée, en ouvrant le smart tag du DetailsView on peut activer l’insertion : (magique !)

Lorsque l’on lance l’application, on clique sur Sélectionner pour faire apparaitre le DetailsView, le bouton Nouveau est bien présent.
Je vous fais grâce de faire un test d’insertion, car ça ne fonctionnera pas.
Pourquoi ?
Si vous observez la requête d’insertion, vous voyez que CLI_ID fait partie de la requête et de la liste des paramètres.
Il ne doit pas être présent, car c’est un champ auto incrémenté.
Enlevez-le de la requête Insert et testez l’insertion.
Vous remarquerez dans le code source XHTML que toute modification faite en mode désign est répercutée dans le code.
Avec un peu d’habitude, vous ferrez les modifications directement dans celui-ci, sans passer par les propriétés. C’est un excellent mode d’apprentissage pour bien comprendre ce qu’il se passe.
CLI_ID est toujours présent dans le formulaire, même si il n’est plus utilisé
Pour qu’il ne soit plus visible, il suffit de le retirer de la commande Select
Afin de présenter une application viable il reste encore du chemin à parcourir.





