5

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

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 数据类型会导致值超出范围。该语句已终止。

谁能帮我吗?

4

5 回答 5

4

你的声明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
于 2010-02-21T21:59:25.297 回答
1

我在将 datetime.now 添加到我的 SQL 服务器列“日期”设置为数据类型 SmallDateTime 时遇到了同样的问题。

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

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

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

于 2011-04-14T08:41:38.150 回答
0

尝试改变这个:

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

对此:

userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString());
于 2010-02-21T21:40:23.873 回答
0

尝试不要将您的日期转换为字符串:

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

编辑:然后试试这个:

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

还有另一种方法可以传递实际对象,但我不记得了..对不起。

于 2010-02-21T21:41:35.587 回答
0

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

控制面板 -> 区域

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

选择适当的复选框并单击OK

于 2013-04-18T12:12:01.930 回答