簡體   English   中英

從數據庫讀取數據導致無法將類型為“ System.Byte”的對象轉換為類型為“ System.String”的錯誤

[英]Reading data from database gives Unable to cast object of type 'System.Byte' to type 'System.String' error

請參閱下面的情況1和2。

在情況2中: reader.GetString(reader.GetOrdinal(“ dmic_only”))行成功返回“ 1”

在情況1中:string.IsNullOrEmpty( reader.GetString(reader.GetOrdinal(“ dmic_only”)) )== false會引發異常。

異常:無法將類型為“ System.Byte”的對象轉換為類型為“ System.String”。

dmic_only是數據庫中的tinyint,而不是字節。 真的很有趣。 大小寫有什么區別?

情況1:

 if ((!reader.IsDBNull(reader.GetOrdinal("dmic_disallowed")) 
 && string.IsNullOrEmpty(reader.GetString(reader.GetOrdinal("dmic_disallowed"))) == false)
 && (!reader.IsDBNull(reader.GetOrdinal("dmic_only")) 
 && string.IsNullOrEmpty(reader.GetString(reader.GetOrdinal("dmic_only"))) == false))
{
   retVal.Add("dmic_disallowed", reader.GetString(reader.GetOrdinal("dmic_disallowed")));
   retVal.Add("dmic_only", reader.GetString(reader.GetOrdinal("dmic_only")));
}

情況2:

 //if ((!reader.IsDBNull(reader.GetOrdinal("dmic_disallowed")) 
 //&& string.IsNullOrEmpty(reader.GetString(reader.GetOrdinal("dmic_disallowed"))) == false)
 //&& (!reader.IsDBNull(reader.GetOrdinal("dmic_only")) 
 //&& string.IsNullOrEmpty(reader.GetString(reader.GetOrdinal("dmic_only"))) == false))
 //{
   retVal.Add("dmic_disallowed", reader.GetString(reader.GetOrdinal("dmic_disallowed")));
   retVal.Add("dmic_only", reader.GetString(reader.GetOrdinal("dmic_only")));
 //}

您得到的例外是告訴您您需要知道的確切信息...

reader.GetString(reader.GetOrdinal("dmic_only")) // will throw an error 

正如您所說的dmic_onlytinyint

如果您確實希望將其作為字符串,則必須先將其拆開為字節,然后再解壓縮為字符串

string strValue = Convert.ToString((byte)reader["dmic_only"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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