Как отобразить данные поля varBinary - PullRequest
2 голосов
/ 02 июня 2009

У меня есть поле базы данных, тип данных которого - varBinary. Теперь в gridView я хочу отобразить эти данные. Но я получаю вывод:

System.Byte[]

не значение

0x2C6D1A

который находится в базе данных.

Пожалуйста, помогите, как решить эту проблему.

Ответы [ 2 ]

5 голосов
/ 02 июня 2009

Вы можете использовать класс BitConverter для форматирования вашего байтового массива в целях отображения:

string forDisplay =
    "0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);

Если вы не хотите преобразовывать напрямую в string, тогда BitConverter имеет множество методов для преобразования из байтовых массивов в различные другие типы.

EDIT ...

Если вы привязываете некоторые результаты запроса непосредственно к элементу управления 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 просто приводили двоичные данные непосредственно к символьным данным. .)

0 голосов
/ 02 июня 2009

Если нет ничего очевидного, возможно, просто цикл:

    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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...