我有一个组合框,其中包含01-12(月)的项目,根据所选月份,数据从datagridview中的数据库中提取。然后将选定的值(月)放到label5。
选择日期之间的工作正常,但如何选择1个月内的所有日期而无需定义每个月的日期范围(由于某些年份在2月份有29天,因此无法工作)。
我已经尝试了这一点(我已将31天的时间用于结束范围以涵盖任何月份的所有日期,但由于Label5.text =" 02"以及VB导致错误.NET不知何故知道2月份没有31天了:
Dim SQLString As String = "SELECT KONTO, NALOG, DUGUJE, POTRAZUJE,
DATPRO, OPIS
FROM PROMGL WHERE DATPRO between #" & Label5.Text & "/1/2014# and #"
& Label5.Text & "/31/2014#"
我该怎么办?
答案 0 :(得分:5)
在下个月的第一天使用<
运算符:
Dim month As Integer = Int32.Parse(Label5.Text)
Dim SQLString As String = "SELECT KONTO, NALOG, DUGUJE, POTRAZUJE,
DATPRO, OPIS
FROM PROMGL WHERE DATPRO >= #" & month & "/1/2014# and DATPRO < #"
& (month + 1) & "/1/2014#"
将值解析为整数也可以保护您免受SQL注入攻击。您不应该直接在查询中使用值,而不确保它不会破坏它。通常使用参数化查询来使这更容易。
注意:编写的代码只能工作到11月,你需要调整年份以支持12月。
答案 1 :(得分:2)
这应该非常小心,因为它对SQL注入非常开放,所以你可以这样做:
Dim month as Integer = 0
If Not Integer.TryParse(Label5.Text, month) Then
Exit Sub
End If
Dim startDate as New DateTime(2014,month,1)
Dim endDate as DateTime = startDate.AddMonths(1).AddDays(-1)
Dim SQLString As String = "SELECT KONTO, NALOG, DUGUJE, POTRAZUJE,
DATPRO, OPIS
FROM PROMGL WHERE DATPRO between #" & startDate.ToString("MM/d/yyy") & "# and #"
& endDate.ToString("MM/dd/yyyy") & "#"