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

VB.NET Discussion :

Conversion de date SQL Server


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut Conversion de date SQL Server
    Bonjour,

    j'ai un problème et je ne vois pas vraiment comment je pourrais le résoudre de façon général.

    J'exécute une requête dans un programme VB.NET à l'aide de OleDb, dans ma requête il y a une clause where sur une date, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE DATEDEMANDE = '" & CDate(enreg("DATEDEMANDE")) & "'"
    Le problème est le suivant :

    - Ma machine (ou s'execute mon programme) est en français
    - Le serveur de BDD est en Anglais

    Donc ma requête plante sur la conversion de date (Out-of-range exception), le provider ne convertit donc pas la date comme il faut.

    PS: enreg() est un DataRow.. si ça change qqch

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Par défaut
    Soit tu changes la culture de ton programme, soit tu fais un TO_DATE dans ta requête.

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Tu devrais songer à utiliser des paramètres SQL.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Tu peux préciser SaumonAgile??

    Quel paramètre SQL?

    Si tu penses à la langue du server SQL je n'y est pas accès. De plus ce ne serait pas une solution satisfaisante, mon programme doit marcher sur tout type de serveur...je penais que le provider se chargeait de ce type de conversion

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Citation Envoyé par Akanath Voir le message
    Soit tu changes la culture de ton programme, soit tu fais un TO_DATE dans ta requête.
    TODATE c'est du ORACLE...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    les parametres SQL sont une implémentation de vb.net pour que peu importe les différences d'un type entre le vb et la base de données, ca rentre à tous les coups

    ca doit etre sur l'objet dbcommand
    tu fais .parameters.add("@madate",typedate)
    puis .parameters("@madate").value = now
    (ou meme possibilité de regrouper en une ligne .parameters.add("@madate",typedate).value = now)
    puis ta requete est : insert into values (@madate)

    et ca se débrouille

    pratique aussi pour les chaines de caractères, il est possible d'avoir des string contenant des ' ou des " et ca marche tout seul
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    oulala... mais ça m'a l'air d'être exactement ce que je veux tout ça

    ... si tu as un petit exemple en plus je suis preneur.

    J'essaye ça tout de suite, merci

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Bon, vraissemblablement ya un truc que j'ai mal fait :

    Must declare the scalar variable "@madate".

    Voici le 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
    35
    36
    37
    38
    39
    40
     
     
    Dim ComDoublons As New System.Data.OleDb.OleDbCommand(sql, ConDoublons)
    Dim myTrans_Doublons As OleDb.OleDbTransaction = ConDoublons.BeginTransaction()
    ComDoublons.Transaction = myTrans_Doublons
     
    ComDoublons.Parameters().Add("@madate", OleDb.OleDbType.DBDate)
    ComDoublons.Parameters("@madate").Value = CDate(enreg("DATEDEMANDE"))
     
    Try
      ComDoublons.CommandText = "INSERT INTO SEV_ART_AX_ASP_LOG (ITEMID, ENSEIGNEID, ITEMNAME, NETWEIGHT, PRIMARYVENDORID, " & _
      " SEVNOMPHOTO, SEVNOMLATIN, SEVGARANTIE, SEVMARQUE, SEVCADEAU, SEVCADEAUVALPOINT, " & _
      " SEVCADEAUVALPOINTMIX, SEVCADEAUVALPRIXMIX, SEVCHEQUECADEAU, SEVNOMENCCODE, SEVTHEMECODE, " & _
      " SEVFABRICANTID, BLOCAGEVENTE, SEVINFOTECHNIQUE1, SEVINFOTECHNIQUE2, SEVINFOTECHNIQUE3, " & _
      " REMISABLE, D3EMONTANT, TAXCODE, DESIGNATIONLONGUE, ETIKCLASSE, ETIKUNITCONT, ETIKCONTENANCE, " & _
      " ETIKREFFAB, CODEFOUPREF, ETIKARTICLEETAT, [ACTION], DATEDEMANDE, ETATCOURANT, DATEETATCOURANT, " & _
      " [LOG], LOG_DATE) " & _
      " SELECT ITEMID, ENSEIGNEID, ITEMNAME, NETWEIGHT, PRIMARYVENDORID, " & _
      " SEVNOMPHOTO, SEVNOMLATIN, SEVGARANTIE, SEVMARQUE, SEVCADEAU, SEVCADEAUVALPOINT, " & _
      " SEVCADEAUVALPOINTMIX, SEVCADEAUVALPRIXMIX, SEVCHEQUECADEAU, SEVNOMENCCODE, SEVTHEMECODE, " & _
      " SEVFABRICANTID, BLOCAGEVENTE, SEVINFOTECHNIQUE1, SEVINFOTECHNIQUE2, SEVINFOTECHNIQUE3, " & _
      " REMISABLE, D3EMONTANT, TAXCODE, DESIGNATIONLONGUE, ETIKCLASSE, ETIKUNITCONT, ETIKCONTENANCE, " & _
      " ETIKREFFAB, CODEFOUPREF, ETIKARTICLEETAT, ACTION, DATEDEMANDE, ETATCOURANT, DATEETATCOURANT, " & _
      " 'Doublon : un enregistrement plus récent a été pris en compte', getdate() " & _
      " FROM SEV_ART_AX_ASP WHERE ITEMID = " & enreg("ITEMID") & " AND DATEDEMANDE = @madate"
    ComDoublons.ExecuteNonQuery()
    ComDoublons.CommandText = "DELETE FROM SEV_ART_AX_ASP WHERE ITEMID = " & enreg("ITEMID") & " AND DATEDEMANDE = '" & enreg("DATEDEMANDE") & "'"
    ComDoublons.ExecuteNonQuery()
     
    myTrans_Doublons.Commit()
    Catch e As Exception
     mVueImportArticle = mVueImportAssort() & "IMPOSSIBLE D'INSERER LES LOG : " & e.Message
     myTrans_Doublons.Rollback()
    Finally
     ' FERMETURE DE LA CONNECTION
     ComDoublons.Dispose()
     ConDoublons.Close()
     ConDoublons.Dispose()
     myTrans_Doublons.Dispose()
    End Try

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date sql server
    Par rosros dans le forum JDBC
    Réponses: 6
    Dernier message: 13/09/2006, 16h55
  2. date sql server
    Par rosros dans le forum JDBC
    Réponses: 1
    Dernier message: 04/09/2006, 13h53
  3. Vérification de date [SQL SERVER 2K]
    Par gwadakillah dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/07/2006, 15h17
  4. java et type Date sql server
    Par fadex dans le forum JDBC
    Réponses: 1
    Dernier message: 07/05/2006, 16h54
  5. Convertion des dates SQL Server
    Par sdelaunay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/08/2005, 09h22

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