Erreur: La conversion d'un type de données nvarchar en un type de données smalldatetime a entraîné une valeur hors plage

Hey tout ce que j'essaie de faire la requête d'insertion suivante

SqlDataSource userQuizDataSource = new SqlDataSource(); userQuizDataSource.ConnectionSsortingng = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=quizApp;Integrated Security=True"; userQuizDataSource.InsertCommand = "INSERT INTO [UserQuiz] ([DateTimeComplete], [Score], [UserName]) VALUES (@DateTimeComplete, @Score, @UserName)"; userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToSsortingng()); userQuizDataSource.InsertParameters.Add("Score", score.ToSsortingng()); userQuizDataSource.InsertParameters.Add("UserName", User.Identity.Name); int rowsAffected = userQuizDataSource.Insert(); 

Buti continue d'get l'erreur suivante:

La conversion d'un type de données nvarchar en un type de données smalldatetime a abouti à une valeur hors plage. La déclaration a été résiliée.

Quelqu'un peut m'aider?

Que renvoie votre instruction DateTime.Now.ToSsortingng() ??

Quels sont les parameters linguistiques et régionaux attendus par SQL Server?

Avez-vous une incompatibilité là-bas ??? Peut-être que votre .NET renvoie un format MM/dd/yyyy , tandis que SQL Server attend dd/MM/yyyy (ou vice versa).

Essayez ce code dans votre SQL Server:

 DECLARE @test TABLE (smalldate SMALLDATETIME) INSERT INTO @test VALUES ('02/21/2010 22:00:32') -- SELECT * FROM @test 

Remplacer ma string là avec quelle sortie vous avez à partir DateTime.Now.ToSsortingng() de .NET – est-ce que cela fonctionne? Est-ce que SQL Server vous donne un meilleur message d'erreur?

Ensuite, essayez d'utiliser le format ISO-8601 pour les dates (AAAAMMJJ) – cela fonctionne pour tous les parameters régionaux et linguistiques dans SQL Server – est-ce que cela fonctionne?

 DECLARE @test TABLE (smalldate SMALLDATETIME) INSERT INTO @test VALUES ('20100221 22:00:32') -- SELECT * FROM @test 

J'ai eu le même problème en ajoutant datetime.now dans ma colonne SQL Server 'Date' définie sur le type de données SmallDateTime.

Pour résoudre c'était assez simple (après de nombreuses tentatives !!)

 ssortingng currentdatetime= DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day + " " + DateTime.Now.Hour+(":")+DateTime.Now.Minute+(":")+DateTime.Now.Second 

Cela returnnera la date dans le format que le server attendra

Essayez de changer ceci:

 userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToSsortingng()); 

pour ça:

 userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToSsortingng()); 

Essayez de ne pas convertir votre date en string:

 userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now); 

Edit: Essayez ceci:

 userQuizDataSource.InsertParameters.Add("DateTimeComplete", TypeCode.DateTime, DateTime.Now.ToSsortingng()); 

Il y a une autre façon de simplement passer l'object réel, mais je ne me souviens pas .. désolé.

Dans Windows 8, si vous êtes confronté à ce problème, même après avoir modifié les Formats dans l'location ci-dessous

Panneau de configuration -> Région

Vous devez toujours transférer ces parameters à vos users. Dans la même window, allez dans l'onglet "Administratif", click les parameters de copy.

Cochez les cases appropriées et click OK .