Comment empêcher une erreur de valeur de date-heure hors plage?

Je passe une instruction Insert ad-hoc de l'application c # au server sql 2000/2005. Parfois, si la machine (où sql server est installé) le format datetime est différent de ce que je transmets, elle génère une erreur.

Par exemple: Dans l'instruction Insert, je passe '2010-03-10 00: 00: 00-05: 00', mais la date de la machine est différente. Je reçois cette erreur: –

La conversion d'un type de données char en un type de données datetime a abouti à une valeur de date-heure hors plage.

Puis-je passer un format de date générique dans l'instruction Insert de c # qui fonctionne parfaitement avec tous les parameters de date et heure régionaux de la machine.

"yyyymmdd" est le plus sûr, le format de base ISO-8601. "aaaa-mm-jj" a des problèmes que le lien ci-dessous mentions

Avec des time: "yyyymmdd hh: mm: ss"

SQL Server peut être légèrement étrange lorsqu'il s'agit de datetimes. Il est principalement corrigé dans SQL Server 2008 avec les nouveaux formats de date et d'heure. L' article définitif de Tibor Karaszi

Edit: Et un autre article de Tony Rogerson pour les non-croyants

Plutôt que de créer dynamicment votre instruction d'insertion SQL sous forme de strings, si vous utilisez des procédures stockées ou des requêtes paramétrées, vous pouvez transmettre la valeur C # datetime en tant qu'object datetime et il n'y aura pas de différence de format pour provoquer des problèmes.

[Correction – ceci ne fonctionne que sur SQL 2008, voir la réponse de gbn pour une string valide 2000/2005]
Alternativement, je crois que, indépendamment des parameters régionaux des servers SQL, si vous passez votre date comme une string ISO 8601 complète, il sera géré correctement.

Par exemple

2010-03-10T14:17Z 

Personnellement, je reorderais des requêtes paramétrées ou des procédures stockées, car elles résolvent beaucoup d'autres problèmes aussi.