夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> vs2022_vs2019_vs2017_vs2014_vs2012
如何使用ADO.NET Entity Framework从数据库中获
夜鹰教程网 来源:www.yyjcw.com 日期:2016-10-25 20:45:04
本文我们看一下如何使用ADO.NET Entity Framework构建数据访问层,实现将图片存到数据库中以及从数据库中获取图片。

网站中的图片可以保存到文件系统中,即专门的目录用于图片的存放,这样的存储配上数据库中保存的图片路径信息,相信很多网站是这么选择的。这样的搭配由于存储和管理信息是分开的,其优点就是对数据库的性能不会产生太大影响,但是也正是由于这种分开网站的目录结构轻易是不可以变的,另外图片数据的备份需要数据库和文件目录同步进行。另外一种存储和管理图片的方式是将图片存到数据库中,如果站点的图片数量不是太多,图片不是太大,这种方式是相当适合的。本文我们看一下如何使用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中静态设置),就可以正确显示需要的图片了。

复制链接 网友评论 收藏本文 关闭此页
上一条: ASP.NET错误处理:Runtime Error  下一条: ASP.NET教程:WaitHandle类
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
一个关于天气预报的WebService【C…
VS2010最大的新特点是并行编程的进…
TextBox控件:asp.net中如何为密码…
Web服务调用实例:实现天气预报的…
ASP.NET程序员面试试题(130道题)
ASP.NET教程:调用WebService的源码…
网站开发全程设计
据说这套.net面试题很多网络公司都…
考考你:C#常见题型及部分答案
原创:.net读取数据库sql2000
伪静态URL重写配置
配置web.config代码asp.net3.5个性…
使用线程池提高性能 Socket网络编…
ASP.NET(C#)GridView表头的增加…
如何找到正确的学习方向【.NET版】…
  最近更新
C#修改注册表demo
一个获取内容中的图片地址的方法
ASP.NET 4.0尚未在 Web 服务器上注…
四大作用域:application,session…
ConfigurationManager不存在的解决…
vs2012_vs2013_vs2015没有Web Dep…
vs2015禁用解决方案中单击打开文件…
微软为Visual Studio 2015新增安卓…
C#如何实现搜索引擎网络爬虫程序
C#中正则表达式的用法
用C#抓取需要登录的页面数据
VS2015新功能
VS2015安装图解教程
vs2015新功能介绍
vs2015安装图解

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3