Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] VB. NET zapis danych do bazy danych MS SQL format daty DateTimePicker

pawelus222 02 Jun 2020 10:58 348 11
  • #1
    pawelus222
    Level 4  
    Witam,
    Mam ustawiony DateTimePicker.CustomFormat = "yyyy-MM-dd". Dane do bazy MS SQL zapisują mi się w formacie "yyyy-MM-dd hh:mm:ss" Nie wiem czemu mi w takim formacie w zaparte zapisuje. Poniżej linijka kodu jak dane są do bazy danych przekazywane:
    "dataWpisu" to jest oczywiście kontrolka DateTimePicker
    Code:

    cmd.Parameters.Add(New SqlParameter("@DATA_WPISU", dataWpisu.Value.ToString))

    Ktoś wie co tu jest nieprawidłowo ???

    Dodano po 8 [godziny] 50 [minuty]:



    Modyfikacja linijki kodu na postać:
    Code:

    cmd.Parameters.Add(New SqlParameter("@DATA_WPISU", dataWpisu.Value.ToString("yyyy-MM-dd")))

    dalej mi zapisuje w bazie danych MS SQL w postaci: yyyy-MM-dd 00:00:000, oczywiście za zera odpowiednio hh:mm:ss Wie ktoś co jest przyczyną tego???

    Dodano po 2 [godziny] 36 [minuty]:

    W bazie danych MS SQL kolumna DATA_WPISU jest ustawiona na "date" wcześniej było "datetime" ale zmiana nic nie daje. Wie ktoś jak to zrobić???
  • #2
    JacekCz
    Level 39  
    Jak w bazie masz prawidłowe pole datowe (ew. datetime, bez znaczenia dla tej wypowiedzi) to podawaj tam typ datowy a nie stringa. Właśnie o to chodzi w kwerendach z parametrami.
    czyli

    Code: csharp
    Log in, to see the code
  • #3
    pawelus222
    Level 4  
    JacekCz wrote:
    Kod: csharp Rozwiń Zaznacz wszystko Kopiuj do schowka
    DateTimePicker dataWpisu;

    cmd.Parameters.Add(New SqlParameter("@DATA_WPISU", dataWpisu.Value)


    Tym sposobem też próbowałem i niestety nic się nie zmienia. Oczywiście dataWpisu to nazwa kontrolki DateTimePicker
    Code:

    dataWpisu.CustomFormat = "yyyy-MM-dd"
    cmd.Parameters.Add(New SqlParameter("@DATA_WPISU", dataWpisu.Value)

    co daje wpis w bazie:
    VB. NET zapis danych do bazy danych MS SQL format daty DateTimePicker
    Typ danych kolumny DATA_WPISU w bazie danych MS SQL jest ustawiony na "date"
  • #4
    JacekCz
    Level 39  
    [quote="pawelus222"]
    JacekCz wrote:

    co daje wpis w bazie:
    VB. NET zapis danych do bazy danych MS SQL format daty DateTimePicker


    To jest prawidłowe, to jest data można powiedzieć w wersji "liczbowej", wygląda tak samo w USA (jeden z najdziwniejszych formatów datowych 'w realnym życiu'), EU,PL i reszcie świata.
    Tak jakbyś miałe pretensje, że liczba jest z kropką, a ty chcesz z przecinkiem.
    Jej formatowanie przeprowadza się przygotowując widok.

    Nic z tym nie rób.
  • #5
    pawelus222
    Level 4  
    Formatowanie poprzez SELECT do Lisview w VB.NET to wiem jak zrobić, mnie po prostu rażą w oczy te zera od hh:mm:ss w bazie. Może lepiej w takim przypadku zrobić przy zapisie do bazy danych CONVERTE na liczbę załóżmy 80000, a potem dla prezentacji danych w ListView poleceniem:
    Code:

    SELECT format(convert(datetime,A.DATA-36163), 'yyyy-MM-dd') as DATA from tabela

    otrzyma się datę w postaci "yyyy-MM-dd" ???
  • #6
    JacekCz
    Level 39  
    Dzielnie walczysz z problemami, których nie mają inni.

    Formatuj podczas prezentacji. NIGDY w bazie.
    EDIT Dodam, ze na 99% ListView dla kolumn typu datowego (tj prawdziwego datowego) ma ułatwienia.
  • #7
    pawelus222
    Level 4  
    JacekCz wrote:
    JacekCz

    Masz rację żeby z tym już nic nie robić w bazie jest teraz ok. Teraz w aplikacji pisząc poniższy kod:
    Code:

    Dim sql as String
    sql = "SELECT NUMER, FORMAT(DATA_UMOWY, 'yyyy-MM-dd'), FORMAT(DATA_OD, 'yyyy-MM-dd'), FORMAT(DATA_DO, 'yyyy-MM-dd'), FROM TABELA"

    na liście ListView nic się nie wyświetla. Źle w zapytaniu formatuję ???
    Znając życie w kodzie dalej jest błąd. Poniżej fragment zmienionego kodu:
    Code:

    Dim sql as String
    sql = "SELECT NUMER, DATA, DATA_OD, DATA_DO FROM TABELA"
    connection()
                command = New SqlCommand(sql, con)
                DataReader = command.ExecuteReader()
                ListView1.Items.Clear()

                Dim x As ListViewItem

                Do While DataReader.Read = True
                    x = New ListViewItem(DataReader("NUMER").ToString)
                    x.SubItems.Add(DataReader("DATA").ToString("yyyy-MM-dd"))


    Dodano po 27 [minuty]:

    Zmieniłem linijkę kodu:
    Code:

    x.SubItems.Add(Convert.ToDateTime(DataReader("DATA").ToString("yyyy-MM-dd")))

    ale niestety teraz wywala komunikat przy ładowaniu ListView:
    VB. NET zapis danych do bazy danych MS SQL format daty DateTimePicker
  • Helpful post
    #8
    JacekCz
    Level 39  
    Nie kombinuj NIC w tym SQLu, zachowaj typ datowy jaki jest.
    Code: vbnet
    Log in, to see the code

    Nie kombinuj tez z tym Add
    Code: vbnet
    Log in, to see the code

    ListView ma property Columns, tam je klikaniem wypełnij, i prawie na pewno dla typu datowego da się podać format. To jest najwłaściwsze miejsce
  • #9
    pawelus222
    Level 4  
    Ok, rozumiem. Gdzie jest ta właściwość dla Kolumn ListView ??? Korzystam z Microsoft Visual Studio 2019 i nie widzę tego. Może mi wzrok siada :(
  • #10
    JacekCz
    Level 39  
    pawelus222 wrote:
    Ok, rozumiem. Gdzie jest ta właściwość dla Kolumn ListView ??? Korzystam z Microsoft Visual Studio 2019 i nie widzę tego. Może mi wzrok siada :(


    Z całą pewności jest property Columns, akurat jestem na IDE.

    Natomiast do przyłączenia baz danych są kontroli z grupy Data, w tym DataGridView.
    ListView jest do podawania danych "ręcznie", nadal można je użyć do danych z bazy, można go zasilać listą obiektów jakiejś klasy (fajnie to działa prawidłowo użyte), ale wybacz, trzeba mieć trochę wiedzy, plus obycia się klasami, obiektami, więc wszystkiego brakuje.

    Weź jakąś książkę, DOBRY kurs. Nie da się na forum uczyć "from zero to hero"
  • #11
    pawelus222
    Level 4  
    Ja chciałem to zrobić właśnie z ListView, żeby były daty prawidłowo wyświetlane, a nie z DataGridView

    Dodano po 3 [minuty]:

    Chciałbym o podpowiedź w kodzie, co gdzie źle robię ???