欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏数据库 → 正文
SQL Server存储图像数据的策略与方法
08-02-15 09:17:24 作者: 出处:

目前对于图像数据的管理大都采用表 +实体的方法,即图像数据以文件形式存放于指定的计算机目录下,在数据库表中只反映图像数据文件的存储路径。这种管理模式,给数据的维护增加了难度,同时,也给数据的安全带来一定的隐患。因此,要真正做到各类数据在数据库中安全管理,研究和探索直接将图像数据存储在数据库关系表中的方法是非常必要的。

笔者在 Visual Basic 6.0开发环境中,采用客户机/服务器的工作方式,针对 SQL Server数据库关系表中存储图像数据的问题进行了初步探讨,提出了一套基本解决方案,供读者参考

一、 存储图像数据的策略

图像数据库技术一直致力于解决海量数字图像的有效存储和管理问题。它是数据库技术的继承和发展,一方面,图像数据和文本数据存在着本质的区别,在文本数据领域得以成功应用的传统数据库技术,如果一成不变的照搬到图像数据库领域,结果往往是低效,甚至无效;另一方面,传统数据库的许多成果,如 SQL语言、索引技术等都值得图像数据库借鉴。上述两个方面的结合成为目前图像数据库技术发展的主流。

1.1 BLOB 数据类型

BLOB 是非常巨大的不定的二进制或者字符型数据,通常是文档( .txt.doc)和图片( .jpeg.gif.bmp),它可以存储在数据库中。在 SQL Server中, BLOB可以是 textntext或者 image数据类型。 Image数据类型存储的是长度不确定的二进制数据,最大长度是 2GB

BLOB 数据在 SQL Server系统中的存储方式不同于普通的数据类型,对于普通类型的数据系统直接在用户定义的字段上存储数据值,而对于 BLOB类型数据,系统开辟新的存储页面来存放这些数据,表中 BLOB类型数据字段存放的仅是一个 16个字节的指针,该指针指向存放该条记录的 BLOB数据的页面。

1.2 BLOB 的设计策略

BLOB 数据是数据量很大的数据类型,它会占用大量的硬盘空间、内存和网络资源,因此合理地设计包含有 BLOB数据类型的属性表,对提高存储效率、查询速度有很大的影响。一般 BLOB的设计原则如下:

1) 使用 BLOB数据类型还是使用 varchar或者 varbinary数据类型

二进制大对象并不一定要存储为 textntext或者 image数据类型,它们也可以作为 varchar或者 varbinary数据类型村处在表格中。数据类型的选择要根据将要存储的 BLOB的实际大小。如果数据不会超过 8K,那么就使用 Varchar或者 varbinary数据类型。如果这些大对象的尺寸超过 8K,那么就使用 textntext或者 image数据类型。

2) 存储 BLOB在数据库中或者在文件系统中

常见的设计问题是将图片存在数据库中还是存在文件系统中。在大多数情况下,最好把图片文件与其它数据一起存在数据库中。因为将影像数据文件存储在数据库中有许多优点:

易于管理 BLOB与其他数据一起存储在数据库中时, BLOB和表格是数据一起备份和恢复。这样就降低了表格数据与 BLOB数据不同步的机会,而且降低了其他用户无意中删除了文件系统中 BLOB数据位置的路径和风险。另外,将数据存储在数据库中 BLOB和其他数据的插入、更新和删除都在同一个事务中实现。这样就确保了数据的一致性和文件与数据库之间的一致性。还有一点好处是不需要为文件系统中的文件单独设置安全性。  

可伸缩性 尽管文件系统被设计为能够处理大量不同大小的对象,但是文件系统不能对大量小文件进行优化。在这种情况下,数据库系统可以进行优化。  

可用性 数据库具有比文件系统更多的可用性。数据库复制允许在分布式环境中复制、分配和潜在的修改数据。在主系统失效的情况下,日志转移提供了保留数据库备用副本的方法。  

当然,在某些情况下,将图片存储在文件系统中将是更好的选择:  

1)使用图片的应用程序需要数据流性能,例如实时的视频重现。  

2)象 Microsoft PhotoDraw或者 Adobe Photoshop这样的应用程序经常访问 BLOB,这些应用程序只知道怎样访问文件。  

3)需要使用一些 NTFS文件系统中的特殊功能,例如远程存储。  

二、 存储图像数据的方法  

1 建立具有 image宇段的 SQL Server数据库  

当需要在 SQL Server数据库中存储图像数据时,首先应建立包含 image数据类型字段的数据库关系表。 SQL Server数据库平台支持的数据类型中, image数据类型主要用于存储图像数据等大段的二进制数据。 SQL Server 7.0之后的版本, image类型可存储 2GB的数据。  

2 使用 Remote Data控件建立与数据库的连接  

Remote Data 控件是在 Visual Basic应用程序中用来获取远程数据的控件。它在.远程数据对象 (RDO)和数据绑定控件之间提供了接口,只要给它提供有关数据存储的位置、获取的数据和一些接口控制,就可以连接到数据库,实现对数据库的基本操作。  

使用 Remote Data控件建立与远程数据库的连接步骤如下:  

1 .在 Visual Basic的窗体中加入一个 Remote Data控件。,  

2 .在 Remote Data控件 DataSourceName属性的下拉列表中选择一个 ODBC数据源。例如 pubs  

3 .在 Remote Data控件的 SQL属性中输入 SQL查询语句。例如, Select * from pub_info  

2.3 绑定 OLERemote Data控件实现图像数据的存储与编辑  

OLE 是允许应用程序相互之间交换和显示数据的一项技术,使用 OLE,可以从支持 OLE技术的任何应用程序中读取信息,也可以在任何支持 OLE的程序中显示和编辑它。在 Visual Basic中,可利用 OLE容器控件与 Remote Data控件的绑定,来实现显示、存储和编辑 SQL Serve数据库中的 image类型数据。  

1. 显示 SQL Serve数据库 image类型字段的图像数据  

具体步骤如下:  

(1) 在加入了 Remote Data控件的 Visual Basic的窗体中,添加一个 OLE容器控件。创建 OLE容器控件时,会出现 插入对象 :对话框,此时点击 取消 按钮,不必为该容器指定对象。  

(2) OLE容器控件的 DataSource属性设置为 Remote Data控件的名字,实现控件的绑定。  

(3) OLE容器控件。 DataField属性的下拉列表中选择要显示的字段名。例如, logo  

(4) 运行应用程序。对于包含 image数据类型的 logo字段的数据将在 OLE容器控件中显示一幅图像。  

2. SQL Sever数据库 image类型字段中添加存储图像数据  

具体步骤如下:  

(1) Remote Data控件的 EOFAction属性设置为 rdAddNew,实现数据库的数据添加功能。  

(2) Visual Baisic的窗体中添加一个 CommandButton控件,并编写图像文件嵌入 OLE容器控件的程序代码。例如:  

Private Sub Command_Click()  

OLEl.CreateEmbed“c :\图片. bmp”  

End Sub  

 (3) 运行应用程序,点击 Remote Data控件的记录指示按钮,移动到新的记录,然后点击 CommandButton控件按钮,实现图像数据的添加入库操作。  

3. 编辑 SQL Serve数据库 image数据类型字段的图像数据  

具体步骤如下:  

(1) Visual Basic的窗体中添加一个 CommandButton控件,编写对 OLE对象的编辑程序代码。例如:  

Private Sub Command2--_Click()  

OLEl.DoVerb VbOLEOpen  

End Sub  

 (2) 运行应用程序,点击 Remote Data控件的记录指示按钮,选择需要编辑的图像,然后点击 CommandButton控件按钮,在分隔的应用程序窗口打开对象,进行图像的编辑操作。  

4 、图像文件自动入库方式的实现  

在数据库的实际应用中,经常需要将图像文件批量存储,以提高数据入库操作的自动化程度。对于图像文件批量存储,在程序代码的编写中,可充分利用 OLE容器控件与 RemoteData控件的诸多属性和方法,加以实现。  

具体步骤如下:  

(1) OLERemoteData控件的 Visible属性设置成 False,使 OLERemoteData控件不可视。  

(2) 建立图像文件的批处理文件。  

(3) 编写以下基本代码,实现批处理功能。  

Private Sub Command3_Click()  

Dim FileName As String  

Open "c: tesffiletxt"ForlnputAs#1'打开批处理文件。  

DoWhileNotEOF(1)' 循环至文件尾。  

Input#l FileName'读入图像文件名。  

MSRDCl.Resultset.AddNew‘ 结果集添加记录  

OLEl.CreateEmbedFileName‘ 嵌入图像文件  

MSRDCl.Resultset.Update  

Loop  

Close #1  

End Sub  

(4) 运行应用程序。点击 CommandButton控件按钮,完成图像文件的自动入库。  

五、结束语  

随着 SQL Serve数据库管理系统功能的不断增强、性能的不断完善,将各类数据完全由数据库管理系统统一存储和管理,已成为技术发展的趋势。只有这样, SQL Serve数据库管理系统的强大功能才能得到充分发挥,数据的安全性才能得到充分的保障,使得诸如数据库复制、数据的转移等许多工作,变得非常简单容易。  

 


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    “嫦娥一号”第一幅月面图像局部三维景观图亮相
    用VB写高效的图像处理程序
    用Python进行图像处理
    遥感数字图像处理——遥感的基本原理
    用ogr和PIL把矢量数据转化成栅格图像
    JPanel加载图像的过程

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号