• 【转载】C#将图片以二进制流的方式存入数据库


    在C#开发应用程序的过程中,图片一般会存放在文件系统中,当然图片也可以二进制的方式存放到数据库中,不过一般不建议存放在数据库中,因为图片占用的空间还是挺大的,特殊情况下可以考虑将图片存在数据。此文将介绍如何将图片存放在Sqlserver数据库中,并从数据库中读取出图片信息。

    在将图片存储到数据库之前,需要先设计数据库表,建议使用sqlserver的数据类型Image类型存储数据,当然也有人使用二进制binary类型存储。

    一、将图片写入数据库中的方法

    在此方法中使用到FileStream类,该类在此的作用是将图片读取到文件流中。具体实现方法如下:

     public void WriteImgToDb()
    {
      SqlConnection conn=new SqlConnection("server=.;database=pubs;trusted_connection=Yes"); 
      conn.Open(); 
      SqlCommand scmd = null; 
      string Path = Application.StartupPath + "//Imgren"; //为获取文件的根目录 
      int j = 0; 
      FileStream fs=null; 
      for (int i = 1; i  <= 13; i++)  //利用循环添加一次添加图片 
      { 
          string sql = "insert into tb_Image values(@a,@b)"; //利用参数实现图片添加 
          scmd = new SqlCommand(sql, scon); 
      
          scmd.Parameters.Add("@a", SqlDbType.Int); 
          scmd.Parameters["@a"].Value = i;   //记住该方法,将值存入参数内 
      
          byte[] bt = new byte[10240];       //初始化图片大小 
          //创建图片写入流 
          fs = new FileStream(Path + "//" + i + ".bmp", FileMode.OpenOrCreate, FileAccess.Read); 
          fs.Read(bt, 0, bt.Length);  //读取图片的字节数 
          scmd.Parameters.Add("@b", SqlDbType.Image, (int)fs.Length); 
          scmd.Parameters["@b"].Value = bt; //将图片的字节数存入参数内 
          j = scmd.ExecuteNonQuery(); 
       } 
      if (j > 0) 
          MessageBox.Show("将图片写入数据库成功!!!", "友好提示"); 
      else 
          MessageBox.Show("将图片写入数据库失败!!!", "友好提示"); 
      fs.Close(); //关闭释放流资源 
    }

    二、将从数据库中读取图片到picturebox控件中(WinForm窗体控件)。

    此方法使用了MemoryStream类即内存流对象,同时使用了Image类,Image类是.NET Framework内部提供的图片相关类。从Sqlserver数据库中读取图片数据具体实现方法如下:

    public void ReadDbImage()
    {
      SqlConnection conn=new SqlConnection("server=.;database=pubs;trusted_connection=Yes"); 
         conn.Open(); 
         SqlCommand scmd = null; 
         string sql = "select I_image from tb_image where I_id=" +int.Parse(textBox1.Text.Trim()) + ""; 
         scmd = new SqlCommand(sql, scon); 
         SqlDataReader red = scmd.ExecuteReader(); 
         if (red.Read()) 
         { 
           //创建支持存储区的内存流 
            MemoryStream ms = new MemoryStream((byte[])red[0]); 
            Image img = Image.FromStream(ms, true); //该方法: FromStream()为验证图像的流 
            this.pictureBox1.Image = img; 
         } 
         red.Close(); //关闭资源 
    }

    扩展阅读:C#工具类:使用SharpZipLib进行压缩、解压文件微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    备注:原文转载自C#将图片以二进制流的方式存入数据库_IT技术小趣屋

    博主个人技术交流群:960640092,博主微信公众号如下:

  • 相关阅读:
    linux系统——机制与策略(三)
    linux系统——机制与策略(二)
    Linux系统——机制策略(一)
    RTSP会话基本流程
    linux编程学习
    编码风格——linux内核开发的coding style
    编程风格——整洁代码的4个提示
    编程风格——五种应该避免的代码注释
    十条不错的编程观点
    代码优化概要
  • 原文地址:https://www.cnblogs.com/xu-yi/p/10564320.html
Copyright © 2020-2023  润新知