SQL Server VARBINARY(max) c# byte[]
Je suis d'interrogation de la table (l'une des colonnes est un VARBINARY(MAX)
) qui retourne des enregistrements.
Puis-je enregistrer que .dat.csv puis-je analyser les par qui .fichier dat et varbinary valeur dans une chaîne en divisant le fichier basé sur des virgules. Maintenant, j'ai besoin de convertir ce type varbinary de tableau d'octets. Comment puis-je le faire?
- vous voulez convertir la chaîne de caractères contenant varbinary dans un tableau d'octets vrai?
- Je suis susceptible manque quelque chose, mais pourquoi les intermédiaires, CSV étape? Si vous avez une chaîne et que vous souhaitez byte[], vous pouvez simplement exécuter var encoding=nouveau Système.Texte.UTF8Encoding(); var octets = encodage.GetBytes(str);
- Ouais
- J'ai essayé c'est de me donner le fichier corrompu
- alors que l'encodage est le fichier soit écrit dans? J'ai juste attrapé le code que j'ai eu, qui a été UTF8. Si vous pouvez ignorer le CSV étape je voudrais (ou l'écrire en binaire vs codé). Écrire des fichiers binaires dans un format de texte est une mauvaise pratique, surtout sensibles pour les citations, les virgules et les sauts de ligne. Il peut être encodé en base64 dans le CSV, alors vous pourriez avoir à décoder le codage base64.
Vous devez vous connecter pour publier un commentaire.
Bonne question. Techniquement, vous pouvez le faire en convertissant d'abord à un tableau de caractères, puis de les convertir à d'octets. Toutefois, les chaînes de dans .NET sont encodés en Unicode par défaut (au lieu de l'ASCII), de sorte qu'il devient délicat.
Si possible, vous devriez essayer de tirer le varbinary du fichier comme un tableau d'octets, à l'aide de la FileStream vous êtes en train de lire à partir de la place de la StreamReader qui effectue les conversions de codage et de l'encodage du fichier de type.
Le problème avec cet octet-à-string-à-octet babelfishing est que certains bytecode ont une signification particulière dans chaque codage Unicode, donnant des informations pour le décodeur sur le nombre d'octets qu'il devrait se retirer de décoder le caractère suivant. Lors de la conversion entre les différents encodages Unicode et l' .NET-native encodage UTF-8 pour les cordes, les octets sera gagné, perdu, et changé. Quand c'est une chaîne, n'est pas très grave; l'information de codage des séjours avec la chaîne. Quand c'est du binaire des données, le codage et le décodage peut corrompre, sauf si c'est fait d'une manière très spécifique.
La seule façon dont cela fonctionne parfaitement si vous écrivez le fichier en utilisant le codage ASCII, puis le lire en tant que tel, qui sera la cause de chaque octet d'être traités comme un seul caractère. Vous pouvez alors simplement de convertir chaque caractère de retour à un octet, et le plus significatif de l'octet de la UInt16 les coulisses de la Syetem.Char, qui est juste zéro-padding pour l'octet de la fed sur le char, seront rejetées.
Techniquement, vous pourriez tirer à l'aide de toute l'encodage Unicode, mais vous avez besoin de savoir beaucoup de détails au sujet de la façon dont vous avez écrit ces octets, et la façon dont le lecteur est de la lecture dans de retour, de sorte que vous pouvez effectuer l'encodage correct et de l'expansion (ou la déflation) que nécessaire pour obtenir l'original bytestream.
EDIT: L' .NET 2.0 version - pas de Linq:
var
indique au compilateur de déduire la variable sera du type retourné par l'expression d'initialisation, donc si vous vous retrouvez de le changer, vous n'avez pas à aller changer le type déclaré de trop. Toutefois, si vous ne pouvez pas utiliser la fonction var, vous probablement ne peux pas utiliser Linq; il a été introduit en C# 3.0 avec Framework 3.0-3.5.