2012-12-19 51 views
12

我有表varbinary(MAX)參數。執行查詢後,我將結果存儲在SqlDataReader中,因爲它有多個列作爲輸出。從SqlDataReader獲取字節[]?

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

現在我想將每行的結果轉換爲byte []。

這一個不工作:

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

什麼意思是 「這一個不工作」?你會得到一個異常,錯誤的結果或一個bsod? –

+0

@TimSchmelter:他試圖使用的API調用顯然是錯誤的。我找不出爲什麼它甚至存在,因爲使用它的其他必要的API(二進制blob的長度來獲取)完全丟失。 – Joshua

回答

27

嘗試GetValue()方法。

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

謝謝!有效。 – 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

從SQL **返回的字節不是字符串**。另外:即使是這樣,你將不得不使用Convert.ToByte(string,int)來指定* radix *(它是base-2?base-10?base-16?),並且在大多數情況下:字符串的長度不是解碼字節的長度[];在base-16的情況下,它將是輸入字符串長度的一半 - 例如 –

+0

謝謝你,你是programmopedia –