【问题标题】:How to display varBinary field data如何显示 varBinary 字段数据
【发布时间】:2009-06-02 09:40:13
【问题描述】:

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

System.Byte[]

不是价值

0x2C6D1A

在数据库中。

请帮忙解决这个问题。

【问题讨论】:

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


    【解决方案1】:

    您可以使用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
    

    (注意:这种类型的转换 - 从 VARBINARYVARCHAR 格式为 '0x1234AB' - 仅在 SQL Server 2008 中正常工作。SQL Server 的早期版本只是将二进制数据直接转换为字符数据.)

    【讨论】:

    • 你能说得更具体一点吗?很抱歉我不明白在哪里添加这行代码:string forDisplay = "0x" + BitConverter.ToString(yourByteArray).Replace("-", string.Empty);
    【解决方案2】:

    如果没有任何明显可用的东西,也许只是循环:

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

    【讨论】:

    • 将数据从 sql server 绑定到 datagrid 的最佳方法是什么?我需要为用户提供更新文件的选项(用新文件替换现有文件),我是否需要先从 sql 服务器加载现有文件,然后为用户提供替换它的选项,或者是否可以在不加载的情况下替换它进入网络应用程序?
    • @RehanMehdi 这似乎是一个完全不相关的问题;我会把它扔进一个对象模型中......
    • 感谢您的回复。你能帮我写那个吗。我是对象编程的新手。我应该用我的代码开始一个新问题吗?
    • @Rehan 这听起来不是一个非常具体的问题...您可以尝试,但要获得好评,它需要比这更具体一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2017-05-28
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多