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 :

[DNN4] Procédure stoquée -> DateTime à null


Sujet :

ASP.NET

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [DNN4] Procédure stoquée -> DateTime à null
    Bonjour à tous,

    Je suis dans une interface DotNetNuke, mais je pense que ça ne change rien.

    J'arrive à cette fonction (que j'ai épuré) qui est liée à une procédure stoquée sur SQL server.
    Si pdDocumentDate est renseignée, c'est OK, mais si je l'ai mis à Null.NullDate, ça plante, il me dit que la date "Doit être compris entre 1/1/1753 12:00:00 AM et 31/12/9999 11:59:59 PM".

    Bien entendu, le champ de la table peut prendre des valeurs nulles.

    Voici mon code (j'ai rajouté le pavé if après avoir eu l'erreur, pour la détourner, mais rien n'y fait.).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public override void Update_Document(DateTime pdDocumentDate) {
                SqlParameter DocumentDate = new SqlParameter("DocumentDate", DBNull.Value);
                if (pdDocumentDate != Null.NullDate) {
                    //DocumentDate.DbType = DbType.DateTime;
                    DocumentDate.Value = pdDocumentDate;
                }
                SqlHelper.ExecuteNonQuery(ConnectionString, GetFullyQualifiedName("UpdateDocument"), DocumentDate);
            }
    En fait, je crois qu'il faut remplacer le Null.NullDate par le DBNull.Value (car si je met DBNull.Value direct dans la fonction, ca fonctionne), mais ce sont des types incompatibles.

    Je crois que j'ai tout essayé... J'explose !

    Pouvez vous m'aider ?

    Merci d'avance.
    David.

  2. #2
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Bonjour,

    As-tu déja essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!pdDocumentDate is DBNull)

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Jmichou972,

    Merci pour ta rapidité.

    Je ne vois pas ou tu veux en venir...

    Ma condition fonctionne (enfin, elle ne plante pas en tout cas).

    Le pb est que ma fonction attend un paramètre de type dateTime, et que si jamais la valeur est Null.NullDate, ça plante.
    Dans ce cas, il faut mettre DBNull.Value.

    Seulement, on ne peut pas faire:
    datetime dt = (pdDocumentDate != Null.NullDate) ? pdDocumentDate : DBNull.Value;

    A mon grand regret.
    David.

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

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par dacid Voir le message
    Bonjour Jmichou972,

    Merci pour ta rapidité.

    Je ne vois pas ou tu veux en venir...

    Ma condition fonctionne (enfin, elle ne plante pas en tout cas).

    Le pb est que ma fonction attend un paramètre de type dateTime, et que si jamais la valeur est Null.NullDate, ça plante.
    Dans ce cas, il faut mettre DBNull.Value.

    Seulement, on ne peut pas faire:
    datetime dt = (pdDocumentDate != Null.NullDate) ? pdDocumentDate : DBNull.Value;

    A mon grand regret.
    tu dois pouvoir faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(pdDocumentDate != Null.NullDate)
       dt = pdDocumentDate;
    else
       dt = DBNull.Value;

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Non, j'ai l'erreur:
    Impossible de convertir implicitement le type 'System.DBNull' en 'System.DateTime'
    J'ai vu des trucs sur Convert.DBNull, je pense que ca pourrait être une piste, par contre, je ne sais pas m'en servir...
    David.

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

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    En fait on s'en fiche de dt non?
    faut plutot faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (pdDocumentDate == Null.NullDate)
         DocumentDate.Value = DBNull.Value;
    else 
        DocumentDate.Value = pdDocumentDate;

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bin en fait, je ne sais pas pourquoi, mais ça ne fonctionne pas.
    Je ne doit pas utiliser SqlParameter comme il faut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                SqlParameter BuildDate = new SqlParameter("BuildDate", pdBuildDate);
                if (pdBuildDate == Null.NullDate) {
                    //BuildDate.DbType = DbType.DateTime2;
                    BuildDate.Value = DBNull.Value;
                }
    Et ça, quoi que je fasse me met une date vide...

    Il faut savoir que ma procédure stoquée a beaucoup plus de parametres (dont 3 dates qui peuvent être null)
    David.

Discussions similaires

  1. datetime null dans requete sql parametrée
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 15/06/2009, 18h58
  2. lancer une procédures stoquées par deux threads
    Par Zied Ouardani dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/01/2008, 20h40
  3. Changer procédure stoquée
    Par benji_dv dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 12/12/2007, 15h27
  4. Réponses: 3
    Dernier message: 02/03/2007, 11h41

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