IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Utilisation bizarre de requête d'insertion, suppression


Sujet :

VB.NET

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut Utilisation bizarre de requête d'insertion, suppression
    Bonjour,
    Je reprend un programme et la façon d'utiliser les requêtes d'insertion, mise à jour et suppression me surprennent.

    la variable "sQuery" contient la requête. (INSERT INTO table ...) ou (DELETE FROM ...) etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim oConnection As New System.Data.SqlClient.SqlConnection(ConnStr)
        oConnection.Open()
        Dim cmd As New SqlClient.SqlCommand(sQuery, oConnection)
        cmd.CommandType = CommandType.Text
        Dim Oda As New SqlClient.SqlDataAdapter
        Oda.SelectCommand = cmd
        Dim MyDs As New DataSet
        Try
          Oda.Fill(MyDs)
        Catch ex As Exception
    ...
    Cela fonctionne mais ...


    J'utilise plutôt cette façon de faire avec une commande "ExecuteNonQuery"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim oConnection As New SqlConnection(ConnStr)
        Try
          oConnection.Open()
          Dim oCommand As New SqlCommand(sQuery, oConnection)
          oCommand.CommandType = CommandType.Text
          oCommand.ExecuteNonQuery()
        Catch Ex As Exception
    ...
    Qu'en pensez-vous?

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Si tu utilises ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim cmd As New SqlClient.SqlCommand(sQuery, oConnection)
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Oda As New SqlClient.SqlDataAdapter
    et
    Qu'est ce que ça va faire: Ça va exécuter ta requête et si des lignes sont retourner (comme avec un SELECT), et bien elles seront stockés dans ton dataset.

    Si ta requête ne retourne rien (Delete), et bien il va simplement rien mettre dans ton dataset.

    Mais je pense qu'il faut privilégié le Execute Query pour ce genre de requete.

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Le programme utilise les DataAdapter qui permettent :
    • de charger une DataTable via la commande Fill du DataAdapter (qui utilise la SelectCommand définie pour l'adapter),
    • de faire des modifications locales dans la datatable,
    • de valider ces modifications par la methode Update du DataAdapter (qui utilise les insertCommand, deletecommand et updatecommand définies pour l'adapter, a la "mano" ou via le CommandBuilder).

    C'est cette même technique que nous utilisons généralement.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    ...
    Qu'est ce que ça va faire: Ça va exécuter ta requête et si des lignes sont retourner (comme avec un SELECT), et bien elles seront stockés dans ton dataset.
    ...
    Sachant que le dataset représente un cache en mémoire de données,

    Citation Envoyé par Graffito Voir le message
    ...
    de faire des modifications locales dans la datatable,
    ...
    que le datatable représente une table de données en mémoire,

    tout reste donc en mémoire.

    Citation Envoyé par Graffito Voir le message
    ...
    de valider ces modifications par la methode Update du DataAdapter (qui utilise les insertCommand, deletecommand et updatecommand définies pour l'adapter, a la "mano" ou via le CommandBuilder).
    ...
    Il n'y a pas cette partie là. (et il ne me semble pas l'avoir vu ailleur dans le programme, il faut que je vérifie lundi)

    Quand la modif est faite elle apparait bien dans les liaisons de données d'affichage, mais rien en immédiat dans la BDD.
    Les données sont enregistrées dans la BDD un peu plus tard. Il faut que je vérifie à quel moment.

    Cela va pour une utilisation mono-utilisateur, mais pas multi-utilisateur.
    Je vais reprendre cela lundi pour corriger.


    Merci pour vos explications.


    En terme de performance quelle serait la meilleure approche ? (par SqlDataAdapter ou ExecuteNonQuery)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Cela va pour une utilisation mono-utilisateur, mais pas multi-utilisateur.
    Oui, et en pratique, on fait une instruction DataAdapter.Update à chaque insertion, suppression ou modification, pour pouvoir avertir l'utilsateur immédiatement.

    Si on fait l'update à la fin, ca peut passer pour 90% des modifs et coincer sur 10%.
    Dans ce cas, sauf à faire une transaction globale sur l'ensemble des modifs, on ne sait plus vraiment où on en est!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 31
    Dernier message: 29/04/2014, 09h40
  2. Utilisation d'une requête INSERT INTO
    Par king of pro dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/05/2009, 21h36
  3. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  4. [FREETEXT][Sql2000] Utilisation dans une requête ?
    Par SoaB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2005, 14h49
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo