2011-04-25 16 views
1

最近、Windows 7とSQL Server 2008 R2の新規インストールにWebアプリケーションをコピーしました。アプリケーションはLINQ to SQLを使用します。行のどこかで、POSTされた日付文字列の解析が失敗しました。ユーザーが4/23/2011のような日付文字列を入力すると、アプリケーションはそれを拒否し、エラーを返しますThe value '04/23/2011' is not valid for Due. Due(実際にDueDate)はSQL ServerのDateTimeフィールドです。Windows 7/.NET/SQL Serverで日付形式を設定する

これは正常に動作するために使用されました。マシンのOSの国際化設定に問題があると思ったので、短く長い日付の形式はそれぞれMM/dd/yyyydddd, MMMM dd,yyyyに設定されていますが、これは問題ありません。 SQL Serverデータベース言語は英語に設定されています。

このプロパティの部分クラスは次のようになります。私は微調整する必要がある別の日付形式の設定

[DisplayName("Due")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime? DueDate { get; set; } 

がなければなりません。どこを探していますか?

注:これはもっと正確にはserverfaultの質問かもしれませんが、devsはシステム管理者よりもこの問題に遭遇する可能性が非常に高いと思います。

さらに詳しい情報:SP_CONFIGURE 'default language'戻り値:

default language 0 9999 0 0 

:私は使用していたデータベースログインのデフォルトの言語は英語です。

+0

これはどこで拒否されますか? SQL Serverまたは前に ' – gbn

+0

のようになります(LINQ To SQLによって私は推測します)。私はクエリを行うことができますまたは '2011年4月23日'を使用して生のSQLで直接更新し、それは正常に動作します。 – RedFilter

答えて

0

私はマシンのOSの国際化が

を設定して、それが問題だったと仮定いいえ、それは番目のユーザーがブラウザでサーバーを告げて設定を国際化使用しています。

アプリケーションはそれを拒否し、エラーをスローします。値'04/23/2011 'はDueのために無効です。

これは純粋に悪いプログラミングです。実際にSQL文字列を自分で作成することを強く求めているのであれば、常に(!)日付をパラメータかISO形式で入力する必要があります。そのwoudl 2011年4月23日です。 SQL Serverは、クライアントまたはサーバーのどこかに設定されたロケールに関係なく、その形式を受け入れます。

+0

私はSQL文字列を作成していません - 私はMVCのTryUpdateModelを使用しています。この場合、あなたは何をお勧めしますか?また、再:ブラウザの設定、アプリケーションは古いブラウザで動作するブラウザ/マシンを使用して失敗するので、ここで正しいとは確信していません... – RedFilter