преобразование varchar в smalldatetime приводит к значению вне допустимого диапазона

Код:

strSql = "insert into table2 (transactiondate) values ('" & transactiondate & "')"

кажется, дает мне ошибку времени выполнения:

The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value

В коде strSql — это объект String, а transactiondate — это объект Date. Однако в базе данных SQL transactiondate является объектом smalldatetime.

Я пытался изменить smalldatetime на datetime (в базе данных) и пробовал transactiondate.toString(), но безуспешно.

Как это можно исправить?

Примечание. Я знаю об опасностях встроенного SQL. Я ищу здесь быстрое решение, а не обсуждение SQL-инъекций.


person Community    schedule 10.07.2009    source источник


Ответы (4)


Попробуйте добавить одинарные кавычки в оператор вставки.

strSql = "insert into table2 (transactiondate) values ('" & transactiondate & "')"
person Jose Basilio    schedule 10.07.2009
comment
+1 просто за ответ на вопрос, но ему все еще нужно решить проблему с SQL-инъекцией. - person jellomonkey; 11.07.2009
comment
@jello: ОП опубликовал заявление об отказе от ответственности за его осведомленность о SQL-инъекциях. Это фрагмент кода. Вы не представляете, через какую чистку уже прошел transactiondate. Каждое обсуждение SQL НЕ должно включать внедрение SQL. - person Eric; 11.07.2009

Два возможных ответа:

  1. Вам нужно инкапсулировать вашу строку в апостроф:

strSql = "insert into table2 (transactiondate) values ('" & transactiondate & "')"

  1. Вы используете дату до 01.01.1900 или после 06.06.2079 (ограничения smalldatetime)
person Eric    schedule 10.07.2009

Smalldatetime также может принимать значения только для лет > 1900 и ‹ 2079. У меня была ошибка, аналогичная той, которую вы опубликовали, где решение заключалось в том, чтобы отфильтровать недопустимые годы, подобные таким.

where year(datecolumn) < 2079
person jarofclay    schedule 15.11.2012
comment
Люди создают такие конечные решения — все, что мы делаем, имеет ограничение по времени. - person Andrew; 15.01.2021

Используйте transactiondate.ToString("гггг/ММ/дд ЧЧ:мм:сс") или предпочитаемый формат даты. Если он остается, измените язык пользователя по умолчанию «sa» или любого другого пользователя, которого вы используете, на предпочитаемый вами язык.

person TlmaK0    schedule 07.05.2010