预订系统SQL查询:使用可用的开始和结束日期和大小搜索数据库

时间:2015-04-17 02:18:15

标签: sql asp.net vb.net

我正在尝试创建一个SQL查询,以便当用户输入开始日期,结束日期并从连接到我的数据库的下拉列表中选择一个大小时,结果显示所选日期的可用服装点击按钮。

这是我的架构。

Product (Product_ID, Size, Image, Description)

Booking (Booking_ID, Product_ID, Start_Date, End_Date)

这是我尝试的第一个查询。

SELECT Product_ID FROM Product P 
WHERE Size = 'DropDownList1.SelectedValue' AND NOT EXISTS 
(SELECT * FROM Booking 
WHERE Product_ID = P.Product_ID AND Start_Date >= 'Start' AND End_Date <= 'End')

我还没有VB代码,因为我不太确定在哪里放或写什么。当我尝试测试查询时,它表示日期转换失败。

此外,我应该在搜索按钮中添加什么代码才能让它在列表视图中显示结果?

这是我正在使用的jQuery。

<script>
    $(function () {
        $("#Start").datepicker({
            dateFormat: 'dd/mm/yy',
            defaultDate: "+1w",
            changeMonth: true,
            numberOfMonths: 1,
            onClose: function (selectedDate) {
                $("#End").datepicker("option", "minDate", selectedDate);
            }
        });
        $("#End").datepicker({
            dateFormat: 'dd/mm/yy',
            defaultDate: "+1w",
            changeMonth: true,
            numberOfMonths: 1,
            onClose: function (selectedDate) {
                $("#Start").datepicker("option", "maxDate", selectedDate);
            }
        });
    });

这是用户使用jQuery datepicker输入日期的地方。

Date Needed: <input type="text" id="Start">

Return Date: <input type="text" id="End">

我尝试了一些不同的东西但它仍然无效。我添加了一些看起来像这样的VB。但我不认为这是对的。开始和结束下面有蓝线。它首先说是“没有宣布”,而对于End来说它是在说“预期表达”。

Partial Class Pages_Default
Inherits System.Web.UI.Page

Protected Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    Dim conn As SqlConnection
    Dim cmd As SqlCommand
    Dim recordsAffected As Integer
    Dim cmdstring As String = "SELECT Booking(Start_Date, End_Date) Values(@Start, @End)"
    conn = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=F:\BBB.mdf;Integrated Security=True")
    cmd = New SqlCommand(cmdstring, conn)
    cmd.Parameters.Add("@Start", SqlDbType.Date).Value = Start.SelectedValue
    cmd.Parameters.Add("@End", SqlDbType.Date).Value = End.SelectedValue
    conn.Open()
    recordsAffected = cmd.ExecuteNonQuery
    conn.Close()
End Sub
End Class

我还将SQL查询更改为此查询,但它无效。

SELECT Image, Price, Description FROM Product P WHERE Size = 'DropDownList1.SelectedValue' AND NOT EXISTS (SELECT * FROM Booking WHERE Product_ID = P.Product_ID AND Start_Date >= @Start AND End_Date <= @End)

1 个答案:

答案 0 :(得分:0)

转换失败,因为它试图将文本“开始”变为日期(它不能)。您的第一步是用参数替换这些文本字段,以便您的搜索将日期字段发布到SQL的那些部分。

编辑:This page有一个如何正确安全地进行查询的示例。