Mam taki problem, w warunku 'where' jest coś takiego: x.Dzien > '2015-11-27 00:00:00'.
'Dzien' to kolumna tablicy typu datetime, łańcuch z datą wystawia kontrolka na kliencie, problem w tym, że SQL Server 2012 w czasie wykonywania zwraca błąd o przekroczeniu wartości poza zakres - odczytuje łańcuch jako YYYY-dd-mm, a nie YYYY-mm-dd. Wiem, bo sprawdzałem, jak obie wartości po roku są < 13 to zapytanie działa.
Co się dzieje, gdzieś rozjechały się formaty daty?
Pozdrawiam,
Jan
- Rejestracja:około 14 lat
- Ostatnio:ponad 3 lata
- Postów:20

- Rejestracja:ponad 12 lat
- Ostatnio:8 miesięcy
- Postów:6610
jak nie chcesz mieć takich problemów to NIGDY nie podawaj daty jako stringa a jako datę. To jest jedyne akceptowalne rozwiązanie. BTW poczytaj o czymś takim jak parametry zapytania albo jeszcze lepiej co to jest ORM
- Rejestracja:około 14 lat
- Ostatnio:ponad 3 lata
- Postów:20
" and a.CreationDate < '" + dateTimePicker1.Value.Date + "' "
" and a.CreationDate < '" + dateTimePicker1.Value + "' "
Tak to wygląda w kodzie, oba warianty działają dając taki string:
"2015-11-25 00:00:00" co na SQL Serverze 2012 interpretowane jest jako 25 miesiąc, 11 dzień.
- Rejestracja:około 14 lat
- Ostatnio:ponad 3 lata
- Postów:20
'jak nie chcesz mieć takich problemów to NIGDY nie podawaj daty jako stringa a jako datę. To jest jedyne akceptowalne rozwiązanie.'
Jak widzisz, nie podaję daty, jako stringa, tylko z metody komponentu 'dateTimePicker'.
A i tak się zapytanie pieprzy.


- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
@JanF a teraz wyobraź sobie że ktoś ustawia to dateTimePicker1.Value.Date
w DOM na przykład na
'2015-11-27 00:00:00' union select password from users where '1'='1
albo cokolwiek innego sobie tym unionem wyciąga ;] NIGDY nie sklejaj inputu od usera w stringa do SQL. To się nazywa SQL Injection.


union
kończy where i robi drugie zapytanie którego wynik jest doklejony do pierwszego. Patrz: http://sqlfiddle.com/#!9/ebee1/1


- Rejestracja:około 14 lat
- Ostatnio:ponad 3 lata
- Postów:20
Dzięki za udział.
Potrzebuję coś na szybko, stąd ADO.Net - jeśli będzie zainteresowanie i czas od strony czynników, to (i tu się zgadzam) to LINQ, (czas to czas potrzebny na naukę).
W tym momencie chciałbym zrozumieć co się dzieje, qrna, co wpływa na takie a nie inne zachowanie serwera?!
Kodowanie DB ustawione jest na Latin1 - może to?
- Rejestracja:ponad 9 lat
- Ostatnio:9 dni
- Postów:1083
Shalom napisał(a):
albo cokolwiek innego sobie tym unionem wyciąga ;] NIGDY nie sklejaj inputu od usera w stringa do SQL. To się nazywa SQL Injection.
Bez przesady można (a nawet trzeba) się przed tym zabezpieczyć. Przecież bardzo często trzeba wyszukać coś w bazie po tym co wpisze user :)
JanF napisał(a):
W tym momencie chciałbym zrozumieć co się dzieje, qrna, co wpływa na takie a nie inne zachowanie serwera?!
To czemu nie chcesz formatować daty tak jak chce tego serwer bazodanowy? Żaden problem sklejając string formatować datę do postaci YYYY-dd-mm.
Ewentualnie poszukaj może serwer obsługuje jeszcze inne formaty np. YYYY/mm/dd. Tu już musisz niestety sięgnąć do dokumentacji serwera.

usuwam wszelkie elementy mogące powodować SQL Injection
chcesz się o to założyć? :P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.