如何使用Ado.Net中的DataReader将varchar作为byte []数据?我们尝试了以下代码。
if (!objDataReader.IsDBNull(i))
{
long len = objDataReader.GetBytes(i, 0, null, 0, 0);
byte[] buffer = new byte[len];
objDataReader.GetBytes(i, 0, buffer, 0, (int)len);
}
但是上面的代码给出了错误(“无法将'System.String'类型的对象强制转换为'System.Byte []'。”)
更新
当列的值为null并且我删除dbnull条件时,执行下面的代码行会产生一个错误:“无法将类型为'System.DBNull'的对象强制转换为'System.Byte []”
long len = objDataReader.GetBytes(i, 0, null, 0, 0);
byte[] buffer = new byte[len];
objDataReader.GetBytes(i, 0, buffer, 0, (int)len);
答案 0 :(得分:5)
varchar
字段应该存储 text ,而不是原始字节。如果要存储不透明的二进制数据,请使用image
或binary
。
如果您想获得表示特定编码中某些文字的字节,可以使用Encoding.GetBytes
- 但您需要指定编码,例如Encoding.UTF8.GetBytes(text)
。但是,这可能不是它在数据库中的表示方式。关键在于它是文本数据,因此只要您可以准确地重现Unicode字符串,精确的二进制表示就无所谓了。
你在这个领域存储了什么?