查字典论文网 >> 如何用VB存取SQL Server中的图像数据

如何用VB存取SQL Server中的图像数据

小编:

如何用VB存取SQL Server中的图像数据 如何用VB存取SQL Server中的图像数据 信息技术论文 更新:2006-4-8 阅读: 如何用VB存取SQL Server中的图像数据

如何用VB存取SQL Server中的图像数据

何益斌 高景昌 李小琳

摘要 本文介绍MIS SQL Server对图像数据的存储机制和存取方法。针对VB开发工具,介绍了一种通过ADO Field 对象的GetChunk 方法和AppendChunk 方法来存取MIS SQL Server中的图像数据的方法。

关键词 ADO Field对象 BLOB 对象 GetChunk和AppendChunk 方法 image数据类型 医院信息系统

MIS SQL Server

在一个完善的医院信息MIS中,图像数据的存取是必不可少的,比如X光片、CT像片的保存。一方面,这些图像数据在远程诊疗为准确诊断病情提供了重要的依据,另一方面,也为快速查阅病人资料提供了基本条件。图像数据的存取在其它应用系统如GIS中也有广泛的应用。

1、 SQL Server中图像数据的存储机制

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

2、 SQL Server中图像数据的存取

在MIS SQL Server中,当数据小于 8000 个字节时,可以用普通的SQL操纵语句(SELECT、INSERT、UPDATE、DELETE)来完成对字段的操纵,当数据大于8000个字节时,SQL提供了 WRITETEXT 、READTEXT和UPDATETEXT这三个函数来读取和修改数据。这三个函数的使用方法为:

(1) WRITETEXT {table.column text_ptr}[WITH LOG] {data}

table.column为表中的字段,text_ptr为一个16个字节的指针,data为要写的数据值。可

选参数WITH LOG表示是否要写入日志文件中。

例: DECLARE @ptrval binary

(1

6) --指针

SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001

(2) READTEXT {table.column text_ptr offset size} [HOLDLOCK]

table.column为表中的字段,text_ptr为一个16个字节的指针,offset 为偏移量,即从

第几个字节开始读数据,size为要读的字节数,HOLDLOCK 为在读数据中是否充许其他用户

修改该数据。

例:DECLARE @ptrval varbinary

(1

6)

SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001

(3) UPDATETEXT {table_name.dest_column_name dest_text_ptr}{NULL|insert_offset}

{ NULL | delete_length}[WITH LOG][ inserted_data| {table_name.src_column_name src_text_ptr}]

table_name.dest_column_name 为要修改的text, ntext, 或 image字段;

dest_text_ptr为指向其的指针;insert_offset为偏移量,对于text和image为从

第几开始字节开始写,对于ntext为从第几个字符(双字节)开始写;delete_length

为从insert_offset开始删除delete_length长度的字节(符),为0时不删除,为NULL时

为删除从insert_offset开始到结束的所有数据。要插入的数据为 inserted_data为,也可

是表table_name的src_column_name字段中指针 src_text_ptr所指数据。

例: DECLARE @ptrval binary

(1

6)

SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001

UPDATETEXT zy_ct.img_ct @ptrval 16 0x54345

可以看出,这三个函数的使用比较复杂,虽然可以通过生成存贮过程来调用执行,但有一个缺陷是在读取数据时,READTEXT函数读取的数据无法直接传递回前端应用程序。