2012-02-05 61 views
0

最近,我使用與我不同的Windows區域設置的客戶端最近出現了幾個問題。我似乎無法找到解決方法。錯誤如下:來自數據庫的區域/區域設置和提取日期時間(來自字符串)

'InventoryDataTable'的類型初始值設定項引發異常。 ---> System.TypeInitializationException:「InventoryDataTable」的類型初始值設定項引發異常。 ---> System.FormatException:String未被識別爲有效的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

發佈導致問題的實際代碼會有所幫助,但是我可以很好地猜出發生了什麼。

難道是存儲到您的中央數據庫的日期格式總是給定的格式(也許美國?)。如果是這樣,那麼很可能發生以下情況:

從查詢返回到您的數據庫的日期如1/14/2012。運行在問題客戶端上的代碼使用歐洲日期區域設置解析日期。 (在歐盟和其他大多數國家在世界上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

我的數據庫中的日期時間格式爲12/17/2011 2:10:00 AM。在MM/dd/yyyy和dd/MM/yyyy之間轉換沒有問題。例如,當區域設置以不同的格式調用日期時,MM.dd.yyyy。我試圖編輯DataSet.Designer.vb來強制en-US格式化,但是隨時在數據集設計器中執行任何操作時,這些更改都會恢復。 – LordVe 2012-02-17 02:23:10