ASP.NET Rezerwacja pokojów

0

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.

0

Jak brzmi pytanie?

0

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1