2012-02-05 3 views
0

最近、私とは異なるWindows地域設定を使用しているクライアントにいくつかの問題が発生しています。私はそれを修正する方法を見つけることができないようです。エラーは次のとおりです。データベースからの地域/ロケールと(文字列からの)日付の引き出し

'InventoryDataTable'の型初期化器が例外をスローしました。 ---> System.TypeInitializationException: 'InventoryDataTable'の型初期化子が例外をスローしました。 ---> System.FormatException:文字列が有効なDateTimeとして認識されませんでした。

ユーザーがアプリケーションを読み込んで、地域設定が自分のものと一致しないときにエラーが発生します。アプリケーションはデータセットをロードし、ユーザーにログインさせる前に少量のデータを受信しようとします。これを削除すると、ユーザーがアプリケーションにログインした直後に問題が発生します。

私は私の領域のいずれかを使用するユーザーを強制的に、またはアプリケーションがそれ自身の...

正確なエラーにそれを把握できるようにするために適切な設定を見つけることができないよう:

System.InvalidOperationException: An error occurred creating the form. See Exception.InnerException for details. The error is: The type initializer for 'InventoryDataTable' threw an exception. ---> System.TypeInitializationException: The type initializer for 'InventoryDataTable' threw an exception. ---> System.FormatException: String was not recognized as a valid DateTime. 
    at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 
    at System.DateTime.Parse(String s) 
    at Invasion_3042_v2.INVDataSet.InventoryDataTable..cctor() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\INVDataSet.Designer.vb:line 7588 
    --- End of inner exception stack trace --- 
    at Invasion_3042_v2.INVDataSet.InventoryDataTable..ctor() 
    at Invasion_3042_v2.INVDataSet.InitClass() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\INVDataSet.Designer.vb:line 4296 
    at Invasion_3042_v2.INVDataSet..ctor() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\INVDataSet.Designer.vb:line 447 
    at Invasion_3042_v2.INV3042LOGIN.InitializeComponent() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\INV3042LOGIN.Designer.vb:line 39 
    at Invasion_3042_v2.INV3042LOGIN..ctor() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\INV3042LOGIN.vb:line 100 
    --- End of inner exception stack trace --- 
    at Invasion_3042_v2.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190 
    at Invasion_3042_v2.My.MyProject.MyForms.get_INV3042LOGIN() 
    at Invasion_3042_v2.My.MyApplication.OnCreateMainForm() in C:\Users\Tdata\Desktop\I2.original\Invasion 3042 v2\My Project\Application.Designer.vb:line 35 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() 

答えて

0

問題の原因となった実際のコードを投稿すると助けになりましたが、何が起こっているかについてかなり良い推測をすることができます。

中央データベースに保存されている日付形式は、常に指定された形式(おそらくUS?)であることがありますか。もしそうなら、非常に起こりそうなことは以下の通りです。

のような日付がクエリからデータベースに返されます。問題のクライアントで実行されているコードは、おそらくヨーロッパの日付の地域設定を使用して日付を解析しています。 (EUおよび世界のほとんどの他の国では14-JAN-2012は14/01/2012別名DD/MM/YYYY、ないMM/DD/YYYYとして表現される。

をどちらかの指定は、必ずしたいことを試してみてください

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" /> 

を...または、あなたのサーバ - と一致していないローカルシステムの設定をデフォルトを避けるために、次のように設定を指定したカルチャを使用して日付を解析:このようなあなたの設定ファイルで知られている、ベースの地域設定を使用します側の期待。

DateTime.Parse("1/14/2012", new CultureInfo("en-US")); // or whatever culture your server database expects... 
+0

私のDBのDateTimesは、2011年12月17日の2:10:00 AMの形式で格納されます。 MM/dd/yyyyとdd/MM/yyyyの間の変換に問題はありません。地域の設定で、日付がMM.dd.yyyyなどの別の形式で呼び出された場合です。私はen-USの書式設定を強制するためにDataSet.Designer.vbを編集しようとしましたが、データセットデザイナで何かを行うと、変更は元に戻されます。 – LordVe

関連する問題