Quand une valeur est téléchargée à partir de SQL Server (pour les performances)

En utilisant un SqlDataReader normal d'un SqlCommand avec SqlConnection , je me request: Quand est une valeur téléchargée du server sql à ma machine? Est-ce quand j'appelle reader.Read() ou quand je récupère réellement la valeur avec reader.GetBytes ?

Ma principale préoccupation est que j'ai des champs BLOB dans une vue. Parfois, je vais récupérer des données de la vue avec datatables BLOB, et parfois je vais les laisser sortir pour accélérer. Je me request si je devrais créer une vue différente qui ne contient pas les champs BLOB afin d'accélérer les performances (comme en empêchant datatables BLOB à download sur la machine).

Ou est-ce suffisant pour ne pas saisir la valeur avec reader.GetBytes ?

Si vous venez d'appeler ExecuteReader() ou ExecuteReader(CommandBehavior) et que vous n'avez pas défini l'indicateur CommandBehavior.SequentialAccess , la lecture se produit lorsque vous appelez reader.Read() .

Si vous avez utilisé .ExecuteReader(CommandBehavior.SequentialAccess) il lira les valeurs comme vous les requestz, mais vous devez requestr les colonnes dans le même ordre que vous les avez spécifié dans la requête et vous devez lire chaque colonne avant de passer à la ligne suivante .

Sur la base de votre description, vous ne devez pas inclure la colonne avec le BLOB lorsque vous n'avez pas besoin des données blob, vous pouvez garder le même schéma que vos deux requêtes

 select Col1, Col2, BlobData from Foo 

quand vous voulez le blob et

 select Col1, Col2, cast(null as varbinary(max)) as BlobData from Foo 

quand vous ne voulez pas le blob, il gardera le schéma mais passera juste en null.