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 MVC Discussion :

Procedure stockee avec parametre dans le contr�leur [D�butant]


Sujet :

ASP.NET MVC

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut Procedure stockee avec parametre dans le contr�leur
    Bonsoir,

    J'ai un petit soucis que je n'arrive pas � r�soudre malgr� mes multiples recherches.

    En effet, j'ai une proc�dure stock�e qui attend un param�tre (l'id du client) afin d'effectuer un select.

    Sur SQL tout se passe bien, quand j'exec j'ai le r�sultat voulu..

    Par contre sous MVC j'ai un 'bug' par rapport (je pense) � mon param�tre...

    Voici des exemples de mon code:

    Mon contr�leur:


    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using DAL;
     
    namespace EphecAirlinesClient.Controllers
    {
        public class OverviewController : Controller
        {
     
            private Ephec_AirlinesEntities contexteEF = new Ephec_AirlinesEntities();
     
            // GET: Overview
            public ActionResult Index(int? id)
            {
     
                return View(contexteEF.Sp_Select_All_Reservation_By_Id_Client(id));
            }
        }
    }

    Ma proc�dure stock�e (qui fonctionne):

    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
    ALTER PROCEDURE [dbo].Sp_Select_All_Reservation_By_Id_Client
    @IdClient INT
    AS
    BEGIN
     
    	SET NOCOUNT ON;
     
    	SELECT	r.RES_Id AS "Réservation n°",
    			p.PLA_Date AS "Date du vol", 
    			vdepart.VIL_Libelle AS 'Départ', 
    			varrivee.VIL_Libelle AS 'Arrivée', 
    			r.RES_Prix_Total AS "Prix total"
    			FROM Reservation r
    			JOIN Client AS c
    			ON c.CLI_Id = r.RES_Client_Id
    			JOIN Planning p
    			ON p.PLA_Id = r.RES_Pla_Id
    			JOIN Vol AS v
    			ON v.VOL_Id = p.PLA_Vol_Id
    			JOIN Ville AS vdepart
    			ON vdepart.VIL_Id = v.VOL_Vil_Depart_Id
    			JOIN Ville AS varrivee
    			ON varrivee.VIL_Id = v.VOL_Vil_Arrivee_Id
    			WHERE c.CLI_Id = @IdClient
    END
    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
    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
    @model DAL.Sp_Select_All_Reservation_By_Id_Client_Result
     
    @{
        ViewBag.Title = "Visualiser mes vols";
    }
     
    <h2>Visualiser mes vols</h2>
     
    <div>
        <hr />
        <dl class="dl-horizontal">
            <dt>
                @Html.DisplayNameFor(model => model.Réservation_n_)
            </dt>
     
            <dd>
                @Html.DisplayFor(model => model.Réservation_n_)
            </dd>
     
            <dt>
                @Html.DisplayNameFor(model => model.Date_du_vol)
            </dt>
     
            <dd>
                @Html.DisplayFor(model => model.Date_du_vol)
            </dd>
     
            <dt>
                @Html.DisplayNameFor(model => model.Départ)
            </dt>
     
            <dd>
                @Html.DisplayFor(model => model.Départ)
            </dd>
     
            <dt>
                @Html.DisplayNameFor(model => model.Arrivée)
            </dt>
     
            <dd>
                @Html.DisplayFor(model => model.Arrivée)
            </dd>
     
            <dt>
                @Html.DisplayNameFor(model => model.Prix_total)
            </dt>
     
            <dd>
                @Html.DisplayFor(model => model.Prix_total)
            </dd>
     
        </dl>
    </div>
    <p>
        @Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
        @Html.ActionLink("Back to List", "Index")
    </p>
    Mon message d'erreur:

    Erreur du serveur dans l'application '/'.
    L'�l�ment de mod�le pass� dans le dictionnaire est de type � System.Data.Entity.Core.Objects.ObjectResult`1[DAL.Sp_Select_All_Reservation_By_Id_Client_Result] �, mais ce dictionnaire requiert un �l�ment de mod�le de type � DAL.Sp_Select_All_Reservation_By_Id_Client_Result �.
    Description : Une exception non g�r�e s'est produite au moment de l'ex�cution de la requ�te Web actuelle. Contr�lez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    D�tails de l'exception: System.InvalidOperationException: L'�l�ment de mod�le pass� dans le dictionnaire est de type � System.Data.Entity.Core.Objects.ObjectResult`1[DAL.Sp_Select_All_Reservation_By_Id_Client_Result] �, mais ce dictionnaire requiert un �l�ment de mod�le de type � DAL.Sp_Select_All_Reservation_By_Id_Client_Result �.
    Merci d'avance...

    EDIT:

    J'ajoute le fait que quand j'essaye avec SqlParameter j'ai le probl�me suivant:

    Erreur CS1503 Argument 1*: conversion impossible de 'System.Data.SqlClient.SqlParameter' en 'int?' EphecAirlinesClient C:\Users\j0n\source\Projet\EphecAirlinesClient\EphecAirlinesClient\Controllers\OverviewController.cs 26 Actif
    En gros je sais le faire en ADO.Net sauf que le prof souhaite qu'on fasse une partie d'un projet avec Entity Framework..

  2. #2
    Mod�rateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    F�vrier 2010
    Messages
    3 611
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : CTO
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par Korpin Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    public ActionResult Index(int? id)
    {
        return View(contexteEF.Sp_Select_All_Reservation_By_Id_Client(id));
    }
    Ma vue:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @model DAL.Sp_Select_All_Reservation_By_Id_Client_Result
    Le probleme n'a rien a voir avec la procedure stockee ou meme avec Entity Framework.

    Dans ta vue, tu dis que ton Model doit etre un seul objet de type DAL.Sp_Select_All_Reservation_By_Id_Client_Result.
    Or dans ton controller tu injectes une liste d'objets.

    2 solutions selon ce que tu souhaites faire :

    1 - Tu laisses la vue telle quelle, et tu injectes un objet unique dans le controller, par exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    public ActionResult Index(int? id)
    {
        return View(contexteEF.Sp_Select_All_Reservation_By_Id_Client(id)).FirstOrDefault();
    }
    2 - Tu laisses le controller tel quell et tu modifies la vue pour qu'elle accepte une liste d'objets :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @model List<DAL.Sp_Select_All_Reservation_By_Id_Client_Result>
    Less Is More
    Pensez � utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre chevronn�
    Profil pro
    D�veloppeur freelance
    Inscrit en
    Ao�t 2006
    Messages
    453
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ard�che (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur freelance

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 453
    Par d�faut
    Bonjour,

    Pour ce probl�me
    Citation Envoy� par Korpin Voir le message
    Erreur CS1503 Argument 1*: conversion impossible de 'System.Data.SqlClient.SqlParameter' en 'int?' EphecAirlinesClient C:\Users\j0n\source\Projet\EphecAirlinesClient\EphecAirlinesClient\Controllers\OverviewController.cs 26 Actif
    Remplace dans Index de ton controller id par id.Value.
    int? est diff�rent de int


    Mosco

  4. #4
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut
    Bonsoir

    Merci pour vous r�ponses, j'aurai l'occasion d'essayer cela demain!

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut
    Hello,

    Merci pour vos r�ponses!

    Quand j'ajoute .FirstOrDefault() dans mon contr�leur, ma vue n'accepte plus mon @foreach que voici:
    Apparemment, cela ne fonctionne pas sur des variables de type stored proc
    Auriez-vous une solution?

    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
    @model DAL.Sp_Select_All_Reservation_By_Id_Client_Result
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.R�servation_n_)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Date_du_vol)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.D�part)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Arriv�e)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Prix_total)
            </th>
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.R�servation_n_)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Date_du_vol)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.D�part)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Arriv�e)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Prix_total)
            </td>
            <td>
                @Html.ActionLink("Mettre � jour", "Update", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Supprimer", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
    }
    </table>
    Seconde question, dans ma proc�dure stock�e, j'ai des AS afin de renommer le nom de mes colonnes.
    Hors, quand je lance mon appli, cela ne prend pas en compte les AS.
    Y'a-t-il un moyen de modifier cela � part �crire manuellement le nom de mes colonnes dans mon tableau (cela fonctionne mais j'ai du mal � croire qu'il n'y a pas une solution miracle lol)?

    Grand merci d'avance ;-)

  6. #6
    Mod�rateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    F�vrier 2010
    Messages
    3 611
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : CTO
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par Korpin Voir le message
    Quand j'ajoute .FirstOrDefault() dans mon contr�leur, ma vue n'accepte plus mon @foreach que voici:
    Apparemment, cela ne fonctionne pas sur des variables de type stored proc
    Ca ne veut rien dire une "variable de type stored proc"

    Ta variable est de type Sp_Select_All_Reservation_By_Id_Client_Result.

    Si tu veux faire un foreach tu dois avoir une collection d'objets. Donc tu dois modifier ton model comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @model List<DAL.Sp_Select_All_Reservation_By_Id_Client_Result>
    et supprimer le FirstOrDefault() dans ton controller, afin de transmettre une collection a ta vue.


    Citation Envoy� par Korpin Voir le message
    Seconde question, dans ma proc�dure stock�e, j'ai des AS afin de renommer le nom de mes colonnes.
    Hors, quand je lance mon appli, cela ne prend pas en compte les AS.
    Y'a-t-il un moyen de modifier cela � part �crire manuellement le nom de mes colonnes dans mon tableau (cela fonctionne mais j'ai du mal � croire qu'il n'y a pas une solution miracle lol)?
    En principe tu peux renommer les colonnes dans le model EF. Si tu as mis a jour les noms de colonne apres avoir genere ton model il faut le mettre a jour.
    Less Is More
    Pensez � utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut
    Bonjour!

    Top, je vais donc faire avec une List<>.

    Petite question opti, j'ai tendance � d�clarer une Liste directement dans le contr�leur mais ne vaudrait-il mieux pas que j'utilise un mod�le reprenant les champs ainsi que la liste, que je ferais passer � mon contr�leur?

    Merci beaucoup pour toutes tes r�ponses en tout cas ;-)

    Pour les noms des colonnes, enfait j'utilise un user de ma DB qui n'a acc�s qu'aux stored.. pas aux tables. les AS sont dans ma stored, je me suis dit que cela venait peut-�tre de l� mais je vais checker dans le mod�le EF ce soir.
    Au pire je les modifierai manuellement dans mon code, ce n'est pas bien grave � mon niveau lol.

  8. #8
    Mod�rateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    F�vrier 2010
    Messages
    3 611
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : CTO
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par Korpin Voir le message
    Petite question opti, j'ai tendance � d�clarer une Liste directement dans le contr�leur mais ne vaudrait-il mieux pas que j'utilise un mod�le reprenant les champs ainsi que la liste, que je ferais passer � mon contr�leur?
    Oui tu peux ajuster ton model comme bon te semble. Le principal c'est que pour ton foreach, tu dois disposer d'une liste quelque part : soit le model directement, soit une propriete du model. A toi de voir ce qui est le plus pratique et adapte a ton cas.
    Less Is More
    Pensez � utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut
    Parfait, un grand merci � toi!

    Je devrais pouvoir me d�brouiller avec tous ces �l�ments ;-)

    Je cl�ture en r�solu

    EDIT:

    Voici comment j'ai proc�d�:

    Contr�leur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
            public ActionResult Index(int id)
            {
                var MaListe = contexteEF.Sp_Select_All_Reservation_By_Id_Client(id).ToList();
     
                return View(MaListe);
            }
    Vue:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    @model IEnumerable<DAL.Sp_Select_All_Reservation_By_Id_Client_Result>
    (avec un foreach)

  10. #10
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Mai 2014
    Messages
    153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 153
    Par d�faut
    Bonne chose que ce soit r�solu.
    Regarde maintenant l'architecture.
    Pas de logique, d'appel � la DB dans le controller!
    Bonne continuation.

  11. #11
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 18
    Par d�faut
    @footsteps

    C'est une question que je me suis d�j� plusieurs fois pos�.. m�me si j'utilise Entity Framework, suis-je oblig� de cr�er mes propres mod�les? C'est une convention? Car les mod�les sont d�j� g�n�r�s par EF..
    Je comprends la logique quand je souhaite utiliser plusieurs mod�les dans une m�me vue, mais pour le reste?

    Peux-tu m'�clairer?

    Thx!

  12. #12
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Mai 2014
    Messages
    153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 153
    Par d�faut
    Entityframework cr�e des entit�s. (images des tables de ta BDD)
    Tu devrais cr�er tes Models pour le business et des Viewmodels pour ta vue.
    C'est une gymnastique, mais indispensable.
    Si tu veux, tu mappes d'une couche � l'autre.
    Bonne continuation.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 05/05/2011, 10h58
  2. Appeler Requete avec parametre dans Procedure
    Par shadockgreg dans le forum Requ�tes et SQL.
    R�ponses: 4
    Dernier message: 08/09/2006, 12h25
  3. Requete Action avec parametre dans formulaire
    Par marie10 dans le forum IHM
    R�ponses: 2
    Dernier message: 08/02/2006, 12h02
  4. Procedure stock�e avec ntext dans SQL server 2000
    Par nagababa dans le forum MS SQL Server
    R�ponses: 2
    Dernier message: 20/11/2003, 20h46

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