[基于ASP.NET实现图片存储数据库及页面读取研究与应用] 怎么从页面读取数据库信息
摘要:对于Asp.net中存储签名图片,做了一个详细解决方案。完善了客服端碰到的在数据库存储一个签名图片所遇到的问题。 关键词:ASP.NET;数据库;存储图片;SQL Server
中图分类号:TP392文献标识码:A文章编号:16727800(2012)008014604
基金项目:四川省教育厅自然科学基金项目(12ZB040);四川省教育厅教育发展研究中心基金项目(CJF10019);川北医学院教改基金项目 (11-06-019)
作者简介:刘正龙(1976-),男,硕士,川北医学院计算机与数学教研室副教授,研究方向为计算机与数学教学和研究。
0引言
随着计算机网络与信息技术的迅速发展,Web已经成为各类信息系统开发的主流平台,许多信息网站在发布信息时均采用基于数据库的动态信息发布系统。基于ASP.NET技术进行图片的上传与下载,需要使用专门的ASP文件上传组件或ISAPI扩展程序,这限制了程序设计的灵活性。同时由于图片属于复杂类型数据,在SQL Server数据库中与声音、大型电子表格等共用一个image字段类型,而且图片本身也有不同的数据格式,如.Gif或.Jpg,无法用操作一般字段的方法进行存取。针对这一实际问题,本文介绍了基于ASP.NET实现Web图片存取的新方法,通过利用ASP.NET中的上传文件对HttpPostedFile、ADO.NET Stream对象及ADO、NET提供的经过优化的SQL Server对象集,使Web信息中的图片上传到服务器并存入后台数据库,以及从数据库读取图片并在网页上显示更为简捷高效。采用开发环境为ASP.NET+SQL2000数据库。
1图片的处理方式
对于图片的处理有两种方式:①图片数据以文件形式直接存储在硬盘,在数据库中保存该图片的记录附加信息(路径、文件名、注释); ②图片直接存储在数据库中。这两种方式各有利弊。图片文件存入数据库中便于管理与维护,而存入硬盘可能会因为不小心删除图片文件,而使得数据不一致,但图片放在数据库中不便于修改编辑, 同时会引起数据库读取数据时的I/O 消耗,而放在硬盘上则不会引起这个问题。所以对于小文件,建议放在数据库中便于管理,而对于大文件,不可放在数据库中,否则数据库表会大量产生数据文件的碎片。
图1ASP.NET系统结构模型
2图片存储方法
该系统使用ASP.NET 和SQL Server 数据库实现图片的存储。将图片存放到硬盘指定的目录下,将图片的相对存储路径和其它附属信息存储到数据库中。开发平台使用的语言为VB,数据库访问技术为ADO.NET,数据访问机制采用的是ADO.NET里的OleDb机制。
3数据库表设计
3.1存储图片ImageStore表数据库设计
create table StoreImage
{
id int not null identity(1,1) primary key,
markname varchar(100) not null,--图片备注名称
markContent image not null,--文件内容
markType varchar(100) not null,--保存文件类型 用于生成
markSize int not null,--图片长度 读取数据用
markLinkUrl varchar(1000) not null,--数据库路径
markDate datetime not null default( getdate())--上传时间
}
go
其中在表设计中添加了上传图片文件类型和文件大小(Byte字节大小),主要为了读取时对图片显示进行控制,存储图片内容采用Image类型,SQL2005数据容量为2G,对应C#中类型Byte (字节数组),其中在设计中参考使用SQL中Binary类型, 但是测试后发现Binary类型容量范围1~8 000字节,对于图片容量太小, markLinkUrl测试以图片路径方式存储并读取显示在页面的方式。
3.2后台数据库的配置
图片管理系统使用SQL Server 2000 数据库,代码如下:
Import System.Data.OleDb
Public Class conn
Inherits System.Web.UI.Page
/定义一个数据库连接
Public conn As OleDbConnection = New OleDbConnection("Provider=
SQLOLEDB;DataSouce=(local);Initial Catalog=pic;User=sa;Pwd=sa")
End Class
3.3图片存储到数据库并读取
图片存储:通过文件上传获取图片并转换成Byte\[\]字节数组,保存到数据库Image字段,页面设计如下代码:
<script language="javascript" type="text/javascript">
function checkClint()
{
var getmarkname=document.getElementById("markname");
var getfile=document.getElementById("FileUpload1");
if(getmarkname.value=="")
{
alert("请输入图片备注名称!");
getmarkname.focus();
return false;
