指定的轉換無效”的解決方案: 發生該錯誤有以下幾種情況: 第一:數據庫字典的數據類型與程序中的不同 例如:在Oracle數據庫中number(10,5)對應到程序中應為double類型。 解決方案:將數據模型中相應的字段類型進行修改。 比較容易出錯的是:Oracle中的number(10,5)對應到程序,應為double類型。 number(5)對應到程序中的int類型(根據自己的情況,short、int、long均可,不過在使用long時,model中也要相應修改為long)。 第二:在讀取數據庫數據之前沒有空值判斷。 即,直接從數據庫中讀取出某一字段,沒有對其進行空值判斷。 解決方案一:在程序中做空值判斷。 C#代碼 : if (!Convert.IsDBNull(reader["UNIT_CODE"])) { drugMedicalInfo.UNIT_CODE = reader.GetString(reader.GetOrdinal("UNIT_CODE")); } 解決方案二:在定義數據庫模型(/數據結構)時,使用可空類型。 C#代碼 : public class XXModel { int ? ID {get; set;} .... } 第三:跨線程調用導致的“指定的轉換無限”問題。 對於這種情況,還未遇到過。不過這兒有一參考: 很莫名其妙的exception message... 調用WebBrowser控件中的JS腳本使用這個函數來調用: WebBrowser.Document.InvokeScript("函數名",參數列表); 但是下午遇到一個很棘手的問題,就是調用的時候會拋出這樣一個莫名其妙的異常: 未處理 System.InvalidCastException Message="指定的轉換無效。" Source="System.Windows.Forms" StackTrace: 在 System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation() 在 System.Windows.Forms.WebBrowser.get_Document() 在 IPMessagerNet.UI.Controls.Chat.IEView.IETabPage.Commander_TextMessageReceived(Object sender, MessageEventArgs e) 在 System.EventHandler`1.Invoke(Object sender, TEventArgs e) InnerException: 囧……莫名~那個奇妙啊。 原本是帶參數的,以為是參數有問題,反復更改參數的類型和數目發現都不對,郁悶。後來發現不帶參數都是一樣錯誤的。 經過半個多小時的奮戰後終於找到原因:跨線程調用了。 簡單來說,就是上面這個函數調用的時候不是主界面的線程(因為是函數回調),結果就報了那麼一個莫名其妙的錯誤,真怨念。 解決方法:使用委托將函數放在主線程調用。