Zmiana formatu daty przy zapisie do BD

0

Cześć! Jestem amatorem i uczę się C# ale to ma związek z moją bazą danych MS SQL na AZURE.
Moja aplikacja (C#) pobiera z bazy danych datę i ostatni stan licznika w samochodzie. Następnie pyta użytkownika o podanie aktualnego stanu licznika i tą wartość razem z aktualną datą (DateTime.Now) nadpisuje do bazy danych i do tego momentu wszystko jest ok. format daty (bo tu o nią głównie chodzi) jest poprawny czyli 12.01.2019... wysyłam do BD MS SQL Azure i tam zapis daty wygląda tak 01.12.2019... jaka cholera... nie wiem.... jeżeli data jest 13.01.2019 to w BD jest już poprawny zapis... ale w datach dwuznacznych przekręca i zamienia miesiąc z dniem... Przy następnym odczycie wyrzuca mi datę nie 12.01.2019 tylko 01.12.2019. Obserwuję zmienną do samego końca i cały czas ma poprawny format....
Czy ktoś może mnie pchnąć w jakimś kierunku????

'''C#
DateTime zmienna = DateTime.Now;

        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.CommandText = "UPDATE TabelaOsobowe SET Przebieg = '" + TextBoxLicznik.Text + "', " +
            "Aktualizacja = '" + zmienna + "' " +
            "WHERE [Nr rejestracyjny] = 'FYZ 09763'";
        cmd.ExecuteNonQuery();
        con.Close();
        MessageBox.Show("Dane zostału uaktualnione.", "Komunikat");

'''

2

Użyj parametrów, a problemy znikną...

0
Marcin.Miga napisał(a):

Użyj parametrów, a problemy znikną...

Wiesz co... hmmm uczę się od dwóch miesięcy... jakbyś mógł rozwinąć albo podać przykład to będę niezmiernie wdzięczny :)

0

Musisz poszukać, pamiętam, że jak robiłem projekt na sqlitle i c# miałem podobny problem, format danych jest zależny od m.in systemu na jakim to stoi. Szukałem jak ja to ogarnąłem ale nie mogę znaleźć, było to ze 2 lata temu więc wyleciało z pamięci a w kodzie tez odszukać nie mogę.

0

Musisz ugarnąć "culture" a potem po swojej stronie ustawiać odpowiednie formatowanie do wyświetlania ale nie, że z sql bezpośrednio tylko to co pobierzesz to sobie musisz sformatować. Złe formatowanie string do DateTime w Windows 10

0

Ok... a czy to normalne, że jak wysyłam takie zapytanie to wywala mi błąd (chodzi o podanie daty) format jest ddMMyyyy:
'''
UPDATE TabelaOsobowe SET Przebieg = '200', Aktualizacja = '22.01.2019' WHERE [Nr rejestracyjny] = 'CTR 3457'
'''

a w przypadku gdy format daty jest MMddyyyy to jest ok ??? czy to normalne ????
'''
UPDATE TabelaOsobowe SET Przebieg = '200', Aktualizacja = '01.22.2019' WHERE [Nr rejestracyjny] = 'CTR 3457'
'''

1

Daty nigdy nie zgłaszamy do bazy jako String, chyba że znamy z góry format daty w bazie, albo go ustawiliśmy w ramach wykonywanego ciągu zapytań.
Najlepiej jest podawać jednoznaczny identyfikator formatu, różne dialekty SQL to różnie realizują, tu masz przykład:
https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/ms191307%28v%3dsql.90%29
(konkretnie chodzi o ten fragment CONVERT(DATETIME, '19960719', 101))

Ewentualnie można określić wcześniej format, i tu znowu przykład dla jednego dialektu:
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-dateformat-transact-sql?view=sql-server-2017

0

Tak, bo masz tak ustawiony culture, że chce taki format.

1

Rrrrmmdd zawsze zadziała.

0

Przy wsparciu kolegi ostatecznie zrobiłem to tak:

'''
private void WyślijDoBazyDanych()
{
DateTime MojaData = DateTime.Now;

        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = System.Data.CommandType.Text;

        
        cmd.CommandText = "UPDATE TabelaOsobowe SET Aktualizacja = @paramData WHERE [Nr rejestracyjny] = 'WZW 20167'";
        cmd.Parameters.AddWithValue("@paramData", MojaData.ToString("yyyyMMdd"));
        cmd.ExecuteNonQuery();

        cmd.Parameters.AddWithValue("@paramLicznik", TextBoxLicznik.Text);
        cmd.CommandText = "UPDATE TabelaOsobowe SET Przebieg = @paramLicznik where [Nr rejestracyjny] = 'WZW 20167'";
        cmd.ExecuteNonQuery();

        con.Close();
        MessageBox.Show("Dane zostału uaktualnione.", "Komunikat");
    }

'''

Tak wiem, że można połączyć zapytanie. i tak zrobię Tu na razie zostawiłem dla lepszej czytelności.
Dziękuję panowie za wszelkie wskazówki :D Podziwiam was za tą wiedzę.... przeraża mnie ile jeszcze nie rozumiem...

1

Witam.
Chciałbym się podzielić opinią: programowałem w kilku językach, teraz próbuję ogarniać PL/SLQ. Zauważyłem, że zawsze najlepiej jest stosować formatowania daty tak jak w excelu: 2019-01-12. Tak samo ustawiam sobie zawsze datę w zegarze systemowym, nie ma problemu pobierać ją potem do listingu programu, który klepiesz...
Pozdrawiam!

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