【发布时间】:2015-05-23 19:40:29
【问题描述】:
如何将 2014-12-27 替换为报表中的当前日期
Dim cmd As New SqlCommand("Select * from LateComersReport where PDate = '2014-12-27'", conn)
或者我怎样才能在声明中以'yyyy-mm-dd'格式显示日期
Dim Tday As Date = Date.Today
【问题讨论】:
如何将 2014-12-27 替换为报表中的当前日期
Dim cmd As New SqlCommand("Select * from LateComersReport where PDate = '2014-12-27'", conn)
或者我怎样才能在声明中以'yyyy-mm-dd'格式显示日期
Dim Tday As Date = Date.Today
【问题讨论】:
您可以简单地将您的 SQL 查询更改为:
"Select * from LateComersReport where PDate = CONVERT(DATE, GETDATE())"
我想指出几点:日期变量,无论是在 SQL 中还是在 .NET 中,都没有 格式。格式化仅在您谈论显示日期时有用/相关,即作为报告或 UI 中的字符串。当您的代码中使用日期值时,您不应该关心日期是如何显示的。
此外,作为一种习惯,您应该在适用的情况下在 SQL 语句中使用参数,而不是将字符串连接在一起。例如,如果您要在查询中插入自己的日期值,而不是使用 SQL 的内置 GETDATE() 函数,您可以这样做:
Dim cmd As New SqlCommand("Select * from LateComersReport where PDate = @MyDateValue", conn)
Dim param As New SqlParameter("@MyDateValue", Now)
cmd.Parameters.Add(param)
这样做的原因是由于存在 SQL 注入攻击的风险,构建 SQL 的字符串连接本质上是不安全的。
【讨论】:
首先,日期没有格式,它只有一个值。日期字符串可以有格式。
其次,如果您构建 sql 查询,请始终使用 sql 参数而不是字符串连接。这可以防止 sql 注入或转换/定位问题。并且总是传递正确的类型(日期是这种情况),而不是让数据库解释你的论点。
Using cmd As New SqlCommand("Select * from LateComersReport where PDate = @PDate", conn)
cmd.Parameters.Add("@PDate" , SqlDbType.Date).Value = Date.Today ' or SqlDbType.DateTime '
' .. '
End Using
【讨论】: