将varchar转换为smalldatetime会导致超出范围的值

时间:2009-07-10 19:55:28

标签: vb.net 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注入的讨论。

4 个答案:

答案 0 :(得分:6)

尝试在insert语句中添加单引号。

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

答案 1 :(得分:3)

两个可能的答案:

  1. 您需要将字符串封装在撇号中:
  2. strSql = "insert into table2 (transactiondate) values ('" & transactiondate & "')"

    1. 您使用的是1900年1月1日之前或1979年6月6日之后的日期(smalldatetime的限制)

答案 2 :(得分:0)

使用transactiondate.ToString(“yyyy / MM / dd HH:mm:ss”)或您喜欢的日期格式。如果仍然存在,请将“sa”用户默认语言或您使用的任何用户更改为您喜欢的语言。

答案 3 :(得分:0)

Smalldatetime只能接受多年的值> 1900和< 2079年也是如此。我遇到了类似的错误,你发布的解决方案是过滤掉像这样的无效年份

where year(datecolumn) < 2079