错误:将nvarchar数据类型转换为smalldatetime数据类型会导致超出范围的值

嘿所有我正在尝试执行以下插入查询

SqlDataSource userQuizDataSource = new SqlDataSource(); userQuizDataSource.ConnectionString = "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.ToString()); userQuizDataSource.InsertParameters.Add("Score", score.ToString()); userQuizDataSource.InsertParameters.Add("UserName", User.Identity.Name); int rowsAffected = userQuizDataSource.Insert(); 

Buti不断收到以下错误:

将nvarchar数据类型转换为smalldatetime数据类型会导致超出范围的值。 该语句已终止。

谁能帮我吗?

你的语句DateTime.Now.ToString()返回什么?

您的SQL Server期望的语言和区域设置是什么?

你有不匹配吗? 也许您的.NET返回MM/dd/yyyy格式,而SQL Server期望dd/MM/yyyy (反之亦然)。

在SQL Server中尝试此代码:

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

用.NET的DateTime.Now.ToString()替换我的字符串 – 这有用吗? SQL Server是否为您提供了更好的错误消息?

接下来,尝试使用ISO-8601格式的日期(YYYYMMDD) – 这适用于SQL Server中的所有区域和语言设置 – 这是否有效?

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

我有同样的问题将datetime.now添加到我的SQL服务器列’Date’设置为数据类型SmallDateTime。

解决它很简单(经过多次尝试!!)

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

这会将日期返回到服务器期望的格式

尝试改变这个:

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

对此:

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

请勿尝试将日期转换为字符串:

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

编辑:然后尝试:

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

还有另一种方法可以传递实际对象,但我记不清了……抱歉。

在Windows 8中,如果您在以下位置更改Formats后仍遇到此问题

控制面板 – >区域

您仍然需要将这些设置传输给您的用户。 在同一窗口中,转到“管理”选项卡,单击复制设置。

选中相应的复选框,然后单击“ OK