我正在尝试创建一个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)
答案 0 :(得分:0)
转换失败,因为它试图将文本“开始”变为日期(它不能)。您的第一步是用参数替换这些文本字段,以便您的搜索将日期字段发布到SQL的那些部分。
编辑:This page有一个如何正确安全地进行查询的示例。