当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ADO.NET Entity Framework存取数据库中图片

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET 中的 ADO.NET Entity Framework存取数据库中图片


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 74 ::
收藏到网摘: n/a

网站中的图片可以保存到文件系统中,即专门的目录用于图片的存放,这样的存储配上数据库中保存的图片路径信息,相信很多网站是这么选择的。这样的搭配由于存储和管理信息是分开的,其优点就是对数据库的性能不会产生太大影响,但是也正是由于这种分开网站的目录结构轻易是不可以变的,另外图片数据的备份需要数据库和文件目录同步进行。另外一种存储和管理图片的方式是将图片存到数据库中,如果站点的图片数量不是太多,图片不是太大,这种方式是相当适合的。本文我们看一下如何使用ADO.NET Entity Framework构建数据访问层,实现将图片存到数据库中以及从数据库中获取图片。

前期工作:创建数据表+构建数据访问层

第一步,创建数据表。

表中需要一个用于保存图片的字段,类型设置为image,代码如下:

CREATE TABLE [dbo].[images](

[id] [int] IDENTITY(1,1) NOT NULL,

[imagefile] [image] NOT NULL)

第二步,构建数据访问层。该类型的数据的插入与一般的基本SQL类型不同,不过在.net 3.5平台上工作的程序员不需要考虑太多访问数据库的具体代码,我们可以选择ADO.NET Entity Framework和Linq to SQL,这里我们以前者为例。方法简单介绍如下:

项目中新建,选择ADO.NET Entity Data Model,根据向导建立到数据库的连接,根据向导选择数据库中的刚才建立的表images,向导结束之后项目中会添加一个edmx类型的文件,默认的界面中会打开自动生成的实体类图,我们在向导中选择的所有表格都会对应一个实体类默认的名称是与数据表相同,此处的images对应的实体类也是images,但是这样默认使用的话会造成歧义,我们需要手动修改一下,点击images类在属性对话框中将Name属性改为image,Entity Set Name可以改为imageSet或者不改动保持images表示的是image集合,之后实体类图中对应的类名也变成image了。这里假设存放图片的数据库名为XXX,那么生成的管理类也就是我们后面使用最多的类名为XXXEntities。

将图片保存到SQL server数据库中

首先声明一个image类型的变量不妨称之为img, image img = new image();,继而创建一个XXXEntities对象, XXXEntities XXX = new XXXEntities();

(注意using命名空间和添加对System.Data.Entity的引用)

asp.net web页面中添加FileUpload控件,该控件提供一个属性PostedFile能够为服务器提供一个输入输出流,刚好可以供我们将选择的图片读到服务器的内存里,代码如下:

System.IO.Stream stream = FileUpload1.PostedFile.InputStream;

byte[] buffer = new byte[stream.Length];

stream.Read(buffer, 0, (int)stream.Length);

stream.Close();

img.imagefile = buffer;

接下来就是将代表图片的字节数组存到数据库中,代码如下:

XXX.AddToimageSet(t);

XXX.SaveChanges();

这样将图片存入数据库的操作就完成了。

从数据库中获取图片并显示到asp.net页面

asp.net页面showImage.aspx中放入一个Image控件,命名为Image1,由于图片是从数据库取来的二进制文件,因而不像使用文件系统时图片都有自己的URL,我们可以直接设置其URL为图片在网站中的路径,解决方法如下:新建另外一个专门用于提供图片的asp.net页面getImage.aspx,其功能仅仅是从数据库中读取图片,

使用Response.BinaryWrite()的方式将图片数据流输出,接下来您可能已经想到了,我们将image1的URL设置为上述getImage.aspx,如果需要根据图片的id之类的信息进行选择,我们为该asp.net页面提供一个额外的id参数即可。

读取图片,依然使用上述的XXX实体管理类,比如获取id为1的图片,代码为:

int id = int.Parse(Request.QueryString["id"]);

image img = XXX.imageSet.Where(i=> i.ID == id).First();

Response.BinaryWrite(img.imageFile);

showImage.aspx中为Image1控件设置URL为"getImage.aspx?id=1"(可以在cs代码中编程设置,也可以在aspx中静态设置),就可以正确显示需要的图片了。