2015-10-27 7 views
16

Próbuję zapisać datę z mojego Angular ui-Datepicker do mojej bazy danych SQL.Data jest w formacie (10-27-2015 12:00 AM), ale to nie uratuje próbowałem za pomocą następujących przekonwertować go do formatu SQL DateTime.Bez przeciążenia dla metody "ToString" przyjmuje 1 argumenty podczas rzucania data

DateTime? myDate = form.dteStartDate; 
    string sqlFormattedDate = myDate.ToString("yyyy-MM-dd HH:mm:ss"); 

ale otrzymuję błąd „nie przeciążenie dla metody«ToString»trwa 1 argumenty. Pole w SQL jest typu "datetime".

Każda pomoc jest bardzo doceniana.

+0

Jako odpowiedź mówi, 'myDate' nie jest 'DateTime', jego' Nullable ', więc kiedy wywołasz' ToString', wywołaj go na 'Nullable ' typ, a nie 'DateTime'. –

Odpowiedz

46

Chcesz użyć DateTime.ToString(format) nie Nullable<DateTime>.ToString(no overload):

DateTime? myDate = form.dteStartDate; 
string sqlFormattedDate = myDate.Value.ToString("yyyy-MM-dd HH:mm:ss"); 

Oczywiście to nie przypadek, że uchwyt nie ma wartości. Być może coś takiego:

string sqlFormattedDate = myDate.HasValue 
    ? myDate.Value.ToString("yyyy-MM-dd HH:mm:ss") 
    : "<not available>"; 
+0

myDate.Value.HasValue zwróci błąd. Powinna to być myDate.HasValue? startDate.Value.ToString ("yyyy-MM-dd HH: mm: ss") –

+0

@Ebenezar: oczywiście, dzięki :) –

+0

Jeśli możesz żyć z małym boksem za kulisami, a jeśli chcesz pusty ciąg w case 'myDate' ma wartość null, istnieje krótka składnia możliwa z' string sqlFormattedDate = $ "{myDate: rrrr-MM-dd HH: mm: ss}"; '. Wymaga C# 6 (interpolowane ciągi). Działa wewnętrznie, pakując owinięte 'DateTime' do odwołania' object'. Jeśli stanie się to odwołaniem zerowym, użyty zostanie pusty łańcuch. W przeciwnym razie zostanie potwierdzone, że typ pola wykonawczego implementuje "IFormattable", i używane jest odpowiednie przeciążenie ToString z tego interfejsu. –

0

Będzie działać dobrze.

DateTime? strDate = form.dteStartDate; 
strDate.Value.ToString("yyyy-MM-dd HH:mm tt"); 
3
string sqlFormattedDate = ((DateTime)myDate).ToString("yyyy-MM-dd HH:mm:ss"); 

Także jeśli można użyć kodu po stronie serwera w .cshtml i zarządzać tym odlew jak poniżej (na przykład):

<label>Establish: @(((DateTime)Model.EstablishDate).ToString("yyyy-MM-dd"))</label> 
Powiązane problemy