嘿所有我正在尝试执行以下插入查询
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数据类型的结果 在超出范围的价值。 声明已经终止。
任何人都可以帮助我吗?
答案 0 :(得分:3)
你的陈述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中的 ALL 区域和语言设置 - 这是否有效?
DECLARE @test TABLE (smalldate SMALLDATETIME)
INSERT INTO @test VALUES ('20100221 22:00:32') --
SELECT * FROM @test
答案 1 :(得分:1)
我在将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
这会将日期返回到服务器期望的格式
答案 2 :(得分:0)
尝试更改此内容:
userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString());
到此:
userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString());
答案 3 :(得分:0)
请勿尝试将日期转换为字符串:
userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now);
编辑:然后尝试:
userQuizDataSource.InsertParameters.Add("DateTimeComplete", TypeCode.DateTime, DateTime.Now.ToString());
还有另一种方法可以传递实际对象,但我记不清了......抱歉。
答案 4 :(得分:0)
在Windows 8中,如果您在更改以下位置的Formats
后面临此问题
控制面板 - >区域
您仍然需要将这些设置传输给您的用户。在同一窗口中,转到“管理”选项卡,单击复制设置。
选中相应的复选框,然后点击OK
。