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 :

'Invalid cast from 'System.DateTime' to 'System.TimeSpan'.'


Sujet :

ASP.NET MVC

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Points : 8
    Points
    8
    Par défaut 'Invalid cast from 'System.DateTime' to 'System.TimeSpan'.'
    Je travail sur une application mvc c# et j'essaye d'importer un fichier excel à ma base de données dans sql server, le probleme c'est quand j'importe le fichier et j’exécute la méthode, l'erreur suivante s'affiche: 'Invalid cast from 'System.DateTime' to 'System.TimeSpan'.'
    Voila les méthodes que j'utilise dans 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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    public ActionResult ExcelUpload()
    {
        return View();
    }
     
    [HttpPost]
    public ActionResult UploadExcel(Réception_camions objEmpDetail, HttpPostedFileBase FileUpload)
    {
        Réception_phosphateEntities objEntity = new Réception_phosphateEntities();
        string data = "";
     
        if (FileUpload != null)
        {
            if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
            {
                string filename = FileUpload.FileName;
     
                if (filename.EndsWith(".xlsx"))
                {
                    string targetpath = Server.MapPath("~/DetailFormatInExcel/");
                    FileUpload.SaveAs(targetpath + filename);
                    string pathToExcelFile = targetpath + filename;
     
                    string sheetName = "Sheet1";
     
                    var excelFile = new ExcelQueryFactory(pathToExcelFile);
                    var empDetails = from a in excelFile.Worksheet<Réception_camions>(sheetName) select a;
     
                    // L'erreur  ( Invalid cast from 'System.DateTime' to 'System.TimeSpan')se produit dans cette ligne:
     
                    foreach (var a in empDetails)
                    {
                        if (a.Date_d_arrivée != null )
                        {
                            DateTime Date_d_arrivée = (a.Date_d_arrivée);
                            int Id_qualité = Convert.ToInt32(a.Id_qualité);
     
                            int result = PostExcelData(a.Date_d_arrivée, a.heure_d_arrivée, a.Poids_cam,/* myBirthdate,*/ a.Id_cam, a.Id_qualité /*a.PostelCode, a.EmailId*/);
     
                            if (result <= 0)
                            {
                                data = "Hello User, Found some duplicate values! Only unique employee number has inserted and duplicate values(s) are not inserted";
                                ViewBag.Message = data;
                                continue;
                            }
                            else
                            {
                                data = "Successful upload records";
                                ViewBag.Message = data;
                            }
                        }
                        else
                        {
                            data = a.Date_d_arrivée + "Some fields are null, Please check your excel sheet";
                            ViewBag.Message = data;
                            return View("ExcelUpload");
                        }
                    }
                }
                else
                {
                    data = "This file is not valid format";
                    ViewBag.Message = data;
                }
     
                return View("ExcelUpload");
            }
            else
            {
                 data = "Only Excel file format is allowed";
     
                 ViewBag.Message = data;
                 return View("ExcelUpload");
            }
        }
        else
        {
             if (FileUpload == null)
             {
                 data = "Please choose Excel file";
             }
     
             ViewBag.Message = data;
             return View("ExcelUpload");
        }
    }
     
    public int PostExcelData(DateTime Date_d_arrivée, TimeSpan heure_d_arrivée, Decimal Poids_cam, int Id_cam, int Id_qualité)
    {
        Réception_phosphateEntities DbEntity = new Réception_phosphateEntities();
        var InsertExcelData = DbEntity.usp_InsertNewEmployeeDetails(Date_d_arrivée, heure_d_arrivée, Poids_cam, Id_cam, Id_qualité );
     
        return InsertExcelData;
    }
    et ça c'est la procédure stockée que j'utilise dans sql server:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ALTER PROCEDURE [dbo].[usp_InsertNewEmployeeDetails]  
        (@Date_d_arrivée DATETIME = NULL,  
         @heure_d_arrivée TIME(7) = NULL,  
         @Poids_cam DECIMAL(18, 2) = null,  
         @Id_cam INT = NULL, 
         @Id_qualité INT = NULL)
    AS 
    BEGIN
        INSERT INTO Réception_camions([Date d'arrivée], [heure d'arrivée], Poids_cam,  
                                       Id_cam, Id_qualité)  
        VALUES (@Date_d_arrivée, @heure_d_arrivée, @Poids_cam,  
                @Id_cam, @Id_qualité)  
    END

  2. #2
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Bonjour,

    C'est étrange, je ne vois pas de try...catch, normalement la page d'erreur devrait indiquer sur quelle ligne se produit l'erreur.

    Je me méfie de la date d'arrivée, fractionnée en deux champs, date, et heure, plutôt qu'un champ DateHeure.

    Est-ce que quelque part dans le projet on soustrait deux date/heure ? Ou est-ce qu'on les ajoute ?

  3. #3
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Points : 1 271
    Points
    1 271
    Par défaut
    Salut,

    C'est quoi ces apostrophes dans ta procédure :

    INSERT INTO Réception_camions([Date d'arrivée], [heure d'arrivée] ???
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  4. #4
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Oui, je n'ai pas relevé, mais aussi les caractères accentués et les espaces, dans les noms de champs ou les noms de variables, ce n'est pas trop une bonne idée, non plus, même si là on peut admettre que ça ait peut-être moins gêné.

    Avec des noms écrits tout d'une traite, l'usage des majuscules permet de marquer des coupures de mots le cas échéant. D'ailleurs on peut mettre une majuscule au début ou pas, selon le cas (champ, nom de propriété ...).

    Voir recherche sur "Conventions de nommage".

    Citation Envoyé par Gluups Voir le message
    Est-ce que quelque part dans le projet on soustrait deux date/heure ? Ou est-ce qu'on les ajoute ?
    En fait, en lisant mieux, les données viennent d'un fichier Excel, si il y a un champ heures (une colonne heures, pour se rapprocher de la terminologie Excel), il va être interprété comme une différence entre deux date/time.

    Et ça, il ne faut pas oublier de le gérer.

    Si il est question d'une heure à une date qui est indiquée dans une autre cellule, ne pas négliger de faire le calcul avant l'import. La date est la partie entière, on y ajoute au besoin l'heure, et à l'arrivée on doit obtenir sous C# un DateTime.

    A noter que pour faire les imports Excel, vers SQL Server, il existe SSIS, qui est fait pour ça (il peut aussi importer des fichiers texte). ça mérite de passer un peu de temps pour apprendre à s'en servir, il y a des contrôles intégrés dedans, de façon à être prévenu proprement si les données ne se présentent pas sous la forme prévue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/03/2012, 17h16
  2. Des indexes invalides appartenant aux schémas SYS et SYSTEM
    Par smaildba dans le forum Administration
    Réponses: 3
    Dernier message: 21/12/2009, 15h49
  3. Réponses: 4
    Dernier message: 15/08/2007, 16h47
  4. System.DateTime où System.TimeSpan ?
    Par cork1e dans le forum VB.NET
    Réponses: 5
    Dernier message: 31/05/2007, 14h59
  5. [C++ 2.0] Comment convertir un ULONG en System::DateTime ?
    Par hrp dans le forum Framework .NET
    Réponses: 1
    Dernier message: 22/06/2006, 20h20

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