0

スタックオーバーフローに関する同様の質問を見つけましたが、私が持っている質問には実際には答えませんでした. asp.net アプリケーションが、SQL Server 2005 と同じように dd/mm/yyyy の日付をフォーマットしていることを確認する必要があります。

サーバーの日付カルチャ (それが呼ばれている場合) がアプリのプログラミング方法と一致することを確認するにはどうすればよいですか? 特定のデータベース設定と OS 設定はありますか? テーブル固有ですか?日と月を入れ替えたくありません。

ありがとうございました

4

5 に答える 5

6

データベースから DateTime を取得するときは、カルチャ化されていない形式 (DateTime オブジェクトのように、特定の日付からのティック数に基づく) である必要があります。文化に関心を持つ必要があるのは、その値を文字列に変換するときだけです。そのような場合、 yourDateTimeValue.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture) を使用して、情報が正しく表示されるようにすることができます。

于 2008-09-23T21:49:12.630 に答える
2

SqlParameters を使用すれば、あとは ADO.NET が処理してくれるので、心配する必要はないと思います。さらに、SQL インジェクション攻撃に対する防御にも適しています。:)

于 2008-09-23T22:06:09.407 に答える
0

他の人が言っているように、文化的に日時を保存する限り、あなたは大丈夫であるはずです。私がお勧めするのは、すべての時間を標準UTC時間として保存することです。SQL Server 2005以前では、タイムゾーン情報を保存する方法はありませんが、すべてがユニバーサル時間で保存されている場合は、後で時刻を現地時間に変換できるため、問題ありません。

SQL Server 2008には、タイムゾーンを認識するいくつかのデータ型があり、.NET 3.5を使用している場合は、タイムゾーンの処理/変換を支援するツールがあります。

時間をユニバーサルフォーマットで確実に維持します。複数のタイムゾーンで作業する必要がある場合、これは違いの世界になります。

于 2008-10-20T20:27:26.957 に答える
0

** SQL DateTime 列は null 非許容であり、最小値は 1/1/1753 ですが、.net DateTime は最小値が 1/1/0001 で null 非許容であるため注意してください。**

実際の DateTime 列からデータを取得する場合、既定では常に同じ標準形式になります。データを列に保存するには、パラメーターで SqlDbType.DateTime を指定することをお勧めします。

私はhttp://bytes.com/forum/thread767920.htmlからこれをはぎ取りました:

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

于 2008-09-23T21:49:30.930 に答える
0

DB に日時フィールドを保持している場合は、心配する必要はありません。

アプリの日付を厳密に型指定 (DateTime 変数) し、DBParameter/SqlParameter を使用して準備済みステートメントを介して日付を送信する限り、DB はそれらをそのまま受け取ります。

コードで日付を保持するために文字列を使用する場合、一部のキャストによって正しい値が確実に送信されます。

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"));

(コードは醜いですが、うまくいけば要点がわかるでしょう)

于 2008-09-23T22:02:51.317 に答える