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

Accès aux données Discussion :

[C#] Pourquoi mon insertion dans un control DetailView echoue ?


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut [C#] Pourquoi mon insertion à partir d'un control DetailView echoue ?
    Bonjour à tous,

    Je solicite votre aide aujourd'hui pour m'aider à décrypter un message d'erreur que j'obtiens suite à la tentative d'insertion de données saisies par l'utilisateur sur un detailsview, dans ma base de donnée sql serveur.

    Voici l'erreur :

    Impossible de trouver une propriété nommée 'client_id' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'ObjectDataSource1'.
    Et voici la trace de la pile :

    [InvalidOperationException: Impossible de trouver une propriété nommée 'client_id' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'ObjectDataSource1'.]
    System.Web.UI.WebControls.ObjectDataSourceView.BuildDataObject(Type dataObjectType, IDictionary inputParameters) +381
    System.Web.UI.WebControls.ObjectDataSourceView.ExecuteInsert(IDictionary values) +467
    System.Web.UI.DataSourceView.Insert(IDictionary values, DataSourceViewOperationCallback callback) +173
    System.Web.UI.WebControls.DetailsView.HandleInsert(String commandArg, Boolean causesValidation) +627
    System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +745
    System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source, EventArgs e) +163
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
    System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source, EventArgs e) +118
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
    System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +106
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +175
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +242
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3839
    Voilà donc je comprend pas ce qui se passe... En fait le client id dans le details view est un champ string qui va ensuite etre converti en Guid pour être inseré dans la bdd (à plus long terme, c carrement une liste déroulante avec les noms des clients -_-)

    Je comprend carrement pas ce que signifie l'erreur, donc c'est un peu dure de résoudre le problème. Donc si vous avez déjà rencontré ce genre de choses, merci de votre aide !!

  2. #2
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Faudrait voir le code d'insertion, il semble y avoir un probleme de type, donc si tu peux en meme temps donnée le type des champs de la BDD.
    " Je préfère comprendre les gens qui ne me comprennent pas "

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse

    J'ai tenté de faire autrement pour passer outre ce problème mais en fait je ne peux pas faire autrement donc je vais te fournir quelques infos, j'espere que quelqu'un pourra m'aider plus avant :

    Dans ma BDD, j'ai une table "taches" qui est structurée ainsi :

    - task_id (Guid)
    - client_id# (Guid)
    - user_id# (Guid)
    - date_creation (DateTime)
    - date_recontacter (DateTime)
    - action_commerciale (DateTime)
    - observations (text)

    J'ai un objet "Tache" qui comporte une variable membre pour chaque colonne de la table du même nom. Ces propriétés ont les mêmes types

    Dans ma page d'index du site j'ai un detailview auquel j'ai attaché mon dataobject via le mode design.
    Voici ce que me donne le code généré par le mode design pour mon objectDataSource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
            SelectMethod="TestSelect" TypeName="GestionImmo.Task.Task" DataObjectTypeName="GestionImmo.Task.Task" DeleteMethod="DeleteTask" InsertMethod="InsertNewTask" UpdateMethod="UpdateTask" >
            <InsertParameters>
                <asp:Parameter Name="_TaskId" Type="String" />
                <asp:Parameter Name="_clientID" Type="String" />
                <asp:Parameter Name="_UserID" Type="String" />
                <asp:Parameter Name="_DateCreation" Type="DateTime" />
                <asp:Parameter Name="_DateRecontacter" Type="DateTime" />
                <asp:Parameter Name="_ActionCommerciale" Type="Int32" />
                <asp:Parameter Name="_Observations" Type="String" />
            </InsertParameters>
        </asp:ObjectDataSource>
    Les "Parameters" _TaskId, _ClientID, _UserID sont maintenant de type string dans le code asp, mais avant c'était des "Object". J'ai modifié la chose dans la déclaration de ma méthode d'insertion et bien entendu j'ai généré les Guid à partir de ces strings.

    Voici la méthode d'insertion :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
            [DataObjectMethodAttribute(DataObjectMethodType.Insert, false)]
            public bool InsertNewTask(String _TaskId, String _ClientID, String _UserID,
                DateTime _DateCreation, DateTime _DateRecontacter,
                int _ActionCommerciale, String _Observations)
            {
                User oCurrentUser = (User)HttpContext.Current.Session["CurrentUser"];
     
     
                Guid CurrentUserGuid = oCurrentUser.userId;
                Guid ClientID = new Guid(_ClientID);
     
                String insertCmd = "INSERT INTO taches " +
                    "(task_id, client_id, user_id, date_creation, date_recontacter, action_commerciale, observations)" +
                    "VALUES (NEWID(), @client_id, @user_id, GETDATE(), @date_recontacter, @action_commerciale, @observations)";
     
                SqlConnection conn = new SqlConnection(oCurrentUser.connectionString);
                SqlCommand cmd = new SqlCommand(insertCmd, conn);
     
                cmd.Parameters.AddWithValue("@client_id", ClientID);
                cmd.Parameters.AddWithValue("@user_id", CurrentUserGuid);
                cmd.Parameters.AddWithValue("@date_recontacter", _DateRecontacter);
                cmd.Parameters.AddWithValue("@action_commerciale", _ActionCommerciale);
                cmd.Parameters.AddWithValue("@observations", _Observations);
     
                conn.Open();
     
                if (cmd.ExecuteNonQuery() > 0)
                    return true;
                else
                    return false;
     
                return false;
            }
    J'ai vraiment pas réussi à trouver un tuto ou de l'aide pour expliquer comment gérer à la main via un ObjectDataSource l'insertion de données à partir d'un DataControl comme le gridview ou le detailview Si vous avez des liens je suis preneur parce que je galère pas mal !

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bien,

    J'ai résolu mon problème grâce à la précieuse aide MSDN

    En fait le problème vient du fait que la propriété DataObjectTypeName de mon DataObject signifie que les méthodes d'insert, delete et update doivent avoir les arguments correspondant à la structure de mon objet ou alors un objet passé en paramètre qui est crée au runtime par l'application. Le probleme c'est que même si mon objet comporte les champs suivants :

    - task_id (Guid)
    - client_id# (Guid)
    - user_id# (Guid)
    - date_creation (DateTime)
    - date_recontacter (DateTime)
    - action_commerciale (DateTime)
    - observations (text)

    La signature de ma méthode doit contenir 2 autres champs : "nom" et "prenom". En fait j'ai l'impression que "ça" se base sur le résultat retourné par la requête SELECT de mon DataObject qui comporte effectivement 2 variables supplémentaires : le nom et le prénom du client associé à cette tâche !

    Du coup je suis un peu perdu, même si mon insertion marche, je dois demander des paramètres à mon utilisateur qu'il ne pourra pas entrer (ou n'aura pas a entrer) comme par exemple le "task_id" qui est généré lors de l'insertion


    Si quelqu'un à une idée pour m'aider... Enlever le DataObjectTypeName et mettre les paramètres d'insertion conduit à une erreur à la compilation

    Merci d'avance

Discussions similaires

  1. Pourquoi mon action dans une modal ne s'exécute pas ?
    Par nicolas.carron dans le forum Seam
    Réponses: 3
    Dernier message: 10/01/2011, 22h23
  2. Réponses: 2
    Dernier message: 03/05/2007, 09h00
  3. Réponses: 6
    Dernier message: 12/02/2007, 19h24
  4. pourquoi mon applet ne s'ouvre que dans C:
    Par gabule dans le forum Applets
    Réponses: 2
    Dernier message: 02/06/2006, 09h04
  5. Réponses: 2
    Dernier message: 12/05/2006, 23h01

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