【问题标题】:how to retrive the blob image如何检索 blob 图像
【发布时间】:2019-11-24 14:30:16
【问题描述】:

我已经编写了一个代码,但它无法正常工作。首先我尝试创建一个文件夹并将图像存储在那里,但由于我的数据库托管它会产生问题,所以我将图像存储为 blob。请帮助我在哪里我做错了。谢谢。

public void ItemList_with_images(string value)
{
  flowLayoutPanelItemList.Controls.Clear();
  //  string img_directory = Application.StartupPath + @"\ITEMIMAGE\";
  // string[] files = Directory.GetFiles(img_directory, "*.png *.jpg");
  try
  {
    conn.Open();

    string sql = 
      "select distinct Item.Item_id,Item.name,Item.image,Item.cost,Item.price, Category.Name as cat_name from  Item" +
      " INNER JOIN Category ON Item.Category_id=Category.Category_id" +
      " INNER JOIN Ingredients ON Item.Item_id=Ingredients.item_id" +
      " INNER JOIN Inventory ON Inventory.Inventory_id = Ingredients.invenotry_id" +
      " INNER JOIN inventory_detail ON inventory_detail.inventory_id = Inventory.Inventory_id" +
      " where(Item.name like '" + value + "%'  and inventory_detail.Quantity > 0 and inventory_detail.loc_id =" + UserInfo.Loc_id + ") " +
      "OR (Category.Name like '" + value + "%'  and inventory_detail.Quantity > 0 and inventory_detail.loc_id =" + UserInfo.Loc_id + ") ";

    dataexe.ExecuteSQL(sql, conn);
    DataTable dt = dataexe.GetDataTable(sql, conn);

    int currentImage = 0;

    for (int i = 0; i < dt.Rows.Count; i++)
    {
      DataRow dataReader = dt.Rows[i];

      Button b = new Button();
      //Image i = Image.FromFile(img_directory + dataReader["name"]);
      b.Tag = dataReader["Item_id"];
      b.Click += new EventHandler(b_Click);



      string details = dataReader["Item_id"] +
        "\n Name: " + dataReader["name"].ToString() +
        "\n Buy price: " + dataReader["cost"].ToString() +
        "\n Sell price: " + dataReader["price"].ToString();

      b.Name = details;


      ImageList il = new ImageList();
      il.ColorDepth = ColorDepth.Depth32Bit;
      il.TransparentColor = Color.Transparent;
      il.ImageSize = new Size(78, 80);
      // here i am getting error
      il.Images.Add(Image.FromStream(new MemoryStream((byte[]) dataReader["image"])));
      //  il.Images.Add(Image.FromFile(img_directory + dataReader["image"]));


      b.Image = il.Images[0];
      b.Margin = new Padding(3, 3, 3, 3);

      b.Size = new Size(208, 100);
      b.Text.PadRight(4);

      b.Text += dataReader["name"].ToString();

      b.Text += "\n Price: " + dataReader["price"];

      b.Font = new Font("Arial", 9, FontStyle.Bold, GraphicsUnit.Point);
      b.TextAlign = ContentAlignment.MiddleLeft;
      b.TextImageRelation = TextImageRelation.ImageBeforeText;
      flowLayoutPanelItemList.Controls.Add(b);
      currentImage++;

    }
  }
  catch (Exception ex)
  {

                MessageBox.Show("Error " + ex);
            }
            conn.Close();
        }

''''

images are not retriving correctly

【问题讨论】:

  • 你应该添加更多细节,怎么了?你试图解决什么?你想达到什么目标?
  • 您能否尝试拆分出现错误的行?即:var ms = new MemoryStream((byte[]) dataReader["image"])
  • @ShaiCohen 当我尝试添加图像时,它实际上没有给出错误,但图像没有正确检索。你可以看到附加的SS
  • 我意识到您是 SO 新手,这很好。为了不让社区浪费时间,请您发布完整代码。另外,请花时间格式化您的代码。谢谢!
  • 旁注:在投影中使用distinctimagevarbinary(max) 列是一个很大的危险信号。

标签: c# mysql blob


【解决方案1】:

我不确定您为什么使用ImageList,如果有原因请告诉我。话虽如此,这是一个非常简短(并且经过测试)的方法,它从文件加载图像并将其分配给按钮的 Image 属性。下面是第一种方法的改编,根据您的代码使用datareader此方法经过测试

    public void GetImage()
    {
        MemoryStream stream = new MemoryStream(File.ReadAllBytes(@"C:\Users\Shai Cohen\Pictures\banana.jpg"));
        Image image = Image.FromStream(stream);
        button1.Image = image;
    }

    public void GetImageFromDatareader()
    {
        MemoryStream stream = new MemoryStream((byte[]) dataReader["image"]));
        Image image = Image.FromStream(stream);
        button1.Image = image;
    }

【讨论】:

  • 我已将图像作为 blob 放置在表格中。我正在尝试使 POS 成为我使用 imageList 的原因
  • 什么是POS?此外,您正在为每张图片创建一个新的ImageList:这是您想要的吗?
  • POS(销售点)
猜你喜欢
  • 2022-10-04
  • 2012-04-28
  • 2019-10-03
  • 2014-11-12
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多