У меня есть поле базы данных, dataType которого является varBinary. Теперь в gridView я хочу отобразить эти данные. Но я получаю вывод:
System.Byte[]
не значение
0x2C6D1A
который находится в базе данных.
Пожалуйста, помогите решить эту проблему.
Вы можете использовать класс 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 просто передают двоичные данные непосредственно в символьные данные.)
Если нет ничего очевидного, возможно, просто цикла:
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);
}
}
string forDisplay = "0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);