L'obtention de données binaires à l'aide de SqlDataReader
J'ai une table nommé Blob (Id (int), de Données (Image)). J'ai besoin d'utiliser SqlDataReader pour obtenir que des données d'image. Notez que je ne veux pas de Réponse.Binarywrite() les données dans le navigateur. J'ai juste besoin que des données binaires comme byte[] pour utiliser les mêmes pour certaines opérations internes. Seule façon que je peux penser est d'obtenir l'id à l'aide de SqlDataReader et de l'utiliser à nouveau SqlCommand.ExecuteScalar() pour obtenir ce que byte[] pour un identifiant donné. Puis-je utiliser seulement le SqlDataReader (SqlCommand.ExecuteReader) pour obtenir que les données de l'image que byte[]? Ai-je raté quelque chose?
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de l'obtenir par le biais de:
(byte[])reader["Data"]
.Également de noter que la
image
type de données est obsolète, et sera supprimée dans une future version de SQL Server; utilisationvarbinary(max)
à la place.(byte[])reader["Data"]
Items
collection sur leSqlDataReader
dans .NET 4.0.Oui, vous pouvez utiliser
SqlDataReader.GetBytes
. Probablement, vous voulez passer denull
de la mémoire tampon dans le premier appel, pour savoir combien de données il est, et ensuite l'appeler de nouveau avec un tampon de taille appropriée.Vous peut simplement être en mesure d'utiliser l'indexeur et convertir le résultat dans un tableau d'octets - je ne suis pas sûr. Vaut le coup d'essayer 🙂
bytesRead
au lieu decurPos
; vous êtes actuellement en supposant toujours qu'il lit un tampon plein montant.Dans .NET Framework 4.5, vous pouvez utiliser GetStream méthode pour accéder à des données binaires comme des Flux.
De MSDN. Ne sais pas pourquoi je n'arrivais pas à trouver qu'avant.
Utilisez cette fonction pour la sécurité et flexible octets lecture:
int bufferSize = size > int.MaxValue ? int.MaxValue : (int)size;
Pas besoin d'utiliser le lecteur. Il suffit d'utiliser un jeu de données pour récupérer les valeurs de la base de données(à l'aide de procédures stockées ou toute autre méthode) et il suffit de taper le jeter avec l'octet(code ci-dessous) et de le stocker dans un tableau d'octets. Votre travail est fait.