从数据库中读取数据使Unable能够将“System.Byte”类型的对象强制转换为“System.String”错误

时间:2014-01-16 12:33:18

标签: c# database

请参阅下面的案例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,而不是byte。这真的很有趣。案件有何不同?

案例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")));
 //}

1 个答案:

答案 0 :(得分:1)

你得到的例外就是告诉你你需要知道什么......

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

正如您所说dmic_onlytinyint

如果你真的想要它作为一个字符串,你必须首先将它作为一个字节然后转换为一个字符串

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