欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

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

在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技术小趣屋