Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak policzyć ilość dni na podstawie dateTimePicker w C# lub SQL ?

DarknessWalker 20 Maj 2011 12:37 2381 4
  • #1 20 Maj 2011 12:37
    DarknessWalker
    Poziom 10  

    Witam


    Mam taki problem:
    Otóż muszę napisać aplikację (rezerwacje hotelowe) w którym określamy datę początkową i końcową a program ma wyświetlić ile dni jest pomiędzy tymi datami.
    Nie wiem jak to zrobić w C# więc próbowałam w SQL ponieważ aplikacja łączy się z bazą danych PostgreSQL, ale niestety program nie zlicza wszystkich pól i pokazuje za każdym razem "0".
    W przypadku gdy wpisuję bezpośrednio w PostgreSQL to wyświetla poprawnie.

    Poniżej fragment kodu którego używałam.

    Code:

                        string sqltester = "SELECT Count(data) from kalendarz where data<' " + lDataDo.Text + "' AND data>=' " + lDataOd.Text + "'";

                        NpgsqlDataAdapter daTester = new NpgsqlDataAdapter(sqlTest, conn);
                        dsTester.Reset();
                        daTester.Fill(dsTester);
                        dtTester = dsTester.Tables[0];
                        dGVCounter.DataSource = dtTester;


    Dodatkowo jak chcę wyznaczyć, np. który pokój jest zajęty to również mi nie zlicza wszystkich pól i albo pokazuje 0 (w przypadku jeśli wpiszę "NULL" zamiast "0" czyli "...THEN 1 else NULL") i wtedy program umożliwia rezerwację w już zajętych pokojach (a tak nie może być). Natomiast jak wpiszę "0" tak jak w poniższym kodzie to nie pokazuje w ogóle żadnego pokoju tak jakby wszystkie były zajęte (a nie są):

    Code:

    string sqlTest = "SELECT Count(cast (case when data<'" + lDataDo.Text + "' AND data>='" + lDataOd.Text + "' AND pokoj_1='Zajęty' THEN 1 else 0 end as bit))  as counter from kalendarz where data<'" + lDataDo.Text + "' AND data>='" +lDataOd.Text + "'";


    Prosiłabym o pomoc w poprawieniu kodu albo ewentualnie zaproponowanie lepszego rozwiązania.

    Z góry dzięki za pomoc.

    0 4
  • #3 20 Maj 2011 16:02
    DarknessWalker
    Poziom 10  

    Pobieram z dateTimePicker i wrzucam do textBox'ów z których następnie obliczam...
    Bo jak bezpośrednio z dTP to zostaje dopisany czas...
    np. MessageBox.Show(Convert.ToString(dTP.Value));" pokazuje datę i czas.
    (Chyba, że jest jakaś możliwość, żeby czasu nie pokazało?)
    No a z dTP to łatwiej później datę przerobić bo jakby użytkownik sam miał wpisać to byłoby za dużo liczenia.

    0
  • Pomocny post
    #4 20 Maj 2011 16:40
    wiesniak
    Poziom 31  

    Z obiektu klasy DateTime możesz wyciągnąć dowolną informację - nie musi to być zawsze data + czas.
    Zobacz http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx - tu masz różne sposoby formatowania daty, tj. przerabiania na tekst o określonej wartości.
    Zauważ, że klasa DateTime ma różne właściwości http://msdn.microsoft.com/en-us/library/system.datetime.aspx - możesz wyciągnąć z obiektu dzień, miesiąc, minuty itd - dowolną składową.
    Jeśli użyjesz metody Subtract tak, jak w przykładzie, który wcześniej zalinkowałem, dostaniesz obiekt klasy TimeSpan, czyli przedział czasu.
    Klasa TimeSpan: http://msdn.microsoft.com/en-us/library/system.timespan.aspx..
    Z niej możesz wyciągnąć informację o dniach poprzez property Days.

    Korzystaj częściej z opisu obiektów na msdn - dzięki temu będziesz wiedział, jakie metody czy właściwości obiekt posiada i nie będziesz musiał robić jakiejś magii z konwersjami itd.

    0
  • #5 20 Maj 2011 19:04
    DarknessWalker
    Poziom 10  

    Ok, dzięki za linki.

    0