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

ASP.NET数据库存取图片的方法

程序员文章站 2022-06-20 13:36:05
当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了。这篇文章我会向大家介绍:...

当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了。这篇文章我会向大家介绍:

如何通过fileupload控件将图片保存到数据库
如何通过button控件从数据库导出图片

具体步骤如下:

保存图片到数据库

第一步:首先在数据库创建一个名为“images”的表,代码如下:

create table images
( 
roll_no varchar(12) primary key,
name_file varchar(100),
extension varchar(100) , 
img varbinary(max) ,
img_date datetime 
) 

可以看到这个表存储了这些内容:图片的登记号、文件名、文件扩展名、二进制数据以及上传时间。

ASP.NET数据库存取图片的方法

第二步:然后打开visual studio,创建一个空网站,命名为”imagetobinary”。

第三步:再添加一个新页面,命名为“conversion.aspx”

ASP.NET数据库存取图片的方法

在这个页面我们拖进textbox , fileupload, button这三个控件。

界面如图:

ASP.NET数据库存取图片的方法

当然你也可以选择在conversion.apsx文件直接输入这串代码:

文件序号
<asp:textbox id="txtrollno" runat="server">
</asp:textbox>
<br />

选择文件
<asp:fileupload id="fileupload1" runat="server" />
<br />

<asp:button id="button1" runat="server"
text="上传" onclick="button1_click" />

第四步:控件添加后,双击button,进入conversion.apxs.cs文件,添加以下命名空间:

using system;
using system.data;
using system.data.sqlclient;
using system.io;
using system.web; 

然后在button1_click内编写代码,将图片转换为二进制流并通过sql语句保存到数据库中。

代码如下:

protected void button1_click(object sender, eventargs e)
{
 if (!fileupload1.hasfile) 
  {
  response.write("未选择文件");
  return;
  }


  else
  {
  //创建访问上传文件的对象,并获取上传的文件
  httppostedfile file = fileupload1.postedfile;

  //获取上传文件的文件名和扩展名
  string filename = path.getfilename(fileupload1.postedfile.filename); 
  string extension = path.getextension(filename); 
  
  //实例化一个byte数组,其长度等于上传文件的长度
  byte[] imagetype = new byte[file.contentlength];
  
  //将文件数据读取到byte数组中
  file.inputstream.read(imagetype, 0, file.contentlength); 

  //判断图片格式
  if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif") || (extension == ".bmp"))
  {
   //表里写入数据
   using (sqlconnection connection = new sqlconnection("data source=afod3-609221015;initial catalog=mydata;integrated security=true"))
   {

   connection.open();
   sqlcommand cmd = new sqlcommand();
   cmd.connection = connection;

   string commandtext = "insert into images values (@image, @rollno,@img,getdate())";

   cmd.commandtext = commandtext;
   cmd.commandtype = commandtype.text;

   cmd.parameters.add("@image", sqldbtype.varbinary);
   cmd.parameters["@image"].value = imagetype;

   cmd.parameters.add("@rollno", sqldbtype.varchar);
   cmd.parameters["@rollno"].value = txtrollno.text;

   cmd.parameters.add("@img", sqldbtype.varchar);
   cmd.parameters["@img"].value = txtrollno.text;


   cmd.executenonquery();
   cmd.dispose();
   connection.close();

   response.write("导入成功");
   }
  }
  else
  {
   response.write("导入失败"); return;
  }
  }

运行结果如图:

ASP.NET数据库存取图片的方法

这时我们就可以浏览文件夹添加需要存入的图片:

ASP.NET数据库存取图片的方法

文件成功导入

ASP.NET数据库存取图片的方法

如果选择了不符合条件的文件后,显示结果:

ASP.NET数据库存取图片的方法

返回数据库,可以看到图片已经成功添加到数据库中了:

ASP.NET数据库存取图片的方法

导出图片

现在我们看如何从数据库导出图片的,这里我会只使用button控件,简单概述一下。

第一步:在visual studio创建一个空网站,命名为“imagetobinary”。

第二步:再添加一个新页面,命名为"getimage.aspx"。在这个页面拖放一个button控件。

第三步: 双击button,进入”getimage.aspx.cs”,添加命名空间。

using system;
using system.configuration;
using system.data.sqlclient;
using system.io;

button1_click内编写代码:

protected void button1_click(object sender, eventargs e)
 {
 string sconn = configurationmanager.appsettings["connectionstring"];

 sqlconnection objconn = new sqlconnection(sconn);
 
 objconn.open();

 string sql = "select * from images";

 sqlcommand cmd = new sqlcommand(sql, objconn);
 
 sqldatareader dr = cmd.executereader();

 while (dr.read())

 {

  byte[] bytes = (byte[])dr["img"];

  filestream fs = new filestream(@"e:\images\" + dr["roll_no"] + ".jpg" , filemode.create, fileaccess.write);

  fs.write(bytes, 0, bytes.length);

  fs.flush();

  fs.close();

 }

 dr.close();

 objconn.close();
 
 response.write("成功导出"); 


 }

运行结果:

ASP.NET数据库存取图片的方法

点击“导出”:

ASP.NET数据库存取图片的方法

打开指定的文件夹,图片已经保存在里面了:

ASP.NET数据库存取图片的方法

最后,如果有需要,你还可以参考这篇文章:如何保存pdf、word和excel文件到数据库中

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。