Ошибка: преобразование типа данных 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 привело к значению из диапазона. Оператор был завершен.

Кто-либо может выручить меня?

5
задан abatishchev 24 November 2012 в 19:31
поделиться

3 ответа

Что возвращает ваш оператор DateTime.Now.ToString () ??

Какой язык и региональные настройки используются в вашем SQL Server? ожидая ??

У вас там несоответствие ??? Возможно, ваш .NET возвращает формат MM / dd / yyyy , тогда как SQL Server ожидает dd / MM / yyyy (или наоборот).

Попробуйте использовать этот код в своем SQL-сервере:

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 для дат (ГГГГММДД) - это работает для ВСЕХ региональных и языковых настроек в SQL Server - это работает ??

DECLARE @test TABLE (smalldate SMALLDATETIME)
INSERT INTO @test VALUES ('20100221 22:00:32') --
SELECT * FROM @test
3
ответ дан 15 December 2019 в 00:59
поделиться

Попробуйте изменить это:

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

на это:

userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString());
0
ответ дан 15 December 2019 в 00:59
поделиться

Не пытайтесь преобразовывать дату в строку:

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

Edit: Попробуйте следующее:

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

Есть другой способ просто передать реальный объект, но я не могу вспомнить ... извините.

0
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: