2009-06-02 6 views
2

J'ai un champ de base de données dont le type de données est varBinary. Maintenant, dans une grille, je veux afficher ces données. Mais je reçois la sortie:Comment afficher les données de champ varBinary

System.Byte[] 

pas la valeur

0x2C6D1A 

qui est dans la base de données.

S'il vous plaît aidez comment résoudre ce problème.

Répondre

4

Vous pouvez utiliser la classe BitConverter pour formater votre tableau d'octets à des fins d'affichage:

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

Si vous ne voulez pas convertir directement à un string, puis BitConverter has a load of methods pour convertir à partir des tableaux d'octets à divers autres types .

EDIT ...

Si vous lier des résultats de la requête directement au contrôle GridView alors il pourrait être plus facile de convertir votre colonne VARBINARY à un VARCHAR dans la requête elle-même:

SELECT CONVERT(VARCHAR(MAX), your_varbinary_column, 1) AS for_display 
FROM your_table 

(Remarque: Ce type de conversion - de VARBINARY à VARCHAR au format '0x1234AB' - ne fonctionne correctement que dans SQL Server 2008. Les versions antérieures de SQL Server viennent de convertir la corbeille données ary directement aux données de caractères)

+0

Pouvez-vous s'il vous plaît être un peu plus précis. Je suis désolé, je ne pouvais pas comprendre où ajouter cette ligne de code: 'string forDisplay = " 0x "+ BitConverter.ToString (yourByteArray) .Remplacer (" - ", string.Empty);' –

0

S'il n'y a pas quelque chose d'évident disponible, boucle peut-être juste:.

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

Si cela est une propriété de classe, il serait trivial de créer un TypeConverter qui fait ceci (à des fins d'affichage), et marquer la propriété avec [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

Quelle est la meilleure façon lier les données du serveur SQL à DataGrid? Je dois donner aux utilisateurs l'option de mettre à jour un fichier (remplacer un fichier existant par un nouveau fichier), dois-je d'abord charger le fichier existant depuis le serveur sql et ensuite le remplacer ou le remplacer sans le charger dans l'application Web? –

+0

@RehanMehdi qui semble une question complètement indépendante; Je voudrais juste le jeter dans un modèle d'objet ... –

+0

Merci d'avoir répondu. Pouvez-vous m'aider à écrire cela? Je suis nouveau à la programmation d'objets. Devrais-je commencer une nouvelle question avec mon code? –

Questions connexes