2009-07-13 11 views
0

Je suis aux prises avec un problème MS SQL 2005 Express. Une requête comme celle ci-dessous fonctionne parfaitement lorsque Windows Regional Options (Panneau de configuration) est réglé sur Anglais (États-Unis), mais il échoue lorsqu'il est réglé en italien (et peut-être d'autres langues).SQL Server 2005 Express ne peut pas mettre à jour le champ date/heure lorsque Windows est défini sur Italien

UPDATE MyTable SET StartDate='2009-07-14 12:05:30' WHERE ID=7 

J'ai essayé aussi de nombreux formats différents à temps la date tels que ISO 8601:

yyyy-MM-ddTHH:mm:ss 

(voir aussi: http://www.karaszi.com/SQLServer/info_datetime.asp)

Aucun de ces formats fonctionnent sauf pour aaaaMMjj, mais je perdre le temps qui n'est pas acceptable.

exécution également cette requête fait d'abord aucune différence:

SET LANGUAGE us_english 

PS: J'exécute la requête d'un programme .Net, mais SQL Server Management Studio donne le même résultat: il ne peut pas convertir la chaîne en données -temps. Dès que les paramètres sont modifiés en anglais américain, cela fonctionne à nouveau. Comment faire pour que cette requête fonctionne avec d'autres paramètres de langue?

Répondre

2

Vous devez utiliser des dates indépendantes de la région. Dans SQL Server, vous pouvez le faire:

UPDATE MyTable SET StartDate={ts '2009-07-14 12:05:30'} WHERE ID=7 

De code, il est encore mieux est d'utiliser des paramètres nommés et passer un objet DateTime en tant que paramètre.

+0

Merci cela fonctionne! – Roy

1

Avez-vous essayé yyyymmdd hh: mm: ss format?

UPDATE MyTable SET StartDate='20090714 12:05:30' WHERE ID=7 
+0

Désolé, cela n'a pas fonctionné, mais je pense maintenant que c'était parce que VB.net a remplacé le ":" par ".". Aucune idée pourquoi. – Roy

0

Après quelques heures d'essai, j'ai trouvé la solution. Le format ISO 8601 fonctionne parfaitement dans MS SQL, mais quelque chose s'est mal passé lors du formatage de la date dans VB.net.

D'abord, j'utilisé le spécificateur de format suivant:

Dim dateString As String = aDate.ToString ("yyyy-MM-JJThh: mm: ss")

Cependant, en quelque sorte le résultat est quelque chose comme " 2009-07-14T12.05.30 "au lieu de" 2009-07-14T12: 05: 30 ", donc des points au lieu de": "!

Lorsque vous utilisez

Dim dateString As String = aDate.ToString ("s")

Le format correct est appliqué: "2009-07-14T12: 05: 30".

Questions connexes