admin 管理员组

文章数量: 1086019


2024年5月5日发(作者:select count ( ) from)

SQL SERVER中进行图像存取的实现方法

在数据库应用项目开发中,经常会使用一些二进制的图像数据,存储和读取

显示图像数据主要采用的是路径链接法和内存流法。路径链接法是将图像文件保存

在固定的路径下,数据库中只存储图像文件的路径和名称,此方法数据库容量小,

存取速度快,但安全性较差;内存流法是将二进制数据直接存储在数据库中,此方

法对数据的共享非常方便,安全性相对较高,常用于图像容量不是很大的时候。

本文主要讨论通过SQL Server 2008使用内存流法如何实现二进制图像数据

的存储。

1 VARBINARY(MAX)数据类型简介

在SQL Server 2000和更早的版本中,如果每条记录的数据量远远超过了一

个单独记录的8K,我们常用IMAGE数据类型以二进制存储该数据,在使用IMAGE

数据类型时,数据是不和普通数据存储在一起的。一个被称作指针的很小的二进制

值,和普通数据存储在一起,这个二进制值指向数据文件里的数据实际存储的位

置。对IMAGE数据进行读取、插入数据时需要使用READTEXT[1]及WRITETEXT命

令,这两个命令需使用TEXTPTR函数来获得正确的二进制指针,这个二进制指针用

于定位物理文件中的数据,使用起来较麻烦。

虽然在SQL Server 2008中依然提供IMAGE数据类型,但微软计划在未来的

SQL Server版本中删除IMAGE数据类型, 用VARBINARY(MAX)数据类型来代替,在

该版本下不应当使用IMAGE这种类型。

VARBINARY(MAX) 为可变长度二进制数据,不限最大长度,常用于数据超出

8,000 字节时,可以直接使用insert命令添加数据,使用起来较简单。

2 使用T-SQL语句将图像文件直接读入VARBINARY(MAX)字段

首先在SQL Server 2008的查询窗口中创建测试数据库ImageDB,并建立

ImageTable表来存储图像数据:

CREATE DATABASE ImageTest

GO

USE ImageTest;

GO

CREATE TABLE ImageTable

(

ImageData varBinary(MAX)

);

然后使用insert命令将其插入到ImageTest表中(此处图像文件为

C:),OPENROWSET函数包含访问OLE DB数据源中的远程数据所需的全部

连接信息,内置的 BULK 访问接口支持大容量操作,实现的代码为:

INSERT INTO ImageTable (ImageData)

SELECT *

FROM OPENROWSET(BULK N'C:', SINGLE_BLOB) AS Photo

GO


本文标签: 数据 使用 二进制 数据库 图像