web-dev-qa-db-ger.com

DateTime-Format in SQL-Format mit C #

Ich versuche, das aktuelle Datums- und Uhrzeitformat von C # zu speichern und in ein SQL Server-Datumsformat umzuwandeln, so wie yyyy-MM-dd HH:mm:ss, damit ich es für meine UPDATE-Abfrage verwenden kann.

Dies war mein erster Code:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

Die Ausgabe am Datum ist in Ordnung, aber die Uhrzeit ist immer "12:00:00", daher habe ich meinen Code folgendermaßen geändert:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.TimeOfDay.ToString("HH:mm:ss");

Es gab mir diesen Kompilierfehler:

FormatException wurde nicht behandelt

Und schlug vor, ich muss analysieren. Also habe ich versucht, dies anhand meiner Recherche hier in StackOverflow mit meinem Code auszuführen:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");

oder

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");

Aber es sagt mir, dass es eine Methode ist, die für den gegebenen Kontext nicht gültig ist. Ich habe versucht, nach Lösungen für mein Problem zu suchen, und stecke seit zwei Stunden fest. Ich bin noch ein bisschen neu in C #, kannst du mir bitte helfen?

83
Ace Caserya

versuchen Sie dies unten 

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
162

Die Verwendung des Standarddatetime-Formats "s" gewährleistet auch die Internationalisierungskompatibilität (MM/dd gegenüber dd/MM):

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

Komplette Optionen: (Code: Beispielergebnis)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

In .NET Framework unterstützt: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Referenz: DateTime.ToString Methode

35
InActive

Die richtige Antwort wurde bereits mit "use parameters" angegeben. Das Formatieren eines Datums und das Übergeben als String an SQL-Server kann zu Fehlern führen, da es von den Einstellungen abhängig ist, wie das Datum auf der Serverseite interpretiert wird. In Europa schreiben wir „1.12.2012“, um den 1. Dezember 2012 anzuzeigen. In anderen Ländern könnte dies als 12. Januar behandelt werden.

Bei der direkten Ausgabe von Anweisungen in SSMS verwende ich das Format yyyymmdd, das recht allgemein zu sein scheint. Bei den verschiedenen Installationen, an denen ich bisher gearbeitet habe, gab es keine Probleme.

Es gibt ein anderes, selten verwendetes Format, das etwas seltsam ist, aber für alle Versionen geeignet ist:

select { d '2013-10-01' }

wird den ersten Oktober 2013 zurückgeben. 

select { ts '2013-10-01 13:45:01' }

wird am 1. Oktober, 13:45:01 Uhr zurückkehren

Ich empfehle dringend die Verwendung von Parametern und niemals Ihren eigenen SQL-Code zu formatieren, indem Sie formatierte Anweisungsfragmente zusammenfügen. Es ist ein Eintrag für SQL-Injection und seltsame Fehler (das Formatieren eines Gleitkommawerts ist ein weiteres mögliches Problem)

6
alzaimar

Ihr erster Code wird dadurch funktionieren

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 
3
Rajeev Kumar

Ihr Problem liegt in der "Date" -Eigenschaft, die DateTime nur bis zum heutigen Tag abschneidet Sie können die Konvertierung folgendermaßen setzen:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
3
Dmitry Bychenko

Die Antwort, die ich suchte, war:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

Ich habe auch gelernt, dass Sie es so machen können:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

dabei kann myCountryDateFormat je nach Anforderung geändert werden.

Bitte beachten Sie, dass das Tag "Diese Frage hat möglicherweise bereits eine Antwort:" die Frage nicht wirklich beantwortet hat, da sie, wie Sie sehen, ein ".Date" verwendet, anstatt sie wegzulassen. Für neue Programmierer von .NET ist das ziemlich verwirrend

2
Ace Caserya

wenn Sie das aktuelle Datum in der Tabelle speichern möchten, können Sie es verwenden

Oder übergeben Sie diese Funktion als Parameter

z.B. 'update table_name set curdate = GETDATE () wobei colname = 123'

1
Manohar Patil

Warum überspringen Sie die Zeichenfolge nicht ganz:

SqlDateTime myDateTime = DateTime.Now;
1
Steve D

Eine andere Lösung, um DateTime von C # an SQL Server zu übergeben, unabhängig von den SQL Server-Spracheinstellungen

angeblich, dass Ihre Regionale Einstellungen dann als dd.MM.yyyy (deutscher Standard '104') angezeigt werden 

DateTime myDateTime = DateTime.Now;
string sqlServerDate ="CONVERT("date,'"+myDateTime+"',104)"; 

übergibt die C # -Datetime-Variable an die SQL Server-Datumstypvariable, wobei die Zuordnung gemäß "104" -Regeln berücksichtigt wird. SQL Server-Datum erhält JJJJ-MM-TT

Wenn DateTime in Ihren Ländereinstellungen anders angezeigt wird, verwenden Sie den entsprechenden Abgleich aus der SQL Server CONVERT-Tabelle

weitere Informationen finden Sie unter Regeln: https://www.techonthenet.com/sql_server/functions/convert.php

0
George

Ihr Problem liegt in der Date-Eigenschaft, die bisher nur DateTime abschneidet. Sie können die Konvertierung folgendermaßen setzen:

DateTime myDateTime = DateTime.Now;

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
0
nanthakumar

Ich denke, das Problem war, dass die zwei einfachen Anführungszeichen fehlten.

Dies ist die SQL, die ich in das MSSMS starte:

WHERE checktime >= '2019-01-24 15:01:36.000' AND checktime <= '2019-01-25 16:01:36.000'

Wie Sie sehen, gibt es zwei einfache Anführungszeichen, also müssen Ihre Codes sein:

string sqlFormattedDate = "'" + myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss") + "'";

Verwenden Sie für jeden String in MSSQL oder sogar in MySQL einfache Anführungszeichen. Ich hoffe das hilft.

0