web-dev-qa-db-fra.com

Conversion des données varBinary SQL Server en chaîne C #

J'ai besoin d'aide pour comprendre comment convertir les données provenant d'une colonne de table SQL Server définie comme varBinary (max) en une chaîne afin de l'afficher dans un étiquette.

C'est dans C # et j'utilise un DataReader.

Je peux extraire les données en utilisant:

var BinaryString = reader[1];

je sais que cette colonne contient du texte qui a été précédemment converti en binaire.

18
PercivalMcGullicuddy

Cela dépend vraiment de l'encodage utilisé lors de la conversion initiale de la chaîne en binaire:

 byte[] binaryString = (byte[])reader[1];

 // if the original encoding was ASCII
 string x = Encoding.ASCII.GetString(binaryString);

 // if the original encoding was UTF-8
 string y = Encoding.UTF8.GetString(binaryString);

 // if the original encoding was UTF-16
 string z = Encoding.Unicode.GetString(binaryString);

 // etc
36
LukeH

Les données binaires doivent être du texte codé - et vous devez savoir quel codage a été utilisé afin de les reconvertir avec précision en texte. Ainsi, par exemple, vous pouvez utiliser:

byte[] binaryData = reader[1];
string text = Encoding.UTF8.GetString(binaryData);

ou

byte[] binaryData = reader[1];
string text = Encoding.Unicode.GetString(binaryData);

ou diverses autres options ... mais vous besoin de connaître le bon encodage. Sinon, c'est comme essayer de charger un fichier JPEG dans une visionneuse d'images qui ne lit que PNG ... mais pire, car si vous obtenez un mauvais encodage, cela peut apparaître pour fonctionner avec certaines chaînes.

La prochaine chose à savoir est pourquoi il est stocké en tant que binaire en premier lieu ... s'il est censé être du texte, pourquoi n'est-il pas stocké de cette façon.

9
Jon Skeet

Vous devez savoir quel encodage a été utilisé pour créer le binaire. Ensuite, vous pouvez utiliser

System.Text.Encoding.UTF8.GetString(reader[1]);

Et changez UTF8 pour le codage utilisé.

2
Chris Haas