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 :

Bug avec un ObjectDataSource.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut Bug avec un ObjectDataSource.
    Bonjour à tous,

    J'ai un bug avec mon WebForm, il me met :

    ObjectDataSource 'ObjectDataSource3' could not find a non-generic method 'UpdateEmp' that has parameters: pdecEMPNO, pstrENAME, pstrADDRESS, pstrZIP, pstrSTATE, pstrCITY, pstrJOB, pdecMGR, pdatHIREDATE, pdecSAL, pdecCOMM, pdecDEPTNO, ENAME, ADDRESS, ZIP, STATE, CITY, JOB, MGR, HIREDATE, SAL, COMM, EMPNO.
    quand j'essaye de mettre à jour à l'aide du lien "Update" de mon DetailView : voici les extraits de mon code (détails) :

    essai.aspx :

    Code XML : 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
    34
    35
    36
    37
    38
    39
    40
    41
    //***************************************************
    ...
              <asp: DetailsView AutoGenerateRows="False" DataKeyNames="EMPNO" DataSourceID="ObjectDataSource3"
                HeaderText="EMP Details" ID="DetailsView1" runat="server" Width="275px" OnItemUpdated="DetailsView1_ItemUpdated" OnItemInserted="DetailsView1_ItemInserted" OnDataBound="DetailsView1_DataBound">
                <Fields>            
                  <asp:BoundField DataField="EMPNO" HeaderText="N°" ReadOnly="True" SortExpression="EMPNO" />
                  <asp:BoundField DataField="ENAME" HeaderText="Name" SortExpression="ENAME" />
                  <asp:BoundField DataField="ADDRESS" HeaderText="Address" SortExpression="ADDRESS" />
                  <asp:BoundField DataField="ZIP" HeaderText="Zip" SortExpression="ZIP" />
                  <asp:BoundField DataField="STATE" HeaderText="State" SortExpression="STATE" />
                  <asp:BoundField DataField="CITY" HeaderText="City" SortExpression="CITY" />
                  <asp:BoundField DataField="JOB" HeaderText="Job" SortExpression="JOB" />
                  <asp:BoundField DataField="MGR" HeaderText="Mgr" SortExpression="MGR" />
                  <asp:BoundField DataField="HIREDATE" HeaderText="Hire Date" SortExpression="HIREDATE" />
                  <asp:BoundField DataField="SAL" HeaderText="Sale" SortExpression="SAL" />
                  <asp:BoundField DataField="COMM" HeaderText="Comm" SortExpression="COMM" />                  
                  <asp:CommandField ShowEditButton="True" ShowInsertButton="True" />
                </Fields>
              </asp: DetailsView>
              <asp:ObjectDataSource ID="ObjectDataSource3" Runat="server" TypeName="EMPDB"
                SelectMethod="GetEmpByEmpNo" UpdateMethod="UpdateEmp">
                <SelectParameters>
                  <asp:ControlParameter ControlID="GridView1" Name="pdecEMPNO" PropertyName="SelectedValue"
                    Type="Decimal" />
                </SelectParameters>
                <UpdateParameters>
                  <asp: Parameter Name="pdecEMPNO" Type="Decimal" />            
                  <asp: Parameter Name="pstrENAME" Type="String" />
                  <asp: Parameter Name="pstrADDRESS" Type="String" />
                  <asp: Parameter Name="pstrZIP" Type="String" />
                  <asp: Parameter Name="pstrSTATE" Type="String" />
                  <asp: Parameter Name="pstrCITY" Type="String" />
                  <asp: Parameter Name="pstrJOB" Type="String" />
                  <asp: Parameter Name="pdecMGR" Type="Decimal" />
                  <asp: Parameter Name="pdatHIREDATE" Type="DateTime" />
                  <asp: Parameter Name="pdecSAL" Type="Decimal" />
                  <asp: Parameter Name="pdecCOMM" Type="Decimal" />
                  <asp: Parameter Name="pdecDEPTNO" Type="Decimal" />              
                </UpdateParameters>
              </asp:ObjectDataSource>          
    ...
    //********************************************************

    Extrait de ma classe EMPDB :

    Code XML : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    //********************************************************
    ...
        public static int UpdateEmp(decimal pdecEMPNO, string pstrENAME, string pstrADDRESS, string pstrZIP, 
            string pstrSTATE, string pstrCITY, string pstrJOB, decimal pdecMGR, 
            DateTime pdatHIREDATE,
            decimal pdecSAL, decimal pdecCOMM, decimal pdecDEPTNO)
        {
     
            string connectionString = ConfigurationManager.ConnectionStrings["connTESTORACLE"].ConnectionString;
     
            OracleConnection connOracleABASE = new OracleConnection();
     
            connOracleABASE.ConnectionString=connectionString;
            connOracleABASE.Open();
     
            string queryString = "UPDATE EMP SET ENAME=:Ename, JOB=:Job, " + 
                "MGR=:MGR, HIREDATE=:HIREDATE, SAL=:SAL, COMM=:COMM, DEPTNO=: DEPTNO, ADDRESS=:ADDRESS, ZIP=:ZIP, " +
                "STATE=:STATE, CITY=:CITY WHERE (EMP.EMPNO = :EmpNo)";
     
            OracleCommand CmdOracleABASE = new OracleCommand(queryString, connOracleABASE);
     
            OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":Ename";
            parOracleTestOracle.Value = pstrENAME;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":Job";
            parOracleTestOracle.Value = pstrJOB;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":MGR";
            parOracleTestOracle.Value = pdecMGR;
            parOracleTestOracle.OracleType = OracleType.Number;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":HIREDATE";
            parOracleTestOracle.Value = pdatHIREDATE;
            parOracleTestOracle.OracleType = OracleType.DateTime;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":SAL";
            parOracleTestOracle.Value = pdecSAL;
            parOracleTestOracle.OracleType = OracleType.Number;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":COMM";
            parOracleTestOracle.Value=pdecCOMM;
            parOracleTestOracle.OracleType = OracleType.Number;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ": DEPTNO";
            parOracleTestOracle.Value = pdecDEPTNO;
            parOracleTestOracle.OracleType = OracleType.Number;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":ADDRESS";
            parOracleTestOracle.Value = pstrADDRESS;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":ZIP";
            parOracleTestOracle.Value =pstrZIP;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracle = new OracleParameter();
            parOracleTestOracle.ParameterName = ":STATE";
            parOracleTestOracle.Value =pstrSTATE;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracleEmpNo = new OracleParameter();
            parOracleTestOracle.ParameterName = ":CITY";
            parOracleTestOracle.Value =pstrCITY;
            parOracleTestOracle.OracleType = OracleType.VarChar;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            //OracleParameter parOracleTestOracleEmpNo = new OracleParameter();
            parOracleTestOracle.ParameterName = ":EMPNO";
            parOracleTestOracle.Value = pdecEMPNO;
            parOracleTestOracle.OracleType = OracleType.Number;
            CmdOracleABASE.Parameters.Add(parOracleTestOracle);
     
            int rowsAffected = 0;
     
            try
            {
                rowsAffected = CmdOracleABASE.ExecuteNonQuery();
            }
            finally
            {
                connOracleABASE.Close();
            }
            return rowsAffected; 
     
        }
     
    ...
    //*******************************************************

    Voilà, j'espère que c'est assez clair.

    Je ne comprends pas pourquoi il me parle des paramètres :

    ENAME, ADDRESS, ZIP, STATE, CITY, JOB, MGR, HIREDATE, SAL, COMM, EMPNO,
    alors que je n'ai déclaré que :

    pdecEMPNO, pstrENAME, pstrADDRESS, pstrZIP, pstrSTATE, pstrCITY, pstrJOB, pdecMGR, pdatHIREDATE, pdecSAL, pdecCOMM, pdecDEPTNO
    Merci d'avance pour vos réponses.

    laurent.

  2. #2
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Citation Envoyé par laurent_diep
    Voilà, j'espère que c'est assez clair.
    Non, je ne pense pas, vu la quantité de code que tu nous balances .

    Essaie de nommer tes BoundField de la même manière que les parameters.

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Il faut mettre les colonnes concernées en readonly = true sinon il cherchera à les passer dans ta commande update

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut
    Merci mehdi_tn, pour les balises.

    J'y penserai la prochaine fois.

    laurent.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut
    Merci pour vos réponse :

    lutecefalco : je ne peux pas mettre des 'read only' car mon but est de pouvoir modifier ces contrôles.

    mehdi_tn : j'ai renommé les Parameter de la même façon que les attributs DataField des BoundField et j'ai le message :

    ObjectDataSource 'ObjectDataSource3' could not find a non-generic method 'UpdateEmp' that has parameters: ENAME, ADDRESS, ZIP, STATE, CITY, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, EMPNO.

    laurent.

  6. #6
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    les paramtres doivent avoir les même noms que la signature de la méthode. Remplace dans l'autre sens.

  7. #7
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    ENAME, ADDRESS, ZIP, STATE, CITY, JOB, MGR, HIREDATE, SAL, COMM, EMPNO. sont la cause de ton probleme , un petit TIP lors du debuggage et de la liste de methode le debugger te renvoie en capital letter les champs qui posent problemes.

    maintenant comme tu peux voir dans ta liste des updates parameters les meme champs situes plus haut manquent a l'apel.

    donc soit tu changes ta fonction en les supprements :

    UpdateEmp( pdecEMPNO, pstrENAME, pstrADDRESS, pstrZIP, pstrSTATE, pstrCITY, pstrJOB, pdecMGR, pdatHIREDATE, pdecSAL, pdecCOMM, pdecDEPTNO)

    soit tu les rajoutes a tes updatesParameters.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut
    mehdi_tn : Merci çà marche ! (enfin presque : j'ai un autre bug mais qui n'a rien à voir ...)

    laurent.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut
    zeavan : j'avais pas vu ta réponse...

    Merci pour ta réponse ! mais j'ai pu dépatouiller tout çà avec mehdi_tn...

    laurent.

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

Discussions similaires

  1. Bug avec le test de profondeur
    Par Tellmarch dans le forum OpenGL
    Réponses: 1
    Dernier message: 17/10/2004, 00h59
  2. Bug avec requete
    Par arsgunner dans le forum ASP
    Réponses: 8
    Dernier message: 14/06/2004, 16h25
  3. [C#] Bug (?) avec la propriété TransparencyKey de la Form
    Par FrigoAcide dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 14h14
  4. [CR9] Bug avec les champs à valeur vide ?
    Par Djob dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/07/2003, 21h21

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