将Byte []转换为String - Interbase转换为C# - InvalidCastException

时间:2012-11-25 04:22:38

标签: c# string bytearray blob oledbdatareader

我正在使用OleDbDataReader rdr将BLOB格式的“注释”字段(子类型1段大小80)读入Interbase数据库的字符串中,并且我不断获得异常。有什么建议吗?

尝试#1

ls_Chap_Comments.Add((rdr["Comments"]).ToString());

InvalidCastException:由于符号不匹配或数据溢出以外的原因,无法转换数据值。例如,数据在数据存储中已损坏,但该行仍可检索。“

尝试#2

byte[] b = new byte[100];
b = (byte[])rdr["Comments"];
string s = System.Text.ASCIIEncoding.ASCII.GetString(b);

InvalidCastException:无法将类型为System.String的对象强制转换为System.Byte[]

尝试#3

// 17 is the BLOB column zero-based location for "Comments"
retval = rdr.GetBytes(17, startIndex, outbyte, 0, bufferSize);    

InvalidCastException:无法将System.String类型的对象强制转换为System.Byte[]类型。

任何建议都会非常感激!

2 个答案:

答案 0 :(得分:0)

你应该致电

rdr.IsDBNull(rdr.GetOrdinal("Comments"))

在尝试读取值之前。

答案 1 :(得分:0)

我一直在寻找这个问题的答案,但这并不像看起来那么困难。 将值作为对象类型检索并将其强制转换为字符串(假设blob包含字符串)。

string commentsValue = (string)rdr.GetValue(17);