[英]Unable to cast the type 'System.String' to type 'System.Object'
[英]What .Net datatype could trigger an Unable to cast object of type '' to type 'System.String'
我的手上有一個.Net之謎。
我們收到了以下堆棧跟蹤
---> System.InvalidCastException: Unable to cast object of type '' to type 'System.String'.
at System.Data.DataColumn.IsMaxLengthViolated()
at System.Data.DataTable.EnableConstraints()
at System.Data.DataTable.EndLoadData()
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
觸發此錯誤的MSSQL數據庫表僅包含各種長度的整數和可空nvarchar列。
該表包含DBNull和字符串值。
無論我們嘗試什么,我們都無法觸發InvalidCastException,其中第一個類型的名稱顯示為空字符串''我們嘗試了每個我們想象的數據庫查詢可以返回的類型。
我們總是在InvalidCastException中收到正確的類型名稱
我們反編譯了IsMaxLengthViolated代碼,懷疑它構造了自己的InvalidCasetException並且格式錯誤,但只發現了一個正常的轉換
if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength)
這條消息似乎是由.Net框架生成的。
有沒有任何已知方法可以觸發我們缺少的格式錯誤的InvalidCastException?
替換它
if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength)
同
if (obj != null && obj != DBNull.Value && (Convert.ToString(obj)).Length > this.MaxLength)
UPDATE
此問題已發布,請訪問以下鏈接: [InvalidCastException:無法將類型為“System.DBNull”的對象強制轉換為“System.String”。]
上面鏈接中給出的答案是使用obj執行toString,但最佳實踐是Convert.Tostring()來處理null異常。
我希望這能解決你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.