【问题标题】:Get byte[] from the SqlDataReader?从 SqlDataReader 获取字节 []?
【发布时间】:2012-12-06 13:26:46
【问题描述】:

我有带有 varbinary(MAX) 参数的表。执行查询后,我会将结果存储在 SqlDataReader 中,因为它有多个列作为输出。

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

现在我想将每一行的结果转换成字节[]。

这个不工作: :

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

【问题讨论】:

  • “这个不工作”是什么意思?您是否收到异常、错误结果或蓝屏死机?
  • @TimSchmelter:他尝试使用的 API 调用显然是错误的。我无法弄清楚它为什么存在,因为使用它的其他必要 API(要获取的二进制 blob 的长度)完全丢失了。

标签: c# asp.net sql bytearray


【解决方案1】:

试试GetValue()方法。

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

【讨论】:

    【解决方案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());
    }
    

    【讨论】:

    • 从 SQL 返回的字节不是字符串。另外:即使是,您也必须使用 Convert.ToByte(string,int) 来指定 radix (是 base-2?base-10?base-16?),并且在大多数情况下:字符串不是解码字节[]的长度;在 base-16 的情况下,它将是输入字符串长度的一半 - 例如
    猜你喜欢
    • 2010-10-12
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多