Witam,
robie aplikacje internetową która rezerwuje pokoje w hotelu i potrzebuję aby wyskakiwał komunikat typu "pokój zajęty" gdy dokonujemy rezerwacji tego samego pokoju na tą samą date.
Jak brzmi pytanie?
Z miejsca zaznaczam, że moja aplikacja jest biedna hehe
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RezerwacjaConnectionString1"].ToString());
SqlCommand cmd = new SqlCommand();
cmd.CommandText = ("SELECT COUNT (Data_Przyjazdu) FROM [Rezerwacja].[dbo].[Rezerwacja] WHERE ID_pokoju=2 and Data_Przyjazdu=Data_przyjazdu ");
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
if ((int)cmd.ExecuteScalar() != 0)
{
Response.Redirect("~/Contact.aspx");
}
else
SqlDataSource1.Insert();
{
}
conn.Close();
zrobiłem coś takiego pod przycisk i teraz nie wiem gdzie leży błąd, poniewać aplikacja zadziała poprawnie gdy na sztywno podaje w select ID_pokoju i nie był on jeszcze rezerwowany.
Pokój wybieram z droplistu , zamieniałem wartość "2" na '"+Droplist.SelectedIndex+"' również nie działa.
Dalej nie bardzo wiemy gdzie jest problem,
czy chodzi o to że nie możesz pobrać id pokoju z comboboxa i wstawić do zapytania?
Trochę dziwne to zapytanie bo:
SELECT COUNT (Data_Przyjazdu) FROM [Rezerwacja].[dbo].[Rezerwacja] WHERE ID_pokoju=2 and Data_Przyjazdu=Data_przyjazdu
wskaż liczbę dat przyjazdu z tabeli rezerwacje gdzie id pokoju jest równe 2 i data przyjazdu jest rowna dacie przyjazdu? Rozumiem że jedna z tych "dat przyjazdu" do data przekazywana do tego zapytania? Tzn tak wnioskuje bo z zapisu to nie wynika.
Skoro aplikacja jest biedna, sugeruje na początek:
cmd.CommandText = string.format("SELECT COUNT (*) FROM [Rezerwacja].[dbo].[Rezerwacja] WHERE ID_pokoju={0} and Data_Przyjazdu={1}",id_pokoju, data_przyjazdu.ToString());
uwaga! powyższe zadziała tylko w przypadku gdy daty nie będą miały godzin, minut, sekund, lat etc, muszą być postaci 2010-01-02 0000:00, a najlepiej byłoby porównywać rok z rokiem, miesiąc z miesiącem i dzień z dniem :)
I jeszcze jedno, ostatnie, gdy aplikacja zrobi się bogata, poczytaj o zapytaniach parametryzowanych i sql injection