如何显示varBinary字段数据

时间:2009-06-02 09:40:14

标签: c# asp.net sql sql-server

我有一个dataType为varBinary的数据库字段。现在在gridView中我想显示该数据。但我得到输出:

System.Byte[]

不是值

0x2C6D1A

在数据库中。

请帮助解决此问题。

2 个答案:

答案 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);
        }
    }