基于ADONET的BLOB数据存取方法研究Word文档格式.docx

上传人:b****2 文档编号:1400140 上传时间:2023-04-30 格式:DOCX 页数:8 大小:19.92KB
下载 相关 举报
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第1页
第1页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第2页
第2页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第3页
第3页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第4页
第4页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第5页
第5页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第6页
第6页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第7页
第7页 / 共8页
基于ADONET的BLOB数据存取方法研究Word文档格式.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于ADONET的BLOB数据存取方法研究Word文档格式.docx

《基于ADONET的BLOB数据存取方法研究Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于ADONET的BLOB数据存取方法研究Word文档格式.docx(8页珍藏版)》请在冰点文库上搜索。

基于ADONET的BLOB数据存取方法研究Word文档格式.docx

杨平利(1964-),男,博士,西北核技术研究所高级工程师,研究方向为软件工程与虚拟仿真;

齐芳丽(1974-),女,硕士,西北核技术研究所工程师,研究方向为计算机网络及应用;

袁媛(1979-),女,西北核技术研究所工程师,研究方向为计算机可视化与虚拟仿真。

0引言

  随着计算机多媒体技术和网络技术的广泛应用,数据库管理系统中的数据处理对象也发生了变化[1]。

由原来单机环境下对数字、字符等数据的处理转变成网络环境下对数字、字符、文本、声音、图像、视频等数据的处理,而文本、声音、图像、视频等数据一般都是以文件的形式存在,这些文件具有特定的格式和数据存储方式(如微软Office系列软件产生的文件等),在数据库管理系统内,这类数据属于BLOB(BinaryLargeObject)数据类型,即二进制大对象数据。

如何实现二进制大对象数据在SQLServer数据库中的存取,这是开发人员需要研究和解决的问题。

  BLOB是一种用于存储无边界数据的数据类型。

这些数据的共同特点是规模较大,内部顺序性不可分割,因此它们的存取一般采用整块移动的方式。

一般说来,这类数据的大小可以从KB到MB,变化范围很大,数据库管理系统不能像处理常规数据类型那样预留存储空间,因此大数据的存储变得比较复杂。

  本文在第一部分介绍ADO.NET数据访问技术的特点、组件及访问模式;

第二部分重点阐述使用ADO.NET存取SQLServer2005中BLOB数据的方法,并编写代码实现了存取功能。

BLOB数据的类型包括图片(*.jpg、*.bmp等格式)和文档(*.doc、*.pdf等格式)。

  1ADO.NET简介

  ADO.NET是.NETFramework提供给.NET开发人员的一组类,它以XML为基础,提供一致的方法来访问各种数据源和数据访问服务,包括MicrosoftSQLServer数据库、ODBC、OLEDB数据源、Oracle数据源以及XML等[2]。

  1.1ADO.NET体系结构

  ADO.NET是一种全新的、强大的数据库访问技术[3]。

它可将系统前端的用户界面和后台数据库联系起来,应用程序可以通过ADO.NET来连接各种数据源,检索、插入、修改和删除数据源中的数据以及以快速、只读、只进的方式访问数据[4]。

用户和系统之间典型的交互过程如图1所示。

  与传统的Web数据库访问方法比较,ADO.NET数据访问技术具有两个突出的优点:

一是紧密集成XML作为数据传输标准,使得ADO.NET能够更加灵活地访问各种不同类型的数据;

二是采用中断式访问模式,应用程序只是在需要访问或者进行数据更新时才会连接到数据库,一旦完成就立即断开。

  为了实现上述任务,ADO.NET提供两个核心组件:

.NETFramework数据提供程序和DataSet[5]。

ADO.NET的体系结构如图2所示。

.NETFramework数据提供程序用于连接数据源、执行SQL命令以及检索数据,检索到的数据既可以直接处理,也可以放入DataSet对象中。

.NETFramework数据提供程序通过在DataAdapter对象和DataSet之间建立联系,使DataSet对象可以获取来自多个数据源的数据。

.NETFramework数据提供程序包括Connection对象、Command对象、DataReader对象和DataAdapter对象。

数据集DataSet是一种与数据源无关的内存数据表示方法,用于高速缓存关系型数据。

它像一个简化的关系数据库,可以包含数据表、数据列和数据行以及表与表之间的关系,并且完全是在脱机模式下进行操作。

  图1ADO.NET的数据访问过程

  图2ADO.NET的体系结构

  1.2ADO.NET访问数据库模式

  对于不同的应用需求,ADO.NET提供了两种模式来访问数据源中的数据:

使用DataReader对象进行基于连接的访问和使用DataAdapter对象进行非连接的访问[6]。

  1.2.1基于连接的访问模式

  基于连接的访问模式会占用数据库连接,然后读取数据。

它是通过DataReader对象来实现的,DataReader对象在已经建立的数据连接基础上,提供对数据源的单向、只读的数据流。

由于DataReader可以顺序处理从数据源返回的结果,而且不在内存中缓存,因此DataReader适合从数据源中检索大量的、不需要进行更新操作的数据。

  1.2.2基于非连接的访问模式

  基于非连接的访问模式是以Dataset为中心的数据访问模式。

Dataset中的数据是与数据库断开连接的[7]。

一旦将结果存储在Dataset之后,Dataset和数据库之间便不再有连接。

对Dataset内容所作的修改不会直接影响到数据库。

它的优点在于处理非连接数据时不需要始终与数据库连接。

  2使用ADO.NET存取BLOB数据

  2.1方法分析

  SQLServer提供标准数据类型binary和varbinary等,用于处理二进制数据。

这些数据类型可用于小于8000个字节的小型不规则数据。

从SQLServer2005开始,“varbinary(max)”也包含在二进制数据类型当中,其关键词max表示大小不限。

如果SQLServer的版本是2005以前的,而数据长度又超过8000字节,就可以使用图像数据类型(image)进行存储。

这种数据类型的文件大小可变,最大可存储2GB的文件。

虽然图像数据类型也包含在SQLServer2005和2008中,但微软后续版本的SQLServer将不支持此功能,因此在今后的程序开发中不建议使用该数据类型。

综上所述,二进制数据类型可概述如下:

①binary:

文件大小固定,最大长度可达8000字节;

②varbinary(n):

文件大小可变,最大长度可达8000字节,(n指明最大文件长度);

③varbinary(max):

文件大小可变,max指示最大存储大小为231-1字节。

  本文中的BLOB数据采用varbinary类型。

  使用ADO.NET存取SQLServer2005中BLOB数据,从技术实现上而言,可以采用以下两种方法:

  

(1)文件名标记和索引法。

把BLOB数据保存在硬盘的某个特定目录下,并用SQLServer2005数据库的一个字符串字段存储该文件的文件名。

其基本思路是:

通过ADO.NET在SQLServer2005数据库中存取文件名,然后将文件名与硬盘中的BLOB文件一一对应。

优点是容易实现,无需复杂编码;

缺点是灵活性与安全性稍差,一旦所链接的数据文件被移动到其它目录,而数据库对它的引用不会自动更新,这时就出现了数据库和文件不同步的可能。

  

(1)语言法。

BLOB数据以二进制方式存储在SQLServer2005数据库的varbinary类型字段中,通过VisualC#编码实现转换,其基本思想是:

利用ADO.NET从数据库的varbinary字段获取数据,然后编码将二进制数据转化为文件。

其优点是数据以二进制形式直接存储在数据库的varbinary字段,灵活性较好,可以利用数据库来进行一定的权限控制,保证数据的安全性、完整性和一致性,以达到更好地管理数据的目的;

其缺点是编码较复杂。

  2.2具体应用

  BLOB不像一般的数据类型,不能直接写入数据库,较为常用的方法是使用文件流、内存流来存取,下面从图像数据和大型文本文件两个典型的应用来介绍BLOB数据的存取方法。

  2.2.1图像数据

  程序的后台数据库管理系统选用SQLServer2005。

数据库名为:

EISVN,图像数据保存在Para表中的Picture字段中,字段的类型为“varbinary”。

  图像数据的存储过程:

①利用FileStream以流的方式打开图片文件;

②用BinaryReader将流做处理,转换为二进制数据存放到二进制数组(byte[])中;

③使用SQLServer中的insert语句将图片存储到指定的表中。

关键代码如下:

  SqlConnectionsqlConn=newSqlConnection("

DataSource=abc\\SQLSERVER2005;

initialcatalog=EISVN;

integratedsecurity=SSPI"

);

  //DataSource="

abc\\SQLSERVER2005"

为连接的数据源名称,"

initialcatalog=EISVN"

为连接的数据库名称,"

integratedsecurity=SSPI"

表示使用Windows集成安全身份认证。

  sqlConn.Open();

  byte[]imagebytes=null;

  //记录图片的路径

  stringfullpath=fileLocation+fileName;

  //将图片以文件流的形式进行保存

  FileStreamfs=newFileStream(fullpath,FileMode.Open);

  BinaryReaderbr=newBinaryReader(fs);

  imageSize=Int32.Parse(fs.Length.ToString());

  //将流读入到字节数组中

  imagebytes=br.ReadBytes(imageSize);

  //设置SQL语句

  stringcmd="

insertintoPara(Picture)values(@Picture)"

  SqlCommandSqlcmd=newSqlCommand(cmd,SqlConn);

  sqlComm.Parameters.Add(newSqlParameter("

@Picture"

,SqlDbType.VarBinary));

  sqlComm.Parameters["

].Value=imagebytes;

  Sqlcmd.ExecuteNonQuery();

  sqlConn.Close();

  执行完上述代码后,图像数据在数据库中实现了二进制形式的存储。

如图3所示。

  图3图像数据的二进制形式存储

  图像数据的显示过程:

①使用Select语句对存储在数据库表的图片进行查询;

②使用MemoryStream将二进制数据转换为流的形式;

③使用Bitmap对流进行处理,从而得到位图文件,将存储在Picture字段中的数据正确地显示。

  SqlConnectionsqlConn=newSqlConnection("

DataSource=abcSQLSERVER2005;

  Stringselect=@"

selectPicturefromPara"

  SqlCommandsqlComm=newSqlCommand(select,sqlConn);

  //将二进制数据转化为流

  byte[]pic=(byte[])sqlComm.ExecuteScalar();

  MemoryStreamms=newMemoryStream(pic,true);

  //将流转化为位图文件

  Bitmapbmp=newBitmap(ms);

  pictureBoxBefore.Image=bmp;

  ms.Close();

  2.2.2大型文本文件存取

  如果系统中要处理的技术资料是大型文本文件,处理方法仍可选择varbinary类型,存储过程与图像数据的存储过程相同,但读取过程有所差别。

  数据库名为:

EISVN,文本文件保存在document表的content字段中,字段的类型为“varbinary”。

  SqlDataReaderdr=null;

  SqlCommandcm=newSqlCommand();

  cm.CommandType=CommandType.Text;

  cm.CommandText=@"

selectcontentfromdocument"

  dr=cm.ExecuteReader();

  byte[]File=null;

  if(dr.Read())

  {

  File=(byte[])dr[0];

  }

  FileInfofi=newSystem.IO.FileInfo(Path);

  fs=fi.OpenWrite();

  fs.Write(File,0,File.Length);

  fs.Close();

  dr.Close();

  3结语

  本文讨论了使用ADO.NET技术实现对SQLServer2005中BLOB数据的存取方法,文中的代码基于VisualC#语言编写,均在VisualStudio2005编译环境中调试运行。

结果表明:

该方法对信息系统中的BLOB数据存取切实可行,实用价值较高。

  参考文献参考文献:

  \[1\]萨师煊,王珊.数据库系统概论[M].北京:

高等教育出版社,2002:

912.

  [2]申朝阳,宋颜浩.ASP.NET与数据库技术高级指南[M].北京:

中国水利水电出版社,2005:

116119.

  [3]张奇,李律松,卫建伟.VisualC#数据库项目案例导航[M].北京:

清华大学出版社,2005:

23.

  [4]路红武.基于.NET企业信息资源管理系统的设计与实现[J].计算机与现代化,2005,118(6):

21.

  [5]李律松,陈少刚,沈刚.VisualC#数据库高级教程[M].北京:

65.

  [6]周晓娟.基于ADO.NET的数据库访问技术研究[J].现代商贸工业,2009(24):

293.

  [7]DAVIDSCEPPA.ADO.NET2.0技术内幕[M].北京:

清华大学出版社,2007:

188.

  (责任编辑:

杜能钢)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2