Jetzt habe ich die Ursache des Problems, dem Sie gegenüberstanden.
Idealerweise sollte DateTime.Now.ToString()
in den Datetime-Datentyp von SQL Server konvertiert worden sein, wenn er dem Parameter @LastCorrespondanceOn
Ihrer gespeicherten Prozedur zugewiesen wurde, aber eine Ausnahme ausgelöst wurde.
Der Grund ist die Datumsformateinstellungen Ihres Betriebssystems.
Die Sache ist, wenn Sie DateTime.Now.ToString()
in Ihrem C# -basierten Client-Code ausführen, nimmt es die Standardeinstellungen des Datums-Zeit-Format von Ihrem Betriebssystem. Schauen Sie sich das Datum Zeitformat zur Zeit eingestellt auf meinem Windows 10 Kasten:
Aufgrund dieser Einstellung den Code DateTime.Now.ToString()
27-07-2017 18:07:37
emittiert. Die Ausgabe, die Sie sehen, ist dd-MM-yyyy
Format.
Jetzt ist dieses dd-MM-yyyy
Datumsformat für SQL Server gemäß Ihren Standardeinstellungen nicht erkennbar.
SQL Server können zwei Datumszeitformate erkennen, wenn sie als Zeichenfolge von Client-Seite
- Internationales Datumsformat
yyyy-MM-dd
auch bekannt als ISO 8601 gesendet.
- Datumsformat, das durch die Dateformat-Einstellung des Benutzer-Logins gesteuert wird. Sie können den Befehl
dbcc useroptions
ausführen, um den Wert der Einstellung anzuzeigen. Für mich ist es zu mdy
Aufgrund dieser Diskrepanz in dem Datum Zeitformat wird von C# -Code gesendet (wegen Ihres Betriebssystems) und welche SQL Server analysieren kann, konfrontiert Sie das Problem festgelegt ist.
Wenn Sie die Konvertierung explizit durch date.ToString("yyyy-MM-dd");
durchgeführt haben, haben Sie einfach ISO 8601 International Date Time Format von SQL Server unterstützt so ausgerichtet, dass es zu arbeiten begann.
Das Standard Datum Zeitformat (ISO 8601) von SQL Server ist eine Konfiguration der Sortierungs Du derzeit verwenden, die Sie in Ihren SQL Server-Instanz-Eigenschaften überprüfen können, wie unten dargestellt:
Es Es wird dringend empfohlen, dass Sie immer das Datumsformat von SQL verwenden, wenn Sie es im Zeichenfolgenformat übergeben, wie in this Thread erwähnt.
So können Sie Ihr Problem auf drei Arten lösen:
- Ändern Sie den Standard-Datumsformat Ihres OS es auf SQL Server auszurichten (nicht empfohlen). Es wird niemals auf allen Client-Computern möglich sein, auf denen Ihre Anwendung ausgeführt wird.
- Verwenden Sie benutzerdefiniertes Datumsformat beim Aufrufen der Methode
ToString
, wie Sie dies getan haben, um es an eines der von SQL Server unterstützten Formate anzupassen. Das beste Format ist das ISO 8601-Format, das Sie verwendet haben.
Nicht in Zeichenfolge konvertieren. Übergeben Sie einfach den Datumswert, wie er ist.
var exec = db.Database.ExecuteSqlCommand("sp_InsertTicketChat @TicketId,
@FullName, @Description,
@LastCorrespondanceBy,@LastCorrespondanceOn",
new SqlParameter("@TicketId", TicketId),
new SqlParameter("@FullName", FullName),
new SqlParameter("@Description", Description),
new SqlParameter("@LastCorrespondanceBy", FullName),
new SqlParameter("@LastCorrespondanceOn",
DateTime.Now) //Don't call .ToString here
);
Ansatz # 3 ist das beste Angebot. Weitere Informationen finden Sie unter here, warum Sie keine Strings verwenden sollten, sondern den Datentyp date time, wenn Sie mit SQL Server datetime-Spalten arbeiten.
Sie benötigen eine Frage bearbeiten Sie den Code der gespeicherten Prozedur zeigen – Alex
ich bearbeiten kindly überprüfen. –
Warum rufen Sie 'GETDATE(),' AND und geben Sie ein Datum ein? – Alex