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

ASP.NET Discussion :

[C#] DetailsView et Update BDD Access


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut [C#] DetailsView et Update BDD Access
    Bonjour,

    Dans mon projet, lorsque je rentre sur une fiche client, j'affiche toutes les données dans un DetailsView que j'ai lié à une source de données Access. Le DetailsView est en mode Edit et j'ai mis le AutoGenerateEditButton à True pour pouvoir mettre à jour les modifications.

    Voilà comment je lie la source de données au DetailsView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    AccessDataSource1.DataFile = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "/taxe.mdb";
    AccessDataSource1.SelectCommand = "SELECT client, raison_sociale FROM client WHERE client = " + idUser; //idUser représente le numéro de fiche
    AccessDataSource1.UpdateCommand = "UPDATE client SET raison_sociale = 'poc' WHERE client = " + idUser; //je teste en mettant 'poc' comme valeur
    AccessDataSource1.DataBind();
     
    DetailsView1.DataSourceID = AccessDataSource1.ID;
    DetailsView1.DataBind();
    Le problème c'est que quand je clique sur Update, j'ai le message suivant :
    Updating is not supported by data source 'AccessDataSource1' unless UpdateCommand is specified.

    Et je ne comprends pas trop car ma requête UpdateCommand est donnée ???
    Est-ce que dans l'évènement ItemUpdating du DetailsView il faut faire quelque chose ? Moi je ne pense pas car il est lié à la source de données qui est sensé le gérer, non ?

    Merci de votre aide.

  2. #2
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Ta requête Update doit prendre des paramètres pour fonctionner. essai un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AccessDataSource1.UpdateCommand = "UPDATE client SET raison_sociale = @raison_sociale WHERE client = @idUser"; //je teste en mettant 'poc' comme valeur
    SqlDataSource2.UpdateParameters.Add("idUser", TypeCode.Int32, 0);
    SqlDataSource2.UpdateParameters.Add("raison_sociale", TypeCode.String, string.Empty);
    Si ça marche pas, essai aussi avec un @ devant le nom des parametres que tu ajoute à ta commande

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Suite à ta réponse, j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AccessDataSource1.UpdateCommand = "UPDATE client SET raison_sociale = @raison_sociale WHERE client = @idUser";
    AccessDataSource1.UpdateParameters.Add("@raison_sociale", TypeCode.String, string.Empty);
    AccessDataSource1.UpdateParameters.Add("@idUser", TypeCode.String, idUser);
    J'ai même essayé sans les @, mais ça ne marche pas, toujours la même erreur...

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Bon, en continuant de chercher, j'ai trouver sur MSDN un exemple, mais ça ne marche toujours pas chez moi... J'ai donc rajouté une fonction sur l'évènement ItemUpdating dont voilà le code (copier-coller de MSDN...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
            for (int i = 0; i < e.NewValues.Count; i++)
            {
                if (e.NewValues[i] != null)
                {
                    e.NewValues[i] = Server.HtmlEncode(e.NewValues[i].ToString());
                }
            }
        }
    Pour la liaison de ma source de données, j'ai changé pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AccessDataSource1.DataFile = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "/taxe.mdb";
    AccessDataSource1.SelectCommand = "SELECT client, raison_sociale FROM client WHERE client = " + idUser;
     
    AccessDataSource1.UpdateCommand = "UPDATE [client] SET [raison_sociale] = @raison_sociale WHERE [client] = @client";
    AccessDataSource1.UpdateParameters.Add("raison_sociale", TypeCode.String, string.Empty);
    AccessDataSource1.UpdateParameters.Add("client", TypeCode.String, string.Empty);
     
    AccessDataSource1.DataBind();
     
    DetailsView1.DataSourceID = AccessDataSource1.ID;
    Du coup, comme ça ne marche toujours pas je ne sais pas qu'est ce qui est bon dedans...
    Si vous avez des réponses...

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    A défaut de trouver la solution, j'ai opté pour une autre solution : j'ai placé un bouton en dessous de mon DetailsView, et lors du click, j'effectue une requête Update. Pour tester, j'ai essayé de mettre une valeur codée en dur. Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    protected void Button4_Click(object sender, EventArgs e)
    {
    // Chaîne de connexion
    string pathserv = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
    string connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source={0}/taxe.mdb", pathserv);
    // Objet connection
    System.Data.OleDb.OleDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
    // Ouverture
    dbConnection.Open();
    // Objet Command
    string cmd = "UPDATE client SET raison_sociale = 'poc' WHERE client = " + idUser;
    System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(cmd, dbConnection);
    // Execution
    int affectedrows = command.ExecuteNonQuery();
    // Fermeture connection
    dbConnection.Close();
    }
    Le problème c'est que même ça me génère une erreur, mais celle-ci est différente :
    Erreur de syntaxe (opérateur absent) dans l'expression 'client ='.

    et dans la trace de la pile, il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Line 834:        System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(cmd, dbConnection);
    Line 835:        // Execution
    Line 836:        int affectedrows = command.ExecuteNonQuery();
    Line 837:        // Fermeture connection
    Line 838:        dbConnection.Close();
    Pourtant je suis sûr que ma commande Update est bonne...
    Donc là, je sèche...

    Même si vous n'avez pas une réponse à mon problème mais une autre solution, je suis preneur

  6. #6
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    D'après ton code précédent, j'ai cru comprendre que ton champ client est de type string, du coup, il te faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string cmd = "UPDATE client SET raison_sociale = 'poc' WHERE client = '" + idUser + "'";

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

Discussions similaires

  1. [Débutant] Update BDD Access avec Recorset
    Par kitcarflo dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/06/2013, 23h07
  2. Réponses: 5
    Dernier message: 04/04/2012, 18h49
  3. Update sous Access
    Par Sk8cravis dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/04/2009, 14h29
  4. Problème d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2004, 13h34
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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