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 :

Problème d'accès aux données - intranet c# mvc [Débutant]


Sujet :

Accès aux données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut Problème d'accès aux données - intranet c# mvc
    Bonjour,
    j'ai créé récemment une petite application en asp.net c# mvc, et j'ai un petit problème pour accéder aux données de ma base de données oracle.
    Initialement j'y arrive en webform mais le mvc étant un peu différent j'ai un peu de mal.

    Le principe est le suivant : j'ai une base de données avec une table rdv, et je veux afficher , dans un tableau , la liste de mes rdv ( heure, date, etc... )

    voici mon code au niveau de mon modèle :
    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
     
      public class rdv
        {
     
            public string daterdv { get; set; }
            public string societe { get; set; }
            public string heure { get; set; }
            public string lieu { get; set; }
            public string contact { get; set; }
            public string retourrdv { get; set; }
            public string resultatrdv { get; set; }
     
     
     
     
        }
    mon controller :
    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
    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
     
            public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
     
                return View();
            }
     
    //j'ai créer une methode pour charger ma liste de rdv
      private void ChargerRdv()
            {
                try
                {
     
                    logrdv.Info("---- CHARGEMENT DE LA LISTE DES APPELS ----- ");
                    string connexionstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
                    OracleConnection maconnexion = new OracleConnection(connexionstring);
     
     
                    string selectRDV = "select * FROM RDV ORDER BY SOCIETE asc ";
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
     
                    logrdv.Info("1 : " + monreader.GetString(0).ToString() );
                    logrdv.Info("2 : " + monreader.GetString(1).ToString());
                    logrdv.Info("3 : " + monreader.GetString(2).ToString());
                    logrdv.Info("4 : " + monreader.GetString(3).ToString());
     
     
     
                    //2- -TEST REQUETAGE  OPTIONNELE
                    string nbOffre = "select count(idrdv) from rdv";
                    logrdv.Info("REQUETE nbrdv : " + nbOffre);
                    OracleCommand comCount = new OracleCommand(nbOffre, maconnexion);
                    OracleDataReader readerCount = comCount.ExecuteReader();
                    readerCount.Read();
     
                    int nbrdv = readerCount.GetInt32(0);
     
     
     
                    if (nbrdv != 0)
                    {
                        ViewBag.Messagerdv = monreader.GetString(0).ToString();
                        logrdv.Info(" nbrdv : " + nbrdv);
                    }
                    else
                    {
                        ViewBag.Messagerdv = "Aucun rdv de programmé";
     
                    }
     
     
                    ViewBag.Confirmationrdv = "Rendez vous pris  avec succès";
                    //message de confirmation
     
     
                }
                catch (Exception erreur)
                {
                    logrdv.Error(erreur.ToString());
                    ViewBag.ErreurRDV = erreur.ToString();
                    // logrdv.Error("Erreur dans le chargement des données :  " + erreur.ToString());
                    //  return false;
                }
     
     
            }
    et ma vue :
    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
     
     
    @{
        ViewBag.Title = "Gestion des rendez-vous";
     
               string MessageErreur = ViewBag.ErreurRDV;   //message d'erreur
                string nbrdv = ViewBag.Messagerdv;  //nb de rdv
                string confirmation = ViewBag.Confirmationrdv;   //confirmation de rdv
    }
     
    <h2>@ViewBag.Title</h2>
     
    <section class="sectionSociete">
        <article class="blocPriseRdv">
     
            <!-- <div class="posTableau"> -->
            <table class="tableauRdv">
            @foreach (var m in Model)
            {
                <tr>
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
     
                </tr>
            }
    .....
    ....
    le principe etant donc d'afficher dans ma vue ( mon table ) la liste des rdv et je saisie pas comment faire, pourriez vous me donner quelques conseils ? est ce que je m'y prend bien dans le controleur ?

    merci d'avance !

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tout d'abord, la vue me semble bonne.

    Par contre, comme la vue fait appel à un modèle, il est donc nécessaire, dans le contrôleur, de préciser le modèle à utiliser au moment d'appeler la vue. Il faut donc remplacer
    par model est une variable qui contient une liste d'instance de rdv (un IEnumerable<rdv>, un List<rdv>, un rdv[], etc...).

    Ce modèle, il suffit de l'instancier puis de le peupler à partir des données récupérer depuis la base de données.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    ok merci je vais essayer

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    est ce que, pour principe je fais correctement, ma méthode ChargerRdv() ?

    Car à partir de la ligne 31, jusque 34, normalement c'est là que je dois récupérer mes données.

    en gros j'ai ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
    et mon controller
    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
     
     private void ChargerRdv()
            {
                try
                {
                  ......
             ..........
                    string selectRDV = "select * FROM RDV ORDER BY SOCIETE asc ";
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
     
                    logrdv.Info("1 : " + monreader.GetString(0).ToString() );
                    logrdv.Info("2 : " + monreader.GetString(1).ToString());
                    logrdv.Info("3 : " + monreader.GetString(2).ToString());
                    logrdv.Info("4 : " + monreader.GetString(3).ToString());
     
                   //c'est ici que je dois charger les données,dans mon model ,puisque je l'utilise dans ma vue est ce correct ? 
    ..........
    ..............
    et donc j'aurais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
         public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
                RdvController rdv = new RdvController();
                rdv.ChargerRdv();
     
                return View(rdv );
            }
    en gros le principe est il correct ?
    merci !

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Voici le principe au niveau de la méthode ChargerRDV :

    Code C# : 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
     
    private List<rdv> ChargerRdv()
            {
                try
                {
                  ......
             ..........
                    string selectRDV = "select * FROM RDV ORDER BY SOCIETE asc ";
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
                    List<rdv> liste = new List<rdv>();
                    logrdv.Info("1 : " + monreader.GetString(0).ToString() );
                    logrdv.Info("2 : " + monreader.GetString(1).ToString());
                    logrdv.Info("3 : " + monreader.GetString(2).ToString());
                    logrdv.Info("4 : " + monreader.GetString(3).ToString());
     
                   //c'est ici que je dois charger les données,dans mon model ,puisque je l'utilise dans ma vue est ce correct ? 
                   // Effectivement, c'est ici. Voici un exemple de comment procéder :
                   while(monreader.Read()) 
                   {
                       liste.Add(new rdv() 
                       {
                          daterdv = monreader.GetString(0),
                          societe = monreader.GetString(1),
                          ...
                          // Bien évidement, il faut adapter les numéros des colonnes en fonction de la requête ! 
                          // Et si tu ne sais pas à l'avance l'ordre de tes colonnes, tu peux utiliser la méthode monreader.GetOrdinal("NomDeLaColonne") pour récupérer l'information.
                          // De plus, il faut que tu récupères la donnée selon le type qui va bien. Si dans ta colonne, tu as un entier INT, il te faut utiliser GetInt32, et ensuite le convertir en String. 
                       }              
                   }
     
                   return liste;

    Note que j'ai changé la signature de ta méthode. Elle retourne un liste de rdv.

    Ensuite, au niveau du contrôleur, il faut faire quelque chose comme cela :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
                List<rdv> liste = ChargerRdv(); 
                return View(liste);
            }

    Il ne faut pas que tu instancies le contrôleur comme tu l'avais fait. C'est ASP.Net qui se charge de cela ! Quand tu es dans la méthode Index, this se réfère à une instance de ton contrôleur. C'est pourquoi il suffit ensuite d'appeler directement ChargerRdv().
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    Désolé pour le temps de réponse, je n'etais plus libre durant un moment .

    merci bien je vais tester cela

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    Voici ce que j'ai fait:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
           private List<Models.Rdv> ChargerRdv()
            {
                try
                {
     
                    logrdv.Info("---- CHARGEMENT DE LA LISTE DES APPELS ----- ");
                    string connexionstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
                    OracleConnection maconnexion = new OracleConnection(connexionstring);
     
     
                    string selectRDV = "select * FROM RDV ORDER BY SOCIETE asc ";
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
                   // Models.Rdv daterdv;
                  //  Models.Rdv societe;
     
     
                    List<Models.Rdv> liste = new List<Models.Rdv>();
     
                    while (monreader.Read())
                    {
                        liste.Add(new Models.Rdv()
                        {
                            daterdv = monreader.GetString(0),
                            societe = monreader.GetString(1)
     
                            //....... donc là je me suis servi des données du model, pour récupéré mes valeurs, si je saisie bien
                        });
                    }
     
                    return liste;
     
     
                    ViewBag.Confirmationrdv = "Rendez vous pris  avec succès";
                    //message de confirmation
     
     
                }
                catch (Exception erreur)
                {
                   .........
                    return null;
                }
     
     
            }
    puis normalement dans la vue je dois avoir

    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
     
            <table class="tableauRdv">
                <td></td>
           @foreach (var m in Model)
            {
                <tr>
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
     
                </tr>
            }
    .......
    mais j'ai un message d'erreur qui dit :
    INFO 2016-10-15 20:36:43 – REQUETE DE SELECTION : select * FROM RDV ORDER BY SOCIETE asc
    ERROR 2016-10-15 20:36:43 – System.InvalidCastException: Le cast spécifié n'est pas valide.
    à System.Data.OracleClient.OracleColumn.GetString(NativeBuffer_RowBuffer buffer)
    c'est au niveau de : liste.Add(new Models.Rdv()

    c'est le getstring qui pose problème si je saisie bien, il faut que je change de cast ?

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par android59 Voir le message
    c'est le getstring qui pose problème si je saisie bien, il faut que je change de cast ?
    Il y a de grandes chances. Si daterdv est une date au niveau de la base de données, alors il faut utiliser la fonction qui va bien pour récupérer l'information : GetDateTime. Si tu as un entier, GetInt32, etc... Je t'invite à consulter https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx pour disposer de la liste exhaustive des méthodes disponibles sur un DataReader.

    Si au final tu ne veux que des chaines de caractères, alors il faut que tu réalises toi-même la conversion depuis le type initial en type string.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    pourtant voici mon modele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          public string daterdv { get; set; }
            public string societe { get; set; }
            public string heure { get; set; }
            public string lieu { get; set; }
            public string contact { get; set; }
            public string retourrdv { get; set; }
            public string resultatrdv { get; set; }
    je me pose une question s'il n'y aurait pas un souci dans liste.Add(new Models.Rdv(), si ce n'est pas par rapport à ça ?

    car apres je récupère mes valeurs donc en string pour moi c'est bon normalement

  10. #10
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Si daterdv est une date au niveau de la base de données
    Tu ne m'as pas compris. Je ne parle pas du modèle côté applicatif, mais du modèle côté base de données.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    Ok, justement coté base de données j'ai bien Varchar2, donc en string .

    je fais ça au début, je met en string mes valeurs au début et après une fois l'application terminé je peaufine tous ce qui est date etc ....

    J'ai joints une copie d'écran d'une erreur que j'obtient sur ma vue.
    Voici 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    model Intranet.Models.Rdv
     
    @{
        ViewBag.Title = "Gestion des rendez-vous";
     
        string MessageErreur = ViewBag.ErreurRDV;   //message d'erreur
        string nbrdv = ViewBag.Messagerdv;  //nb de rdv
        string confirmation = ViewBag.Confirmationrdv;   //confirmation de rdv
     
        //List<string> m = ViewBag.rdv;
    }
     
    <h2>@ViewBag.Title</h2>
     
    <section class="sectionSociete">
        <article class="blocPriseRdv">
     
            <table class="tableauRdv">
     
           @foreach (var m in Model)
            {
                <tr>
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
     
                </tr>
            }
    ........
    je sais pas trop ce qui m'échappe là mais je suis pas loin du résultat je pense

  12. #12
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    J'ai un peu de mal à suivre les erreurs... On passe d'une erreur de cast à une erreur indiquant simplement que tu essaies d'itérer sur un objet qui n'est pas une collection
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  13. #13
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    en regardant par moi meme j'ai essayé de resoudre ce problème, donc je m'explique sur la situation actuel

    modele :
    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
     
    namespace Intranet.Models
    {
        public class Rdv        
        {
     
            public string daterdv { get; set; }
            public string societe { get; set; }
            public string heure { get; set; }
            public string lieu { get; set; }
            public string contact { get; set; }
            public string retourrdv { get; set; }
            public string resultatrdv { get; set; }
     
     
     
        }
    }
    vue:
    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
     
       <table class="tableauRdv">
                                                          //la j'essaye d'afficher mes résultats dans un tableau
           @foreach (var m in Model)
            {
                <tr>
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
     
                </tr>
            }
          <tr>...
    .....
    et mon controlleur:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    namespace Intranet.Controllers
    {
        public class RdvController : Controller
        {
            -....
          ......
             public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
                RdvController rdv = new RdvController();
                rdv.ChargerRdv();
     
                return View();
            }
     
      public List<Models.Rdv> ChargerRdv()
            {
                try
                {
     
                    logrdv.Info("---- CHARGEMENT DE LA LISTE DES APPELS ----- ");
                    string connexionstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
                    OracleConnection maconnexion = new OracleConnection(connexionstring);
     
     
                    string selectRDV = "select * FROM RDV ORDER BY SOCIETE asc ";
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
                   // Models.Rdv daterdv;
                  //  Models.Rdv societe;
     
     
                    List<Models.Rdv> liste = new List<Models.Rdv>();   //apparemment mon log me dit qu'ici il y a un probleme de cast
     
                    while (monreader.Read())
                    {
                        liste.Add(new Models.Rdv()
                        {
                            daterdv = monreader.GetString(0),
                            societe = monreader.GetString(1)
     
                            //.......
                        });
                    }
     
                    return liste;
                        ......
                        ......
                        ......
     
        }
    message log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR 2016-10-17 14:54:32 – System.InvalidCastException: Le cast spécifié n'est pas valide.
       à System.Data.OracleClient.OracleColumn.GetString(NativeBuffer_RowBuffer buffer)
    c'est ça que j'ai du mal à saisir :s
    Pourtant niveau base de données, mon champ date ( ainsi que les autre champs ) sont en string

    merci

  14. #14
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Je viens de voir un truc qui, si ce n'est pas la source du problème, pourra en être un par la suite, et donc il te faut le corriger.

    Dans ton SELECT, tu utilises *, pour ensuite accéder aux différentes colonnes par leur index ! C'est très dangereux de faire cela. Si tu schéma évolues, tu peux très vite casser ton code (surtout que je ne sais pas comment Oracle gère l'ordre des colonnes).

    Ou bien tu récupères l'index de la colonne que tu souhaites via un appel à GetOrdinal("Nom de la colonne"), ou bien tu spécifies explicitement tes colonnes au lieu d'utiliser *.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  15. #15
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    en effet j'y ai pas fait attention, pour l'instant j'ai donc mi que mes deux premières colonnes en attendant que ça fonctionne

  16. #16
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    quand je test l'application ça me dit
    CS1579: foreach statement cannot operate on variables of type 'Intranet.Models.Rdv' because 'Intranet.Models.Rdv' does not contain a public definition for 'GetEnumerator'

    et dans la vue ça orrespond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     
     
    Ligne 20 :        @foreach (var m in Model)
    Ligne 21 :         {
    pourtant tout en haut de ma vue j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @model Intranet.Models.Rdv
     
    @{
        ViewBag.Title = "Gestion des rendez-vous";
     
        string MessageErreur = ViewBag.ErreurRDV;   //message d'erreur
        string nbrdv = ViewBag.Messagerdv;  //nb de rdv
        string confirmation = ViewBag.Confirmationrdv;   //confirmation de rdv
     
     
    }
    ça correspond à quoi cette erreur en fait ?

  17. #17
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    J'ai déjà répondu à cette question plus haut : tu essaies d'itérer sur un objet qui n'est pas une collection.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  18. #18
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    ok
    je me posais une question, déja si dans mon controller j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
                RdvController rdv = new RdvController();
                rdv.ChargerRdv();
     
                return View();
            }
    est ce que je m'y prend bien dans ma vue pour afficher les données ? je sais qu'il manque un petit truc pour que ça marche mais je vais trouvé lol

  19. #19
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Non, non non et renon !

    Il ne faut pas que tu instancies toi-même le contrôleur. C'est ASP.NET qui s'en charge. S'il te plait, relie l'intégralité du sujet car tout y est déjà présent (de l'instanciation automatique du controlleur par ASP.Net à la manière de passer un modèle à une vue).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  20. #20
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    Je pense àvoir reussi , voila ce que j'ai fais

    vue :
    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
     
    @model List<Intranet.Models.Rdv>
    .......................
    .........................
     
      @foreach (var m in Model )
               {
                <tr>
                    <td>@m.daterdv</td>
                    <td>@m.societe</td>
                    <td>@m.heure</td>
                    <td>@m.lieu</td>
                    <td>@m.contact</td>
                    <td>@m.retourrdv</td>
                    <td>@m.resultatrdv</td>
     
                </tr>
               }
    apres j'ai mon modèle donc normal

    puis controller :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
      public ActionResult Index()
            {
                log4net.Config.XmlConfigurator.Configure();
     
                //appel de la procedure qui retourne la liste de rdv
                List<Models.Rdv> rdv = ChargerRdv();
     
                // rdv.ChargerRdv();
     
                return View(rdv);
            }
     
     public List<Models.Rdv> ChargerRdv()
            {
                try
                {
     
                    logrdv.Info("---- CHARGEMENT DE LA LISTE DES APPELS ----- ");
                    string connexionstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
                    OracleConnection maconnexion = new OracleConnection(connexionstring);
     
     
                    string selectRDV = "select daterdv,societe,heure,lieu,contact FROM RDV ORDER BY SOCIETE asc ";
                    //,heure,lieu,contact,retourrdv,resultrdv
     
                    logrdv.Info("REQUETE DE SELECTION : " + selectRDV);
     
                    maconnexion.Open();
     
                    //1 - selection des offres
                    OracleCommand macom = new OracleCommand(selectRDV, maconnexion);
                    OracleDataReader monreader = macom.ExecuteReader();
                   // Models.Rdv daterdv;
                  //  Models.Rdv societe;
     
     
                    List<Models.Rdv> liste = new List<Models.Rdv>();
     
                    while (monreader.Read())
                    {
                        liste.Add(new Models.Rdv()
                        {
                            daterdv = monreader.GetString(0),
                            societe = monreader.GetString(1),
                            heure = monreader.GetString(2),
                            lieu = monreader.GetString(3),
                            contact = monreader.GetString(4),
     
     
     
     
                        //.......
                    });
     
     
                    }
    ..............
    ...............
     
    }
     
    etl à ma page s'affiche normalement, je pense avoir saisie le principe ^
    et dans ma vue, j'ai bien mon tableau avec ma liste qui s'affiche

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MVC] Problème d'accés aux données d'un formulaire
    Par reeda dans le forum Spring Web
    Réponses: 1
    Dernier message: 19/01/2009, 16h05
  2. Problème d'acces aux données d'une liste Chainée
    Par Le Payton dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2007, 12h00
  3. Problème d'accès aux données
    Par phinks94 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/06/2007, 12h40
  4. [MVC][SQLServer 2005 trial] problème d'accès aux données
    Par olivier57b dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/02/2007, 12h23
  5. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 10h13

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