2012-12-19 53 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 –