【问题标题】:CS1061: Retrieve image from DB to PictureBox controlCS1061:从 DB 检索图像到 PictureBox 控件
【发布时间】:2017-11-14 20:45:14
【问题描述】:

我有包含 pictureBox 表单的 winform,我想使用 LINQ 从 DB 检索一个 img 到该控件。

这是编译时的错误,

CS1061:IQueryable 不包含 Image 的定义并且没有扩展方法 Image 接受 IQueryable 类型的第一个参数(您是否缺少 using 指令或程序集引用?)

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        // Get as single image from the database
        var q = from image in context.Products
                where image.Pro_ID == 1
                select image;
        // Convert the byte[] to an System.Drawing.Image
        img.Image = ByteArrayToImage(q.Image.ToArray());
    }

    private byte[] ImageToByteArray(System.Drawing.Image imageIn)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            return ms.ToArray();
        }
    }

【问题讨论】:

    标签: c# winforms linq


    【解决方案1】:

    您的问题是 ImageToByteArray 接受图像作为变量,但您使用了这个:

    ByteArrayToImage(q.Image.ToArray());
    

    使用这个函数和一个数组作为变量。

    从sql中得到q后(如果q是字节数组)

    var q = (from x in context.Products
                   where x.Pro_ID == 1
                   select x.Image).FirstOrDefault();
    
    
    Image image1 = byteArrayToImage((byte[])q);
    

    还有一个方法

    public Image byteArrayToImage(byte[] byteArrayIn)
    {
         using (var ms = new MemoryStream(byteArrayIn))
         {
            return Image.FromStream(ms);
         }
    }
    

    不要忘记使用名称空间 System.Drawing.Image

    【讨论】:

    • 你的意思是删除它?你必须编辑它。错误是什么? img 是什么?
    • 我以为你的意思是我应该删除数组。我该如何编辑它?在参数q.Image.ToArray()中,红线在image下方。
    • 感谢您的努力,但我遇到了问题。 “无法将类型 'System.linq.IQuerable<.....product> 转换为 'byte[]'”。
    • 字节数组保存的列名是什么?
    • 数据类型应该是 VARBINARY(MAX) 。我不认为 nvarchar(max) 有效。用我所说的更改创建另一个数据库,我会给你代码从 sql 获取数组。
    猜你喜欢
    • 2011-08-03
    • 2022-12-14
    • 1970-01-01
    • 2017-10-14
    • 2018-04-10
    • 2016-12-26
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多