【问题标题】:how to convert varbinary<> to byte array [closed]如何将 varbinary<> 转换为字节数组 [关闭]
【发布时间】:2014-05-14 17:43:43
【问题描述】:
public byte[] ReturndbImage()
    {
        Image_table table = new Image_table();
        var row = from s in db.Image_tables
                  where s.Id == 1
                  select s.imag;
        byte[] b = null ;
        int cou = row.Count();
        b = (byte[])(row).Single().ToArray(); 
        return b;
    }

您好,我正在使用 Microsoft Visual Studio 2013,我正在尝试使用 linq 获取存储在数据库中的图像。我无法获取图像。我的图像作为 varbinary 存储在数据库中。我无法转换回二进制 []。我在数据库中有记录它仍然给出空值。

【问题讨论】:

  • 您使用的是哪个 ORM?如果它是实体框架,那么通常情况下,IIRC,imag 属性应该已经是Byte[] 类型。此外,您有记录这一事实并不意味着您的记录不包含 imag 的空值。
  • row 中返回了什么?您的代码没有任何明显的跳出错误。
  • 我正在尝试从 database.in 行中获取 varbinary 列值,我正在尝试存储该 varbinary 数据。
  • @user3402966 不回答 cmets 是让您的问题以“不清楚您的要求”结束的最佳方式。

标签: c#


【解决方案1】:

您可能应该只以Image 而不是byte[] 的形式从您的数据库返回图像。

如果s.imag 的类型为VARBINARY,那么LINQ 会将其包含为System.Data.Linq.Binary,因此您可以使用MemoryStream 直接从该二进制文件创建图像。

尝试以下方法:

public Image ReturnDbImage()
{
    var dbBinary = (from s in db.Image_tables
               where s.Id ==1
               select s.imag).FirstOrDefault();
    if (dbBinary == null)
    {
        //Handle the issue
    }
    else
    {
        using (var ms = new MemoryStream(dbBinary.ToArray()))
        {
            Image img = Image.FromStream(ms);
            return img;
        }
    }
}

我已从方法中删除了不必要的变量 coutable,因为您没有在任何地方使用它们。

【讨论】:

  • 为旧时代的缘故点几票。慢慢来,这样他们就不会被逆转。
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2023-04-02
  • 2017-03-13
相关资源
最近更新 更多