2011-08-19 7 views
2

J'ai une petite question sur les procédures stockées et le DateTime2 type de données dans SQL Server 2008.SQL Server 2008 procédure stockée avec DateTime2

je suis arrivé plusieurs procédures stockées en utilisant le DateTime2 type de données et je veux insérer la date 0001.01.01 00:00:00 mais ne fonctionnera pas avec VB.net et je ne peux pas trouver la raison pour laquelle.

J'utilise ce fragment de code:

Dim sqlStatement As New SqlClient.SqlCommand 
Dim sqlTransaction As SqlClient.SqlTransaction 
sqlStatement.CommandType = CommandType.StoredProcedure 
sqlStatement.CommandText = "SCHEMA.spInsertDate" 
sqlStatement.Parameters.AddWithValue("@Date", "0001.01.01 00:00:00") 
sqlStatement.ExecuteNonQuery() 

pour appeler les procédures stockées de mon programme (la procédure stockée est simple, rien d'autre déclaration INSERT et fonctionne très bien avec les dates réelles). Mais quand j'entre la date 0001.01.01 00:00:00 il vient toujours avec l'erreur que je ne peux pas insérer des dates avant '01 .01.1753 'quand je veux exécuter la procédure stockée.

Maintenant, je sais déjà que le type de données DateTime2 dans SQL Server doit prendre en charge cela. Donc, ma question est qu'il est possible que ce soit un problème de pilote et que la mise à jour de SQLClient résoudrait ce problème, ou est-ce un problème général et je peux enfin arrêter de chercher et utiliser simplement 1753.01.01.

Merci Lim

Répondre

6

Si vous ne spécifiez rien pour votre paramètre SQL et utilisez la méthode .AddWithValue(), je crois ADO.NET par défaut à utiliser SqlDbType.DateTime qui a cette limitation dans sa gamme (aucune date avant 1/1/1753).

Vous devez définir explicitement le type de données de votre paramètre avec cet appel:

SqlParameter dateTime2Param = sqlStatement.Parameters.Add("@Date", SqlDbType.DateTime2); 
dateTime2Param.Value = "0001.01.01 00:00:00"; 

Ensuite, il faut travailler, je crois. L'énumération SqlDbType avait ce type DateTime2 ajouté dans .NET 3.5

+0

Merci! Cela fonctionne :) – Lim

+0

@Lim: oui, le '.AddWithValue()' est pratique - mais un peu dangereux parfois, car ce n'est pas toujours évident dès le début ce que 'SqlDbType' sera choisi pour votre valeur fournie. Je préfère toujours dire ** explicitement ** au paramètre quel 'SqlDbType' il est - moins la possibilité d'une surprise (méchante) ... –

+0

Je vois ce que vous voulez dire c'est la première fois que j'ai rencontré un problème avec le .AddWithValue() Fonction. Je garderai cela à l'esprit pour les futurs programmes :) Merci beaucoup d'avoir clarifié ça :) – Lim

Questions connexes