为什么在将日期转换为String时更改日期格式?

Coy*_*ero 0 .net sql vb.net date .net-2.0

我正在使用VB.net构建SQL查询

dateFrom As Date ... '02/21/2013
sqlQuery.add(“ HAVING MIN(DATEADD(HOUR, 2, columnDate)) >= ” + myDate)
Run Code Online (Sandbox Code Playgroud)

MyDate格式为"MM/dd/YYYY"(02/21/2013),但是当我添加到sqlQuery字符串时,我得到了这种格式"dd/MM/YYYY"(2013年2月21日).这会导致SQL查询失败

为什么在日期转换为"ToString"时更改日期格式?

注意事项

  • 我无法在查询中使用参数
  • 框架2.0
  • SQL Server

Jon*_*eet 5

MyDate格式为"dd/MM/YYYY"

目前还不清楚你的意思,但我怀疑你DateTime总体上有点困惑.一个DateTime具备的格式,任何超过(比如说)的int一样.如果您解析一个int十六进制,然后将其转换为字符串,默认情况下将以十进制格式化 - 该值只是一个数字.日期和时间的工作方式相同.

为什么在日期转换为"ToString"时更改日期格式?

它没有"改变" - 事先并不存在.

幸运的是,你不应该这样做.相反,您应该使用参数化SQL,并设置myDate为命令参数.您应该对SQL命令中的所有值执行此操作.那样:

  • 您无需担心像这样的文本转换.
  • 您受到SQL注入攻击的保护
  • 您将代码(SQL)与数据(值)分开

  • @Coyolero:虽然`yyyyMMdd`或'yyyy-MM-dd`可能是安全的,但你真的,真的,真的**现在应该开始使用参数*.很难夸大这样做的重要性.不要把它关掉. (2认同)