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

C# Discussion :

Problème avec date nullable


Sujet :

C#

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut Problème avec date nullable
    Bonjour,

    J'ai un problème concernant la recherche d'une date sous SQL SERVER quand celle-ci est nulle, je m'explique :

    J'ai une procédure stockée suivante qui à partir d'un id une date de début et une date de fin, me retourne un objet 'PeriodVO' :

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[ROCK_GET_PROTECTION_PREMIUM_PERIOD_BY_DATES]
    @contractId int,
    @startDate datetime,
    @endDate datetime
    AS
    BEGIN

    SET NOCOUNT ON;

    SELECT [protection_premium_periods].[protection_premium_period_id]
    ,[protection_premium_periods].[contract_id]
    ,[protection_premium_periods].[start_date]
    ,[protection_premium_periods].[cut_off_end_date]
    ,[protection_premium_periods].[html_text]
    ,[protection_premium_periods].[created]
    ,[protection_premium_periods].[modified]
    FROM [dbo].[protection_premium_periods]
    WHERE [contract_id]= @contractId
    AND convert(datetime, [start_date], 103) = convert(datetime, @startDate, 103)
    AND convert(datetime, [cut_off_end_date], 103) = convert(datetime, @endDate, 103)
    --AND ISNULL(CONVERT(varchar, [cut_off_end_date], 108), '1/1/0001') = @endDate
    --OR ISNULL(CONVERT(varchar, [cut_off_end_date], 108), '1/1/0001') = @endDate

    END
    Celle-ci marche bien quand les valeurs de @startDate et @endDate ne sont pas nulles, mais quand l'une d'elle est nulle cela foire.

    J'ai un DataSet typé qui prend le code suivant :

    DsProtectionPremiumPeriods.ROCK_PROTECTION_PREMIUM_PERIODDataTable dt =
    ta.GetProtectionPremiumPeriodByDates(contractId,
    startDate != DateTime.MinValue ? startDate : (DateTime?)null,
    endDate != DateTime.MinValue ? endDate : (DateTime?)null);
    En base j'ai un enregistrement ayant pour id 353, startDate = '01/01/2008' et endDate = 'NULL'.

    lorsque j'exécute le code, il ne me trouve pas l'enregistrement.

    J'ai vraiment essayé plein de trucs, notamment en regardant l'exemple ici http://stackoverflow.com/questions/218808?sort=newest, mais ça ne marche pas.

    Quelqu'un saurait comment cela fonctionne ?

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    J'ai trouvé, il faut mettre 'set ANSI_NULLS OFF', mais il parait que ça n'est pas recommandé, pourquoi donc ? merci

Discussions similaires

  1. [Dates] problème avec date et mktime
    Par gloubi dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2007, 17h59
  2. [Dates] Problème avec date (heure qui varie)
    Par Death83 dans le forum Langage
    Réponses: 10
    Dernier message: 05/08/2006, 02h19
  3. Problème avec date dans requête
    Par alain94 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 07h49
  4. Problème avec "Date()" en mode runtime
    Par bwalbourg dans le forum Runtime
    Réponses: 1
    Dernier message: 25/01/2006, 10h51
  5. [MySQL] Problème avec DATE SUB et INTERVAL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/01/2006, 00h36

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