Ich erstelle eine C# Inventory App mit SQL DB. Mit dieser App können Sie einen Artikel auswählen, der gebucht werden soll und wenn er verfügbar ist, wird er gebucht. Klingt ziemlich einfach eh !, dachte ich auch. Hier ist das Problem. Diese App muss auf zwei Bedingungen prüfen.So prüfen Sie, ob Artikel für bestimmte Datumsbereiche verfügbar ist
1) Wenn das Element zwischen bestimmten Datumsbereich (zB verfügbar: 18. August - 23. August)
2) Wenn die erforderliche Menge zur Verfügung steht (zB: 2 oder 3).
Ich habe eine Datenbank, die Artikelname und Anfangsmengen enthält. Ein weiterer, um aktuelle Buchungen zu halten.Was hat folgende Daten.
ID Cottage quantity From Date To Date Item name
2 Woodcastle 2 2016-08-18 2016-08-24 Kayaks
Jetzt, wenn ich 1 Kajak (anfängliche Quantität 3) auswähle, um von 2016-08-19 zu 2016-08-23 zu buchen. Wie mache ich das mit SQL?
Heres, was ich bisher tue aber kein Glück
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();
}
Randnotiz - bitte parametrisierte Abfragen verwenden! Sie können hier eine Sicherheitsanfälligkeit einführen, indem Sie den Wert aus dem ausgewählten Listenfeldelement direkt in Ihre Abfrage einfügen. Lesen Sie etwas über SQL-Injection. – Raxr
Ich bleibe immer bei parametrisierten Abfragen. Dies ist nur für die Entwicklungsphase. –
Sie sollten einfach Ihre (schön formatierte) SQL-Datei posten, da dies der Inbegriff Ihres Problems ist, nicht der .net-Code –