指定的轉換無效”的解決方案:
發生該錯誤有以下幾種情況:
第一:數據庫字典的數據類型與程序中的不同
例如:在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:
囧……莫名~那個奇妙啊。
原本是帶參數的,以為是參數有問題,反復更改參數的類型和數目發現都不對,郁悶。後來發現不帶參數都是一樣錯誤的。
經過半個多小時的奮戰後終於找到原因:跨線程調用了。
簡單來說,就是上面這個函數調用的時候不是主界面的線程(因為是函數回調),結果就報了那麼一個莫名其妙的錯誤,真怨念。
解決方法:使用委托將函數放在主線程調用。