Erreur lors de la conversion du type de données varchar datetime lors de l'exécution de SQL brut, mais pas quand on l'appelle par LINQ to SQL
Un client est d'avoir une erreur lors de l'exécution de mon code. Ils m'ont envoyé le SQL de profilder.
Quand je l'ai coller dans SQL Server Management Studio, il échoue avec: Erreur de conversion de type de données varchar datetime
Toutefois, il ne faut pas en panne quand je le lance sur mon local de la boîte de dev ou de l'autre des clients de la production sever.
Pour tester, j'ai créé une application simple avec un L2S datacontext contenant une entité qui ressemble à quelque chose comme:
public class UserAccount
{
public int Id { get; set; }
public string Username { get; set; }
public DateTime? LastActivity { get; set; }
}
L'insertion d'un enregistrement, puis le mettre à jour:
var account = db.UserAccounts.Single(a => a.Username == "Mojo");
account.LastActivity = DateTime.Now;
db.SubmitChanges();
Les enregistrements est mise à jour dans la base de données. Mais quand je prends le T-SQL Profiler:
exec sp_executesql N'UPDATE [UserAccount] SET [LastActivity] = @p2 WHERE ([Id] = @p0) AND ([Username] = @p1) AND ([LastActivity] IS NULL)',N'@p0 int,@p1 nvarchar(4),@p2 datetime',@p0=1,@p1=N'Mojo',@p2='2009-11-10 14:04:41.7470000'
et de l'exécuter dans SQL Server Management Studio-je obtenir: Erreur de conversion de type de données varchar datetime
Ce qui me manque?
LastActivity DateTime null
OriginalL'auteur Pauly | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Êtes-vous en utilisant les mêmes connexions dans Management Studio comme dans votre application de test? Il semble que cela n'est pas le cas, les connexions ont différents paramètres régionaux, causant la date à être analysée différemment.
OriginalL'auteur MartW
Le problème est avec le supplément de zéros à la fin de la date:
Les quatre zéros sont probablement à peine visible dans le débogueur Visual Studio. LINQ n'est pas envoyé à SQL Server.
OriginalL'auteur Andomar
Différentes versions de SQL Server peut-être?
Les zéros supplémentaires à la date d'en faire un datetime2 type qui serait acceptable en 2008 mais pas en 2005.
OriginalL'auteur Philip Bathe
DATETIME
ne devrait avoir que 3 chiffres après la deuxième,DATETIME2
a 7 chiffres après la deuxième. Semble que la chaîne est mise en forme pourDATETIME2
.OriginalL'auteur Damir Sudarevic
J'ai eu cette erreur une fois que j'ai essayé d'Insérer la date en temps que "1/1/0001 12:00:00'
OriginalL'auteur Ananth