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 :

convertir en IEnumerable<EssaiRef>


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 45
    Par défaut convertir en IEnumerable<EssaiRef>
    Bonjour à tous,

    J'ai un exemple de page aspx qui affiche un gridView et sur chaque ligne du gridView, il y a un lien pour ouvrir un detailView.
    Le tout fonctionne avec de l'ajax : asp:UpdatePanel et ajaxToolKit:ModalPopupExtender (pour afficher le detailView en mode modal).

    L'exemple marche très bien avec un fichier Xml contenant les données mais il plante quand j'essaye de le faire marcher avec des données provenant d'une base Oracle.

    L'erreur est la suivante : je n'arrive pas à retourner un objet "IEnumerable<EssaiRef>" dans la méthode :

    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
     
     
    [DataObjectMethod(DataObjectMethodType.Select)]
        public IEnumerable<EssaiRef> FindByID(string Essai_ID)
    {
        OracleConnection conn = new OracleConnection();
        conn.ConnectionString = "Data Source=Test.World;User Id=test1;Password=test1;";
        conn.Open();
     
        string sql = "Select * from essai_ref where Essai_ID =" + Essai_ID;
        OracleCommand cmd = new OracleCommand(sql, conn);
     
        OracleDataAdapter dataAdapter = new OracleDataAdapter(cmd);
     
        DataSet oracleDataSet = new DataSet();
        dataAdapter.Fill(oracleDataSet);
     
        DataTable dataTableTmp = oracleDataSet.Tables[0];
     
        conn.Close();
        conn = null;
     
        return (IEnumerable<EssaiRef>) dataTableTmp.AsEnumerable).ToList();
    J'ai le message :
    Sys.WebForms.PageRequestManagerServerErrorException : Exception has been thrown by the target of an invocation.
    J'ai essayé plusieurs conversions vers IEnumerable<EssaiRef> mais rien n'y fait

    Tandis que le code suivant marche (avec le fichier Xml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       [DataObjectMethod(DataObjectMethodType.Select)]
        public IEnumerable<Customer> FindByID(string id)
        {
            //  find the customer
            return (from c in this.Customers where c.ID == id select c).ToList();
        }
    La méthode FindByID est utilisée dans la page aspx dans un objet ObjectDataSource qui nourrit le detailView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <asp:ObjectDataSource ID="odsEssaiRefDetail" runat="server" TypeName="getOracleData" DataObjectTypeName="EssaiRef" OnSelecting="OdsCustomerDetail_Selecting" SelectMethod="FindByID" UpdateMethod="Update">
                <SelectParameters>
                    <asp:Parameter Name="Essai_ID" Type="Int32" />
                </SelectParameters>
    Auriez-vous une idée ?

    Merci beaucoup par avance.

    Laurent.

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Je pense que tu peux remplacer le return par ca.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return dataTableTmp.AsEnumerable().Cast<EssaiRef>();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 45
    Par défaut
    meziantou : merci pour ta réponse.

    Malheureusement, j'ai l'erreur :

    Unable to cast object of type 'System.Data.Datarow' to type 'EssaiRef'
    Cette erreur je l'ai à l'exécution et non à la compil...

    Laurent.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 45
    Par défaut
    J'ai résolu mon problème :

    En fait il s'agissait de référencer avec précision les colonnes provenant de la table Oracle :

    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select * from essai_ref where Essai_ID =" + Essai_ID;"
    Il faut préciser les noms des colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select Essai_id, essai_name from essai_ref where Essai_ID =" + Essai_ID;"
    Et aussi comme la colonne Essai_ID est de type Number alors, pour récupérer la valeur, il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID = Decimal.ToInt32(rdrOracle.GetDecimal(0));
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "rdrOracle.GetInt32(10)"
    Le code qui marche est le suivant :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public IEnumerable<Essai_Ref> FindByEssaiRefID(string Essai_ID)
    {
     
        List<Essai_Ref> list = new List<Essai_Ref>();
     
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Essai_Reference"].ConnectionString;
     
        using (OracleConnection conn = new OracleConnection(connectionString))
        {
            conn.Open();
     
            string sql = "Select Essai_ID,Essai_NAME from Essai_Ref
                where Essai_ID = " + Essai_ID;
     
            using (OracleCommand cmd = new OracleCommand(sql, conn))
            {
                using (OracleDataReader rdrOracle = cmd.ExecuteReader())
                {
                    while (rdrOracle.Read())
                    {
                        Essai_Ref EssaiRefTmp = new Essai_Ref();
     
                        list.Add(new Essai_Ref() 
                        {
     
                            Essai_ID = Decimal.ToInt32(rdrOracle.GetDecimal(0)),
                            Essai_Name = rdrOracle.GetString(1)
     
                        });
     
                    }
                }
     
            }
            conn.Close();
            conn.Dispose();
     
            return (IEnumerable<Essai_Ref>)list;
     
        }
     
    }
    Laurent.

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

Discussions similaires

  1. Convertir un objet en IEnumerable
    Par franculo_caoulene dans le forum C#
    Réponses: 5
    Dernier message: 29/06/2009, 17h30
  2. Réponses: 4
    Dernier message: 06/06/2004, 12h07
  3. Réponses: 3
    Dernier message: 02/07/2003, 16h24
  4. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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