【发布时间】:2009-06-02 09:40:13
【问题描述】:
我有一个数据类型为 varBinary 的数据库字段。现在在 gridView 中我想显示该数据。但我得到了输出:
System.Byte[]
不是价值
0x2C6D1A
在数据库中。
请帮忙解决这个问题。
【问题讨论】:
标签: c# asp.net sql sql-server
我有一个数据类型为 varBinary 的数据库字段。现在在 gridView 中我想显示该数据。但我得到了输出:
System.Byte[]
不是价值
0x2C6D1A
在数据库中。
请帮忙解决这个问题。
【问题讨论】:
标签: c# asp.net sql sql-server
您可以使用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 的早期版本只是将二进制数据直接转换为字符数据.)
【讨论】:
string forDisplay = "0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);
如果没有任何明显可用的东西,也许只是循环:
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);
}
}
【讨论】: