Ich versuche, das aktuelle Datums- / Uhrzeitformat aus C # zu speichern und es in ein SQL Server-Datumsformat wie dieses zu konvertieren, 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 wie folgt geändert:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Es gab mir diesen Kompilierungsfehler:
FormatException wurde nicht behandelt
Und schlug vor, ich muss analysieren. Also habe ich versucht, dies mit meinem Code gemäß meiner Recherche hier in StackOverflow zu tun:
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 einen bestimmten Kontext nicht gültig ist. Ich habe versucht, nach Lösungen für mein Problem zu suchen, und bin jetzt seit zwei Stunden festgefahren. Ich bin noch ein bisschen neu in C #. Kannst du mir bitte helfen?
DateTime
oder speichern Sie ihn als Zeichenfolge? AuchToString
aufDate
würde bedeuten, dass die Zeit immer ist12:00:00
DATETIME
und dann könnten Sie vermeiden, all diese Konvertierungen hin und her zu und von einer Zeichenfolgendarstellung durchzuführen!datetime
wäre es ein guter Anfang , Parameter zu verwenden und einfach alles als zu behalten . Noch besser, warum übergeben Sie den Server zur aktuellen Zeit - er hat eineGETDATE()
Funktion, die vollständig auf der Serverseite aufgerufen werden kann.Antworten:
Versuchen Sie dies unten
quelle
yyyy-MM-dd
von der Tageszeit getrennten Leerzeichen und den Namen "ISO8601" für das Formular, in dem sich das Trennzeichen befindet aT
. Aber ja, beide Formen konvertieren implizit (und korrekt) in adatetime
.Die Verwendung des Standard-Datums- / Uhrzeitformats "s" gewährleistet auch die Internationalisierungskompatibilität (MM / dd gegenüber dd / MM):
Vollständige Optionen: (Code: Beispielergebnis)
Unterstützt in .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Referenz:
DateTime.ToString
Methodequelle
Die richtige Antwort wurde bereits "Parameter verwenden" gegeben. Das Formatieren eines Datums und das Übergeben als Zeichenfolge an SQL-Server kann zu Fehlern führen, da dies von den Einstellungen abhängt, wie das Datum auf der Serverseite interpretiert wird. In Europa schreiben wir '1.12.2012', um den 1. Dezember 2012 anzuzeigen, während dies in anderen Ländern als 12. Januar behandelt werden könnte.
Wenn ich Anweisungen direkt in SSMS gebe, verwende ich das Format,
yyyymmdd
das ziemlich allgemein zu sein scheint. Bei den verschiedenen Installationen, an denen ich bisher gearbeitet habe, sind keine Probleme aufgetreten.Es gibt ein anderes selten verwendetes Format, das etwas seltsam ist, aber für alle Versionen funktioniert:
wird am ersten Oktober 2013 zurückkehren.
wird am 1. Oktober um 13:45:01 Uhr zurückkehren
Ich empfehle dringend, Parameter zu verwenden und niemals Ihren eigenen SQL-Code zu formatieren, indem Sie selbst entwickelte formatierte Anweisungsfragmente zusammenfügen. Es ist ein Eintrag für SQL-Injection und seltsame Fehler (das Formatieren eines Float-Werts ist ein weiteres potenzielles Problem).
quelle
Ihr erster Code funktioniert auf diese Weise
quelle
Ihr Problem liegt in der Eigenschaft "Datum",
DateTime
die nur auf das Datum gekürzt wird. Sie könnten die Konvertierung folgendermaßen setzen:quelle
Die Antwort, die ich suchte, war:
Ich habe auch gelernt, dass Sie es so machen können:
Dabei kann myCountryDateFormat je nach Anforderung geändert werden, um Änderungen zu berücksichtigen.
Bitte beachten Sie, dass der Tag "Diese Frage hat hier möglicherweise bereits eine Antwort:" die Frage nicht beantwortet hat, da, wie Sie sehen, ein ".Date" verwendet wurde, anstatt es wegzulassen. Es ist ziemlich verwirrend für neue Programmierer von .NET
quelle
Wenn Sie das aktuelle Datum in einer Tabelle speichern möchten, damit Sie es verwenden können
oder übergeben Sie diese Funktion als Parameter
z.B. 'update tblname set curdate = GETDATE () wobei colname = 123'
quelle
Warum nicht den String ganz überspringen:
quelle
Ihr Problem liegt in der
Date
Eigenschaft,DateTime
die bisher nur abgeschnitten wurde . Sie könnten die Konvertierung folgendermaßen setzen:quelle
Eine weitere Lösung zum Übergeben von DateTime von C # an SQL Server, unabhängig von den Spracheinstellungen von SQL Server
angeblich, dass Ihre regionalen Einstellungen dann das Datum als dd.MM.yyyy (deutscher Standard '104') anzeigen
Übergibt die Variable C # datetime an die Variable vom Typ SQL Server Date, wobei die Zuordnung gemäß den "104" -Regeln berücksichtigt wird. SQL Server Datum erhält JJJJ-MM-TT
Wenn in Ihren regionalen Einstellungen DateTime anders angezeigt wird, verwenden Sie die entsprechende Übereinstimmung aus der SQL Server CONVERT-Tabelle
Weitere Informationen zu Regeln finden Sie unter https://www.techonthenet.com/sql_server/functions/convert.php
quelle
Ich denke, das Problem war, dass zwei einfache Anführungszeichen fehlten.
Dies ist die SQL, die ich für das MSSMS ausführe:
Wie Sie sehen können, gibt es zwei einfache Anführungszeichen, daher müssen Ihre Codes lauten:
Verwenden Sie in MSSQL oder sogar in MySQL einfache Anführungszeichen für jede Zeichenfolge. Ich hoffe das hilft.
quelle
Verwenden wir die integrierte SqlDateTime-Klasse
Müssen aber noch auf Nullwerte prüfen. Dies löst eine Überlaufausnahme aus
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
quelle
Nur Sie geben "T" + DateTime.Now.ToLongTimeString () + '2015-02-23' ein.
quelle
Wenn Sie eine Tabelle mit dieser dateTime aktualisieren möchten, können Sie Ihre SQL-Zeichenfolge wie folgt verwenden:
quelle
"
.quelle