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

c11*_*ada 5 c# sql-server ado.net exception-handling sql-insert

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

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();
Run Code Online (Sandbox Code Playgroud)

Buti不断收到以下错误:

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

谁能帮我吗?

mar*_*c_s 5

你的语句返回什么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
Run Code Online (Sandbox Code Playgroud)

将我的字符串替换为您从 .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
Run Code Online (Sandbox Code Playgroud)

  • 我迄今为止使用过的从 .net 到 sql 的最安全的“日期时间”格式是“yyyy-MM-dd HH:mm:ss.fff”。PK:-) (2认同)