当前位置: 移动技术网 > IT编程>开发语言>.net > 【转载】C#将图片以二进制流的方式存入数据库

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

2019年03月21日  | 移动技术网IT编程  | 我要评论

tokyo hot n0628,夏目友人帐漫画,大妗

在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(); //关闭资源 
}

 

扩展阅读:、。

备注:原文转载自。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网