Frage

Ich habe eine ähnliche Frage auf Stack-Überlauf gefunden, aber es gab keine Antwort wirklich die Frage, die ich habe. Ich muss sicherstellen, dass meine asp.net Anwendung formatiert das Datum tt / mm / jjjj das gleiche wie mein SQL Server 2005.

Wie überprüfe ich das Datum Kultur (wenn das ist, was es heißt) des Servers entspricht, wie ich meine App programmiert haben? Gibt es bestimmte Datenbankeinstellungen und Betriebssystem-Einstellungen? Ist es tabellenspezifische? Ich will nicht meine Tage und Monate umzusetzen.

Danke

War es hilfreich?

Lösung

Wenn Sie eine Datetime aus der Datenbank zu erhalten, sollten sie in ein nicht-kultivierten Format sein (wie das Datetime-Objekt, basierend auf der Anzahl der Ticks seit einem bestimmten Datum). Es ist nur, wenn Sie diesen Wert in eine Zeichenfolge konvertieren, die Sie mit der Kultur nach wie vor besorgt müssen. In diesen Fällen können Sie yourDateTimeValue.ToString ( "TT / MM / yyyy", CultureInfo.InvariantCulture) verwenden, um sicherzustellen, dass die Informationen richtig angezeigt wird.

Andere Tipps

Ich glaube, dass, wenn Sie SqlParameters ADO.NET verwenden erledigt den Rest nehmen und Sie müssen darüber keine Sorge. Außerdem ist es gut für die Verteidigung gegen SQL-Injection-Angriffe auch! :)

** Pass auf, da SQL Datetime-Spalten sind nicht-nullable und ihren Minimalwert 1753.01.01 während .net Datetime sind nicht-nullable mit min Werte von 1.1.0001. **

Wenn Sie Daten von einer echten Datetime-Spalte sind ziehen, standardmäßig, es wird immer im gleichen Standardformat. Für die Daten in die Spalte zu speichern, sollten Sie die SqlDbType.DateTime in Ihrem Parameter angeben.

i riss diese aus der http://bytes.com/forum/thread767920.html:

com.Parameters.Add ( "@ adate", SqlDbType.DateTime) .Value = DateTime.Now;

Nun, wenn Sie Datetime-Felder in der DB halten, sollten Sie sich keine Sorgen darüber.

Solange Sie die Daten in App halten stark typisierte (Datetime-Variablen) und die Daten durch vorbereitete Anweisungen mit DBParameter / SqlParameter Ihre DB ihnen nehmen senden wie es ist.

Wenn Sie Zeichenfolgen verwenden Ihre Reisedaten in Code zu halten, werden einige Abgüsse sicherzustellen, dass Sie die richtigen Werte an:

string sqlCmd = @"SELECT *
   FROM MyTable
   WHERE MyDateField = CONVERT(datetime, '{0}', 101)";

// assuming myDateString is a string with a date in the local format
sqlCmd = string.Format(sqlCmd,
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd"));

(der Code ist hässlich, aber hoffentlich wird es den Punkt über)

Wie andere erwähnt haben, sollten Sie in Ordnung sein, so weit wie Datetimes kulturell zu speichern. Was würde ich empfehlen, dass Sie alle Ihre Zeiten als Standard-UTC-Zeit speichern. In SQL Server 2005 und älter gibt es keine Möglichkeit Zeitzoneninformationen zu speichern, aber wenn alles in Weltzeit gespeichert ist, sollten Sie in Ordnung sein, weil die Zeit kann später auf die Ortszeit umgewandelt werden.

SQL Server 2008 hat einige Datentypen, die von Zeitzonen bewusst sind, und wenn Sie .NET 3.5 gibt es Tools verwenden mit Zeitzone Handhabung / Conversions unterstützen.

Auf jeden Fall halten mal in universellem Format. Dies wird eine Welt einen Unterschied machen, wenn Sie in mehreren Zeitzonen arbeiten müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top