ここではLinq-to-SQLと実際には奇妙で一貫性のない動作があります。Linq-to-SQLとDateTimeの奇妙さ
私たちのアプリケーションは、かなりの数の顧客のサイトにインストールされており、ほとんどの場合うまく動作します。 Linq-to-SQLのクエリの1つがテーブルを更新し、DateTime
列を新しい値に設定します。上がらない理由のために、一人の顧客のサイトで、しかし
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = '2011-11-04 14:15:25', @ID = 555
:すべてのケースで
- - 私たちの開発およびテストシステムなど、このLINQのツーSQLステートメントは、の線に沿って何かに翻訳されます「tは私たちに明確な(まだ)、この更新はに翻訳されます:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = 'Nov 4 2011 02:15:25PM', @ID = 555
、その後はSQL Server 2005に失敗したいくつかの理由があります。
この顧客のサーバー(WebサーバーとSQL Server)には、英語版のWindows Server 2008がインストールされています。 SQL Serverの言語がus_english
に設定され、日付形式がmdy
に設定されている場合、更新プログラムを実行しているユーザーアカウントの言語がEnglish
に設定されており、そのセットアップは他の場所で同じです(たとえばon私たちのテストサーバーインフラストラクチャ)。
だから私の質問は本当にです:
なぜ地球上のツーSQLのLINQが突然SQL Serverに送信するために同じ
DateTime
の全く異なる表現を作成しますか?これを制御するつまみはありますか?なぜ、ADO.NETとSQL Server 2005 SP2データベースは、その
UPDATE
ステートメントを正しく処理できないのですか? - SQLDATETIMEオーバーフロー
SqlTypeException:私達は私達の読み込みログにエラーを取得しています。 1/1/1753 12:00:00 AMと12/31/9999 11:59:59 PMの間である必要があります。
(SQL Serverエラーよりも).NETのエラーのようだと.NETは実際にいくつかの理由で有効なDateTime
ように、そのNov 4 2011 02:15:25PM
を解釈できないかのように思えます。 SQL Server Management Studioで生成されたUPDATEステートメントを実行しようとすると、我々は起こることそのエラーを「強制的」に見えることはできません - UPDATE
は喜んでうまく動作します.....
更新:さらにいくつかの調査がLinq-を示しているようです-SQLは、SQL Server 2005またはSQL Serverと2008
- 逆行は、私たちの日付がになって取得するときに異なる動作をします:SQL Serverと
Nov 4 2011 02:15:25PM
- 日後、私たちの日付は次のように変わります:
2011-11-04 02:15:25PM
C#/ VB.NETアプリケーションのCurrentCulture設定を確認してください。 –
@BogdanSahlean:すべてのシステムで 'CurrentCulture'が' InvariantCulture'に設定されています –
これは.NETの問題であり、SQLではないことに同意します。おそらくLINQ2SQLの不具合はどこかで不変の文化を使うことを忘れています。 Windowsの場所の設定は一致していますか? – leppie