2016-02-02 2 views
0

J'ai une table SQL que j'essaie de lire dans mon application, qui contient une colonne datetime. Lorsque je remplis un DataTable en utilisant SqlDataAdapter dans mon application, il tronque l'année en une année à deux chiffres (donc 1/1/1999 ou 1/1/2099 montrent tous les deux 1/1/99).SqlDataAdapter tronque DateTime à 2 chiffres Année

Dim dt As DataTable 
Using connection As New SqlConnection("...") 
    Dim query As String = "SELECT * FROM [foo]" 
    Dim adapter As New SqlDataAdapter(query, connection) 

    connection.Open() 
    adapter.Fill(dt) 
End Using 

Exécution de la même instruction SELECT directement dans SQL retourne un datetime avec un problème de l'an 4 chiffres, il semble comme un VB et non un problème de SQL.

Comment puis-je m'assurer qu'il lit toute l'année et éviter un bug semblable à celui de l'an 2000?

+2

La date n'a pas de formats. C'est comment l'application que vous utilisez pour voir la date qui décide comment présenter une date dans un format de chaîne sur votre vidéo/imprimante. Quelle application utilisez-vous pour regarder votre champ de données? – Steve

+0

Dans mon application, je remplis un DateTimePicker avec un format de date personnalisé de jj/MM/aaaa, et si la date est définie sur 1/1/2099, le DateTimePicker affiche la date au 1/1/1999. J'ai retracé cela à l'extraction initiale des données, car lorsque je vois le DataTable dans le débogueur après qu'il est rempli, il affiche la date au 1/1/99 et mes paramètres régionaux Windows sont configurés pour deviner deux chiffres entre 1930 et 2029. – Kevin

+0

Qu'est-ce que le DataType dans la base de données? –

Répondre

1

J'ai trouvé la réponse.

Mes paramètres régionaux Windows ont été définis sur une année à deux chiffres. Le DataTable contenait la date complète correctement, mais avant de définir la valeur du DateTimePicker la date conservée dans le DataTable a été convertie en une chaîne qui n'a pas spécifié un format de date spécifique.

Étant donné que le format n'a pas été spécifié, il a utilisé mes paramètres locaux et tronqué les deux premiers chiffres de l'année.

Cela va sans dire, mais soyez prudent lorsque vous convertissez des dates en chaînes, et spécifiez un format spécifique quand cela a du sens. Idéalement, ne pas convertir les dates en chaînes en premier lieu (dans mon cas c'était le code hérité effectuant cette opération)!

+0

'Idéalement, ne convertissez pas les dates en chaînes en premier lieu' +1! – Plutonix