Как отобразить данные поля varBinary

2

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

System.Byte[]

не значение

0x2C6D1A

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

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

Теги:
sql-server

2 ответа

5
Лучший ответ

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

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

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

ИЗМЕНИТЬ...

Если вы привязываете некоторые результаты запроса непосредственно к элементу управления 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
    Можете ли вы быть немного более конкретным. Мне жаль, что я не мог понять, куда добавить эту строку кода: string forDisplay = "0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);
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);
        }
    }
  • 0
    Каков наилучший способ привязать данные с сервера sql к сетке данных? Мне нужно дать пользователям возможность обновить файл (заменить существующий файл новым файлом), нужно ли сначала загружать существующий файл с сервера sql, а затем давать пользователям возможность заменить его или его можно заменить без загрузки в веб-приложение?
  • 0
    @RehanMehdi, который кажется совершенно не связанным вопросом; Я бы просто бросил его в объектную модель ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню