2012-12-19 12 views
12

Ich habe Tabelle mit varbinary (MAX) Parameter. Nach dem Ausführen der Abfrage werde ich das Ergebnis in SqlDataReader speichern, da es mehrere Spalten als Ausgabe hat.Get Byte [] aus dem SqlDataReader?

SqlCommand cmd = new SqlCommand("select leave_details from LeaveTable"); 
SqlDataReader obj; 
con.Open(); 
obj = cmd.ExecuteReader(); 

Jetzt möchte ich das Ergebnis für jede Zeile in Byte [] konvertieren.

Dies funktioniert nicht:

byte[] b=null; 
obj.GetBytes(0,0,b,0,1024); 
+1

Was bedeutet "das eine funktioniert nicht"? Erhalten Sie eine Ausnahme, das falsche Ergebnis oder ein BSOD? –

+0

@TimSchmelter: Der API-Aufruf, den er zu verwenden versuchte, ist offensichtlich falsch. Ich kann nicht herausfinden, warum es überhaupt existiert, weil die andere notwendige API, um es zu benutzen (Länge des binären Blobs, um zu holen), gänzlich fehlt. – Joshua

Antwort

27

GetValue() Methode versuchen.

byte[] b=null; 
b=(byte [])obj.GetValue(0); 
//OR 
b=(byte [])obj[0]; 
+0

Danke !! Es funktionierte. – akshaykumar6

-2
string bytesfromsql = "01010101010110010111010001"; //for example 
byte[] bytes = new byte[bytesfromsql.Length]; 
for (int i = 0; i < bytes.Count(); i++) 
{ 
    bytes[i] = byte.Parse(bytesfromsql[i].ToString()); 
} 
+6

Die aus SQL zurückkommenden Bytes ** sind keine Zeichenfolge **. Außerdem: selbst wenn es war, müssten Sie 'Convert.ToByte (string, int)' verwenden, um das * radix * (ist es base-2? Base-10? Base-16?) Und in den meisten Fällen das Länge eines Strings ist nicht die Länge des dekodierten Bytes []; im Falle von Base-16 wäre es die halbe Länge der Eingabe-Zeichenfolge - zum Beispiel –

+0

danke Mann, Sie sind Programmopedia –

Verwandte Themen