Bonjour, dans une base de donnée sqlserver j'ai un champs en varbinary(MAX) contenant un flux compressé en rar, et je veux le recuperer dans un champs en byte[], mais je sais pas quoi faire :Code:ctrID = Convert.????(sqlDR["FluxCompressé"]);
Merci
Version imprimable
Bonjour, dans une base de donnée sqlserver j'ai un champs en varbinary(MAX) contenant un flux compressé en rar, et je veux le recuperer dans un champs en byte[], mais je sais pas quoi faire :Code:ctrID = Convert.????(sqlDR["FluxCompressé"]);
Merci
Si c'est du SQL Server, tu peux faire ça :
Dans le cas général, c'est un peu plus compliqué... Il faut utiliser la méthode GetBytes du DataReader. Pour obtenir la longueur des données, appelle GetBytes une première fois avec le paramètre buffer = null. Ensuite, initialise un buffer de la taille voulue. Enfin, copier les données vers le buffer en appelant GetBytes de nouveau :Code:
1
2 SqlBinary sqlBin = sqlDR.GetBinary(sqlDR.GetOrdinal("FluxCompressé")); ctrID = sqlBin.Value;
Par contre, si le volume de données est trop important pour être mis entièrement en mémoire et que tu veux le copier vers un flux (fichier, réseau...), il faut lire le champ bloc par bloc et l'écrire dans le flux au fur et à mesureCode:
1
2
3
4
5 int ord = sqlDR.GetOrdinal("FluxCompressé"); long length = rd.GetBytes(ord, 0, null, 0, 0); byte[] buffer = new byte[length]; rd.GetBytes(ord, 0, buffer, 0, length); ctrID = buffer;
merci