2010-07-31 26 views
2

Je cette ligne de codeObtenir un enregistrement sql varbinary en utilisant la bibliothèque d'entreprise Microsoft

byte[] field1 = (reader.GetSqlBinary(reader.GetOrdinal("Field1")).Value; 

qui est un SqlDataReader

Je suis en train de convertir le code à utiliser le bloc d'accès aux données de la bibliothèque de l'entreprise, mais ne peux pas comprendre comment obtenir un byte[] en utilisant le IDataReader. J'ai regardé attentivement les documents MS, mais je n'ai rien trouvé qui m'aide.

Répondre

2

La première chose que je voudrais essayer est (où i est reader.GetOrdinal("Field1")):

byte[] firstTry = (byte[])reader.GetValue(i); 

Si cela échoue, peut-être:

byte[] secondTry; 
using (var ms = new MemoryStream()) 
{ 
    byte[] buffer = new byte[8040]; // sql page size 
    int read; 
    long offset = 0; 
    while ((read = (int)reader.GetBytes(i, offset, buffer, 0, buffer.Length)) > 0) 
    { 
     ms.Write(buffer, 0, read); 
     offset += read; // oops! added this later... kinda important 
    } 
    secondTry = ms.ToArray(); 
} 

Notez également que le comportement peut changer légèrement selon si CommandBehavior.SequentialAccess est spécifié.

+0

+1 merci Mark. "Première chose" a travaillé un régal. En regardant ça, je ne peux pas croire que je n'ai pas fait ça. Le Carling prend évidemment effet. Il est temps de fermer le studio visuel et de jouer avec Spotify! – Matt

+0

@Matt - Je suis content que le premier ait fonctionné - j'avais raté un pas * crucial * à partir de la seconde; p Maintenant corrigé, pour le bénéfice de la "longue queue". –