2009-06-02 60 views
2

我有一個數據庫字段的dataType是varBinary。現在在一個gridView中我想顯示這些數據。但我得到的輸出:如何顯示varBinary字段數據

System.Byte[] 

不是值

0x2C6D1A 

這是在數據庫中。

請幫助如何解決這個問題。

回答

4

可以使用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只是將bin直接進制數據字符數據)

+0

請問您能否更具體些。我很抱歉,我不明白在哪裏添加這行代碼: 'string forDisplay = 「0x」+ BitConverter.ToString(yourByteArray).Replace(「 - 」,string.Empty);' – 2013-09-16 05:57:31

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 server綁定到datagrid?我需要給用戶選項來更新文件(用新文件替換現有文件),我是否需要先從sql服務器加載現有文件,然後給用戶選項以替換它,或者可以在不加載的情況下替換它進入網絡應用程序? – 2013-09-16 06:02:00

+0

@RehanMehdi這似乎是一個完全無關的問題;我只是把它扔進一個對象模型... – 2013-09-16 07:09:24

+0

感謝您的回覆。你能以書面形式幫助我嗎?我是新的對象編程。我應該用我的代碼開始一個新的問題嗎? – 2013-09-16 07:25:54

相關問題