Konwersja typu DateTime do shortDate

0

Nie mogę poradzić sobie z problemem.
Mam querry z parametrem "date",która wybiera wiersze, zawierające odpowiednią datę .
Więc VS chce parametr typu Date .

Tabela2TableAdapter.GetDataByDate(date); 

I tu się pojawia problem.
BO jeśli pociągne z monthcalendar wybraną datę do dostaję ją z godziną.
Wiem, że istnieje TOShortDateString(), ale to jest dla stringa. A w przypadku querry potrzebny typ Date bez godziny.
Jest możliwa taka konwersja ??

Próbowałem nawet w ten sposób

public class Data 
    {
        public int rok;
        public int miesiac;
        public int dzien;

        public Data(int year, int month, int day)
        {
            rok = year;
            miesiac = month;
            dzien = day;

        }

    } 

I co mnie zaskoczyło

Data data1 = new Data(year,month,day)

MessageBox.Show(Convert.ToString(data1)); 

Wyświetla mi nazwę programu i klasy 8|

1

Bo Convert.ToString(data1) woła pewnie po prostu .ToString() na twoim obiekcie - a ty nie przeciążasz .ToString() i tak właśnie wychodzi... Wszystko działa normalnie, tylko takie jest wyświetlanie.

http://msdn.microsoft.com/en-us/library/ms173154%28v=vs.80%29.aspx

Tworzenie własnej klasy to raczej zły pomysł, ale jakoś nie rozumiem o co Ci ogólnie chodzi (albo piszesz niewyraźnie, albo jest za późno :>. Czas iść spać chyba).
Masz przecież ładną strukturę http://msdn.microsoft.com/en-us/library/system.datetime.aspx ?

0

Chodzi mi o to, że typ DateTime posiada datę i czas, a mi chodzi o samą datę.
Chcę zrobić tak by zmienna typu DateTime (nie string) niosła samą datę.

1

Po co? Zawsze przy tworzeniu obiektu DateTime możesz "wyczyścić" część czasową (czyli ustawić 0000) a wyświetlając użyć odpowiedniego formatowania, czyli np. yyyy-MM-dd
DateTime wspiera operacje na datach, a twoja klasa nie. Zważ też że struktura DateTime wewnętrznie przechowuje datę jako long.

http://msdn.microsoft.com/en-us/library/cc716729.aspx
Nie mam czasu sprawdzać, ale jeśli parametr (kolumna) w MS sql server jest typu date, z kodu podajesz obiekt typu datetime, to i tak do porównania wzięta będzie tylko tylko część datowa? Sprawdź.

0

Próbowałem błąd konwersji sypie.

Właśnie chodzi o to, że potrzebuje DateTime bez części czasowej. I nie może to być string gdyż VS sadzi się, że to nie ten typ. Miałem cichą nadzieje, że pójdzie jakaś niejawna konwersja ale niestety :(

Może naświetle co chce zrobić.

Jest stworzone querry przy tableadapter

 
SELECT        Nr_jazdy, Data, Start, Stop, Ulica_start, Instruktorzy_nr, Kursy_index, Samochody_nr_rejestracyjny
FROM            Jazdy
WHERE        (Data = 'date')
ORDER BY Start

Chce wywołać z kodu to querry

jazdyTableAdapter.GetDataByDate(date);
 

więc muszę tam wciśnać date . Ale jak wsadzę DateTime jest błąd konwersji, string tak samo :(
Kolumna data jest typu date

Zacząłem się zastanawiać czy ogólnie jest to prawidłowo.

1
Lechu_2 napisał(a):

Właśnie chodzi o to, że potrzebuje DateTime bez części czasowej.

DateTime.Date?

I nie może to być string gdyż VS sadzi się, że to nie ten typ. Miałem cichą nadzieje, że pójdzie jakaś niejawna konwersja ale niestety :(

Może zamiast mieć cichą nadzieję lepiej przeczytać komunikat błędu i dokumentację?

jazdyTableAdapter.GetDataByDate(date);
 

więc muszę tam wciśnać date . Ale jak wsadzę DateTime jest błąd konwersji, string tak samo :(
Kolumna data jest typu date

A jakiego typu jest argument date? Bo przecież z tym masz problem.

0

parametr date jest , typu Date (ustawiałem przy pomocy VS) i generalnie kwerenda nie działa prawidłowo (wywala błąd konwersji) w Query buildier .

DateTime.Date jeżeli to wrzucisz do zmiennej typu DateTime to i tak będziesz miał czas tylko, że same zera.

0

Rozwiązaniem problemu j est poprawienie kwerendy .

WHERE       DATA = @Param 

gdzie Param jest stringiem.

Wskazówka dla tych co zamierzają wpuścić to w datagrid

kod poglądowy

bindingsource.DataSource = nasza kwerenda ;
datagridview.DataSource = bindingsource;
0
Lechu_2 napisał(a):

parametr date jest , typu Date

Nie, nie jest. W C#/.NET nie ma typu Date. No chyba, że sam taki utworzyłeś.

DateTime.Date jeżeli to wrzucisz do zmiennej typu DateTime to i tak będziesz miał czas tylko, że same zera.

Wiem przecież, dlatego Ci to zaproponowałem, bo m.in. w ten sposób można zinterpretować stwierdzenie "potrzebuję DateTime bez części czasowej".

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