从数据库中选择 - 选择整个月的数据

时间:2014-05-17 13:20:57

标签: vb.net date select

我有一个组合框,其中包含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#" 

我该怎么办?

2 个答案:

答案 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") & "#"