如何检查项目是否可用于某些范围的日期

问题描述:

我正在使用SQL DB构建C#库存应用程序。使用这个应用程序,你可以选择一个项目进行预订,如果它可用它将预订。听起来很容易呃,这也是我的想法。这是问题。 此应用程序需要检查两个条件。如何检查项目是否可用于某些范围的日期

1)如果该项目是之间一定时间范围可用的(例如:8月18日至8月23日)

2)如果所需数量是可用的(例如:2或3)。

我有一个数据库,它包含项目名称和初始数量。另一个持有目前的预订。其中有以下数据。

ID Cottage quantity From Date To Date  Item name 
2 Woodcastle 2  2016-08-18 2016-08-24 Kayaks 

现在,如果我从2016-08-19到2016-08-23选择1艘独木舟(初始数量3)预订。我如何用SQL来做到这一点?

继承人什么,我到目前为止做的,但没有运气

selecteditem = items_listbox.SelectedItem.ToString(); 
     from_date = from_datepicker.Value.ToString(); 
     to_date = to_datepicker.Value.ToString(); 
     quantity = quantity_need.Text; 
     from_date = Convert.ToDateTime(from_date).ToString("yyyy-MM-dd"); 
     to_date = Convert.ToDateTime(to_date).ToString("yyyy-MM-dd"); 
     int init_i = 0; 
     int taken_i = 0; 
     int dropped_i = 0; 
     string select_init = "SELECT initial_quantity from inventory_items Where item_name LIKE '" + selecteditem + "'; "+ "SELECT COALESCE(SUM(Quantity), 0) from inventory_bookings Where item_name LIKE '" + selecteditem + "' AND '" + from_date + "' between date_from and date_to; "+ "SELECT COALESCE(SUM(Quantity), 0) from inventory_bookings Where item_name LIKE '" + selecteditem + "' AND '" + to_date + "' between date_from and date_to"; 
     conn = new MySqlConnection(connectionstring); 
     MySqlCommand init = new MySqlCommand(select_init, conn); 
     try 
     { 
      conn.Open(); 
      reader = init.ExecuteReader(); 
      while (reader.Read()) 
      { 
       init_i = reader.GetInt32(0); 
      } 
      reader.NextResult(); 
      while (reader.Read()) 
      { 
       taken_i = reader.GetInt32(0); 
      } 
      reader.NextResult(); 
      while (reader.Read()) 
      { 
       dropped_i = reader.GetInt32(0); 
      } 
      int quantity_avail= init_i - taken_i - dropped_i; 
      if (quantity_avail >= Convert.ToInt32(quantity_need.Text)) 
      { 
       checkresult_lbl.Text= "Currently There are "+ quantity_avail + " "+ selecteditem +"/s available in your Inventory, Please Proceed to book"; 
       Booking_btn.Enabled = true; 
      } 
      else 
      { 
       checkresult_lbl.Text = "Currently There are not enough available Items in your Inventory, Please change date or Quantity"; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
+0

备注 - 请使用参数化查询!您可能会通过将所选列表框项目的值直接粘贴到查询中来引入漏洞。做一些关于SQL注入的阅读。 – Raxr

+0

我总是坚持参数化查询。这仅用于开发阶段。 –

+0

你应该只是单独发布你的(很好格式化的)sql,因为它是你的问题的缩影,而不是.net代码 –

我能够用这个逻辑图了这一点。

Statement 1: "SELECT initial_quantity from inventory_items Where item_name LIKE '" + selecteditem + "'; " 

Statement 2: "SELECT COALESCE(SUM(Quantity), 0) from inventory_bookings Where item_name LIKE '" + selecteditem + "' AND '" + from_date + "'<= date_to AND date_from < '"+to_date+"'" 

陈述#1选择项目的初始数量。 (让我们说3)。

声明#2选择多少项目是出对选定的天(可以说2)

然后它检查是否(3-2)大于或等于需要的数量,然后预订。