質問

これにより、私は本当に興奮しました!

  1. ADO.NETがSQL Server 2008に接続するデータレイヤーでは、ログインのデフォルト言語は「british」です
  2. DateTime列を選択してデータビューに入れ、それを返します。
  3. aspxページのデータバインド
  4. this:<!> lt;%#String.Format(<!> quot; {0:MMM / yyyy} <!> quot ;, Eval(<!> quot; dbPeriodFrom <!> quot;))% <!> gt;

データベースは2009/10/01を返します(これはyyyy / MM / ddです) ステップ4の結果は2009年1月ですか????

Webサーバーの地域設定は英国です machine.configには<!> lt; globalization ...セクションはありません IISのNETグローバリゼーションは、uiCulture = en culture = en-GBに設定されます サイトのweb.configで設定しました

これは古典的な<!> quot;私の開発マシンで動作します。.<!> quot;しかし、実稼働シナリオにデプロイすると中断します。 何を見逃していたでしょうか?

編集

したがって、ASP.NETアプリケーションがSQl Server 2008に接続するために使用するログインは、ログインのプロパティでデフォルトの言語が「イギリス英語」に設定されているにもかかわらず、米国の日時を取得しているようです。

TSQLで問題が発生します:

SELECT 
    DATEPART(month, CAST('2009.02.01' AS DATETIME))
    ,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102))

デフォルトの言語を「英語」に設定したWindows統合ログイン(管理者)の出力

2 2

デフォルトの言語を「英国英語」に設定したASP.NETで使用されるSQL Serverログインの出力

1 2

役に立ちましたか?

解決

データベース自体とそのサーバーのロケール設定を確認します。設定に応じて、日付はロケール設定に従ってフォーマットされます。データベースサーバーはおそらく英語(米国)に設定されていると思われます。dbサーバー自体の地域設定を確認してください。

これが役立つことを願って、 宜しくお願いします、 トム。

他のヒント

コマンド/リーダー/アダプターから日付を取得するコードを見ることに興味があります-データベース列がdatetimeとして入力されている場合、ネットワーク上にあるものはではありません実際には<!> quot; 2009/10/01 <!> quot; -これは2進数です(ほとんどの日付が通信中です)。そのため、あいまいさはありません。

どこかで文字列(おそらくParse)として処理していることを期待しています-これは必要ないはずです。その場合、SELECTとして[n][var]char(x)としてではなく、<=>として。

Management Studioを使用して、データベースに保存されている値を確認します。また、MS SQLサーバーでは、日付の汎用形式はYYYY-MM-DDTHH:MM:SS.mmm(2009-01-05T10:12:55.001)およびYYYYMMDD(20090105)です。データベースで使用されるロケールに関係なく、これらの形式は常に同じように解析されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top