簡體   English   中英

什么.Net數據類型可以觸發Unable轉換類型''的對象來鍵入'System.String'

[英]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,其中第一個類型的名稱顯示為空字符串''我們嘗試了每個我們想象的數據庫查詢可以返回的類型。

  • 的DBNull
  • INT
  • 詮釋?
  • 的SqlString

我們總是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM