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

时间:2023-01-13 03:38:46
Sybase 8.0 使用了text 字段,
使用 
int ordinal = reader.GetOrdinal(name);
long size = reader.GetBytes(ordinal, 0, null, 0,0);
Byte[] buffer = new Byte[size];
reader.GetBytes(ordinal, 0, buffer, 0, buffer.Length);
 Encoding rd = Encoding.GetEncoding("gb2312");

 获取值,总是报 无法将类型为“System.String”的对象强制转换为类型“System.Byte[]”。
可是使用getString,getchars 无法获取到值,不知什么原因,请各位高手帮帮忙!!!谢谢!!!

9 个解决方案

#1


text 字段 会直接放到 string里吧. 应该不用当成byte[]处理

#2


 
              string  oldHtml  =  GetYourGB2312Html();    //                
                Encoding  encoding;                
                encoding  =  System.Text.Encoding.GetEncoding( "GB2312 "); 
                //  string  >  bytes 
                byte[]  bytes  =  encoding.GetBytes(oldHtml); 
                encoding  =  System.Text.Encoding.UTF8; 
                //  bytes  >  string 
                string  newOldHtml  =  encoding.GetString(bytes); 
                //Response.Write(newOldHtml); 
这样就可以把gb2312转成utf8了

#3


既然提示为System.String了,那么肯定要用getString方法了,或者只有通过reader[name]来获取Object值。如果无法获取到值,那就需要找其它原因了。

#4


使用reader.GetString(),无法获取到值,是“”字符串:

#5


引用 4 楼 cong_er 的回复:
使用reader.GetString(),无法获取到值,是“”字符串:

那里因为数据库里没有值吧

#6


回复;(太阳之火) 
数据库是有值得,并且信息量很大,在数据库中查询也是有显示的,如果把字段类型改成varchar 是可以取出来的,但是要求必须要用text类型

#7


sysbase 不太懂,帮你顶了

#8


可能是Sysbase的数据库连接驱动的问题,也许它不支持text类型数据,一般不支持的类型就无法读出内容。

#9


引用 8 楼 qldsrx 的回复:
可能是Sysbase的数据库连接驱动的问题,也许它不支持text类型数据,一般不支持的类型就无法读出内容。


使用的是sybase oledb provider,应该是支持text类型数据的!!

#1


text 字段 会直接放到 string里吧. 应该不用当成byte[]处理

#2


 
              string  oldHtml  =  GetYourGB2312Html();    //                
                Encoding  encoding;                
                encoding  =  System.Text.Encoding.GetEncoding( "GB2312 "); 
                //  string  >  bytes 
                byte[]  bytes  =  encoding.GetBytes(oldHtml); 
                encoding  =  System.Text.Encoding.UTF8; 
                //  bytes  >  string 
                string  newOldHtml  =  encoding.GetString(bytes); 
                //Response.Write(newOldHtml); 
这样就可以把gb2312转成utf8了

#3


既然提示为System.String了,那么肯定要用getString方法了,或者只有通过reader[name]来获取Object值。如果无法获取到值,那就需要找其它原因了。

#4


使用reader.GetString(),无法获取到值,是“”字符串:

#5


引用 4 楼 cong_er 的回复:
使用reader.GetString(),无法获取到值,是“”字符串:

那里因为数据库里没有值吧

#6


回复;(太阳之火) 
数据库是有值得,并且信息量很大,在数据库中查询也是有显示的,如果把字段类型改成varchar 是可以取出来的,但是要求必须要用text类型

#7


sysbase 不太懂,帮你顶了

#8


可能是Sysbase的数据库连接驱动的问题,也许它不支持text类型数据,一般不支持的类型就无法读出内容。

#9


引用 8 楼 qldsrx 的回复:
可能是Sysbase的数据库连接驱动的问题,也许它不支持text类型数据,一般不支持的类型就无法读出内容。


使用的是sybase oledb provider,应该是支持text类型数据的!!