/ / problem mit GetDate () in asp.net - sql-server, datetime

Problem mit GetDate () in asp.net - sql-server, datetime

Ich habe ein Problem mit der GetDate () -Methode.Wenn ich einen neuen Benutzer erstelle, wird im DateTime-Feld das Datum richtig angezeigt. Die Uhrzeit wird nicht korrekt angezeigt. Es sollte immer das Datum und die Uhrzeit des Systems angezeigt werden 12:00:00 Uhr, 2/8/2009 12:00:00 Uhr usw. Ich meine hier Datum ändert sich, aber Systemzeit ändert sich nicht. Hier ist mein Code:

CREATE PROCEDURE dbo.NewUser
(
@UserName varchar(50),
@Password varchar(50),
@EmailId varchar(50),
@DateTime Date
)
AS
insert into Login(UserName,Password,EmailId,DateTime)
values(@UserName,@Password,@EmailId,GetDate())


com.Parameters.Add("@DateTime", DateTime.Now.ToShortTimeString());

Antworten:

4 für die Antwort № 1

Ich würde zwei Änderungen vorschlagen:

  • Ändern Sie den Parameter der gespeicherten Prozedur in datetime2 statt nur date. (Es gibt auch andere Optionen, z. B. datetimeoffset.) Die Art des Datums nur speichert das Datum, daher ist es nicht verwunderlich, dass Sie keine Zeiten sehen :) Sie müssen die Tabelle auch ändern, wenn das Schema ein verwendet date Säule.
  • Konvertieren Sie den Parameterwert nicht in einen String, wenn Sie ihn aufrufen. Benutzen

    com.Parameters.Add("@DateTime", DateTime.Now);
    

Sie können auch die Verwendung von UTC anstelle der Ortszeit auf dem Server in Betracht ziehen.

BEARBEITEN: splattne "s absolut richtig - durch den Aufruf von GetDate in der gespeicherten proc ist der Wert Ihres Parameters irrelevant. Wenn Sie den Parameter tatsächlich verwenden möchten, ändern Sie den Körper Ihrer gespeicherten proc in:

   insert into Login(UserName, Password, EmailId, DateTime)
values(@UserName, @Password, @EmailId, @DateTime)

Überprüfen Sie den Typ von Login.DateTime obwohl!


4 für die Antwort № 2

Wenn Sie in Ihrer gespeicherten Prozedur getdate () verwenden, wird Ihr Parameter @DateTime ist obsolet. Gemäß Ihrem Codebeispiel wird es ignoriert.

Die Wurzel Ihres Problems muss also woanders liegen, wenn ich Ihre Frage richtig interpretiere.

Ich würde das überprüfen Datentyp der Datumsspalte in der SQL-Tabelle. Die Tabellendeklaration sollte lauten:

UserName varchar(50)
Password varchar(50)
EmailId  varchar(50)
DateTime DateTime  /* not "Date" */

2 für die Antwort № 3

Sie müssen SQL 2008 mit dem neuen Datums-Datentyp verwenden.

CREATE PROCEDURE dbo.NewUser (@UserName varchar (50), @Password varchar (50), @EmailId varchar (50), @DateTime Date)

Ändern Sie den SQL-Code, um DateTime (und ggf. die Tabelle) zu verwenden.


1 für die Antwort № 4

Verwenden Sie Date of the DateTime.Now

com.Parameters.Add("@DateTime", DateTime.Now.Date)

Mein Vorschlag ist auch die Verwendung von UTC-Instaed

com.Parameters.Add("@DateTime", DateTime.UtcNow.Date)