程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#程序中“指定的轉換無效”的解決方案

C#程序中“指定的轉換無效”的解決方案

編輯:C#入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved