如何在vb,net中的sql中搜索两个日期和时间?

时间:2019-02-05 18:31:36

标签: vb.net

我正在尝试创建一个Crystal Report,可以在其中搜索datetimepicker1和datetimepicker2选择的两个日期之间。 MySql数据库日期列已这样保存日期时间(12/26/2018 3:28:30 PM)。我的选择语句和参数不正确。我该怎么办?

Private Function GetData() As billing

    Dim x = Form25.DateTimePicker1.Value.Date.ToString("MM-dd-yyyy")

    Dim y = Form25.DateTimePicker2.Value.Date.ToString("MM-dd-yyyy")

    Dim constr As String = ("server= PANKAJ\SQLEXPRESS; database = pankaj billing software; integrated security=True")

    Using con As New SqlConnection(constr)

        Using cmd As New SqlCommand("select goldrate,date,itemcode,karat,category,item,qty,grossweight,netweight,discountrs,finalamount from allsaledata where date >= @date AND date <= @date", con)
            cmd.Parameters.AddWithValue("@date", x And y)


            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dsCustomers As New billing()
                    sda.Fill(dsCustomers, "DataTable1")
                    Return dsCustomers

                End Using
            End Using
        End Using
    End Using
End Function

1 个答案:

答案 0 :(得分:3)

对日期类型的列执行查询时,要做的第一件事是不传递字符串类型的参数。这将迫使数据库引擎执行自己的转换,并且您有很高的风险获得错误的转换。

因此,您应该传递DateTime类型的参数,并且由于需要检查两个日期限制,因此需要两个参数

' Do not convert to strings here. Work with dates
Dim x = Form25.DateTimePicker1.Value.Date
Dim y = Form25.DateTimePicker2.Value.Date

Using cmd As New SqlCommand("select goldrate,date,itemcode,karat,
                                    category,item,qty,grossweight,
                                    netweight,discountrs, finalamount 
                             from allsaledata 
                             where date >= @init AND date <= @end", con)

    cmd.Parameters.Add("@init", SqlDbType.Date).Value = x
    cmd.Parameters.Add("@end", SqlDbType.Date).Value = y

要注意的另一件事是,如果使用不带“时间”部分的DateTime,则查询可能会排除最后一天的日期。

例如,如果结束日期为02/05/2019 00:00:00,则日期和时间为02/05/2019 19:40:00的记录将不包括在结果中因为00:00:000的时间是午夜,而其他时间都是在午夜之后。
如果您想避免这种情况,请在结束日期前加上一天,例如

Dim y = Form25.DateTimePicker2.Value.Date.AddDay(1)