错误:将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
。