我有一个dataType为varBinary的数据库字段。现在在gridView中我想显示该数据。但我得到输出:
System.Byte[]
不是值
0x2C6D1A
在数据库中。
请帮助解决此问题。
答案 0 :(得分:5)
您可以使用BitConverter
类来格式化字节数组以用于显示目的:
string forDisplay =
"0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);
如果您不想直接转换为string
,那么BitConverter
has a load of methods可以将字节数组转换为各种其他类型。
修改... 强>
如果您将某些查询结果直接绑定到GridView
控件,则可能更容易将VARBINARY
列转换为查询本身中的VARCHAR
:
SELECT CONVERT(VARCHAR(MAX), your_varbinary_column, 1) AS for_display
FROM your_table
(注意:这种类型的转换 - 从VARBINARY
格式的VARCHAR
到'0x1234AB'
- 只能在SQL Server 2008中正常运行。早期版本的SQL Server刚刚投放二进制数据直接到字符数据。)
答案 1 :(得分:0)
如果没有明显可用的东西,也许只是循环:
public static string ToHexString(byte[] raw)
{ // could also be an extension method
StringBuilder sb = new StringBuilder("0x", 2 + (raw.Length * 2));
for (int i = 0; i < raw.Length; i++)
{
sb.Append(raw[i].ToString("X2"));
}
return sb.ToString();
}
如果这是一个类属性,创建执行此操作的TypeConverter
(用于显示目的)并使用[TypeConverter(typeof(HexConverter))]
标记属性将是微不足道的:
class HexConverter : TypeConverter // untested
{
public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture,
object value, Type destinationType)
{
if (destinationType == typeof(string))
{
return ToHexString((byte[])value);
}
return base.ConvertTo(context, culture, value, destinationType);
}
}