sql
  • asp.net
  • .net
  • 2016-09-21 12 views 6 likes 
    6

    Mam zestaw danych z serwera SQL, która związana GridView na stronie aspx. Zamieścić datę na stronie internetowej za pomocą poniższego kodu:Ciąg nie został rozpoznany jako prawidłowy element DateTime ze zbioru danych

    <asp:Label ID="Label10" runat="server" Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>' 
    

    DateTime jest na SQL Sever 06.12.2015 00: 00: 00.000, który pokazuje jak 2015/06/12 na stronie internetowej. Prawidłową datą powinno być 2015/12/06 (6 grudnia 2015 r.). Mam globalizację na webconfig.

    <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/> 
    

    Czy ktoś może mi powiedzieć, jak rozwiązać ten problem?

    +0

    Co to jest w formancie 'date1'? Czy to jest prawidłowa data z bazy danych? – ekolis

    +0

    @ekolis Przepraszamy, na moim pytaniu pojawia się literówka. Poprawiłem to. Data jest w języku SQL 2015-12-06 00: 00: 00.000. Strona wyświetla się jako 2016/06/12. Jest on pomieszany z miesiącem i dniem.Wygląda na to, że Visual Studio nie odczytuje daty tak samo jak serwer SQL. Data1 jest nazwą kolumny z zestawu danych SQL – user819774

    +0

    Czy "date1" jest kolumną ciągów lub dat? Jeśli jest to data, dlaczego potrzebujesz Convert.ToDateTime? –

    Odpowiedz

    19

    SQL Server powinien mieć datę utrzymywały się w jednym z następujących rodzajów i nigdy jako coś innego (przez cokolwiek innego, mam na myśli varchar, text, int, BigInt, czy cokolwiek innego „twórczego”)

    • DateTime2
    • DateTime
    • Date
    • DateTimeOffset

    Dla kilku rodzajów patrz Date and Time Data Types and Functions (Transact-SQL)

    wyświetlacza w SQL Server, dlatego nigdy nie powinno mieć znaczenia, ponieważ nie ma rzeczywisty wyświetlacz lub formatowanie związane z typem. To, co widzisz w oknie zapytania w SSMS, ma formatowanie, ale tylko dlatego, że musi być wyświetlane jak, to formatowanie jest zwykle wykonywane w notacji ISO8601 i nie ma nic wspólnego z faktycznym utrzymywaniem instancji.

    Zwracany instancji w kodzie .NET z SQL Server powinny być typu System.DateTime lub System.DateTimeOffset, to ostatnie, jeśli są również za pomocą DateTimeOffset w SQL Server, który utrzymuje się przesunięcie od UTC z instancji. Następnie można użyć ToString() z różnymi opcjami formatowania, aby wyświetlić DateTime według uznania. Sposób wyświetlania/formatowania DateTime zawsze powinien być funkcją warstwy prezentacji i nigdy nie powinien być głębszy niż w stosie programu.

    Zobacz Custom Date and Time Format Strings dla różnych opcji format string dostępnych NET przypadkach DateTime


    Wracając do odpowiedniego kodu w PO

    <asp:Label Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>' 
    

    Convert.ToDateTime powinny być usuwane jako zmienna date1 powinno być już przykład DateTime (jeśli przestrzegasz najlepszych praktyk opisanych powyżej). Następnie możesz wywołać ToString na tej instancji bezpośrednio z żądanym ciągiem formatu.

    Powiązane problemy