2010-03-01 11 views
4

J'utilise MS SQL 2000, VS2008, MVC et C#.format de date et paramètres régionaux

J'essaie d'insérer et de mettre à jour certaines données en utilisant des procédures stockées. Certaines colonnes sont de type datetime. Les paramètres régionaux du serveur et du client sont définis sur Néerlandais (Belgique) Cela signifie que le format de date par défaut est jj/mm/aaaa. Lorsque j'essaie d'insérer ou de mettre à jour avec une date de par exemple. 28/03/2009, je reçois des erreurs suivantes:

Insérer: Erreur de conversion nvarchar type de données datetime

Mise à jour: La conversion d'un type de données char à un type de données datetime a donné lieu à un hors de -range datetime value

Lorsque j'essaie avec une date comme 01/03/2009, je ne reçois aucune erreur mais la date est enregistrée en tant que 03/01/2009, qui est le format de date américain. Ceci est un comportement typique pour les problèmes avec les paramètres régionaux. Mais les deux sont mis en néerlandais (Belgique). Pourquoi enregistre-t-il des dates au format américain? Pourquoi?
Qu'est-ce qui me manque ici?

Merci!
Stijn

Répondre

3

Vous devez insérer des données dans la base de données à l'aide d'un objet DateTime et non d'une chaîne. Votre code côté client doit convertir l'entrée de date du client en un objet DateTime en utilisant les paramètres régionaux du client, puis la structure DateTime doit être ajoutée au paramètre qui est finalement envoyé dans la base de données.

+0

merci David qui a fait l'affaire! –

1

L'instance SQL a ses propres paramètres régionaux, par défaut « us_english »

Maintenant, cela se produit généralement si vous pousser en utilisant varchar plutôt que datetime native aux valeurs de données du magasin. Si votre code/vos tables utilisent des colonnes datetime et que vous définissez des paramètres en tant que datetime, vous n'obtiendrez pas d'erreurs.

1

j'avais ce problème aussi, ses quelque chose à voir avec le format de date pour votre serveur SQL,

i résolu par le formatage de la chaîne de date à insérer comme si

DateTime.Now.ToString("MM/dd/yyyy HH:mm") 

espoir qui aide

1

Toutes les suggestions ci-dessus sont correctes mais je trouve si vous ajoutez un datetime en tant que chaîne/varchar le plus sûr moyen est au format « AAAA-MM-JJ »

Donc, par exemple.

Update MyTable 
    Set MyDate = '2010-03-01'