文章描述的是SQL Server存储图像数据,我们大家都知道SQL Server数据库中的图像数据的存储机制在MIS SQL Server 数据库中,对于小于8000个字节的图像数据,其可以用二进制型(binary、varbinary)来表示。但通常要保存的一些医学影像图片都会大于 8000个字节。
SQL Server提供了一种机制,能存储每行大到 2G的二进制对象(BLOB),这类对象可包括image、text和ntext三种数据类型。Image数据类型存储的是二进制数据,更大长度是 231-1 (2,147,483,647)个字节[2][3]。
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(16) --指针 SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 WRITETEXT zy_ct.img_ct @ptrval 0x024324142342134214213421421454353452341 (2) READTEXT {table.column text_ptr offset size} [HOLDLOCK] table.column
为表中的字段,text_ptr为一个16个字节的指针,offset 为偏移量,即从 第几个字节开始读数据,size为要读的字节数,HOLDLOCK 为在读数据中是否充许其他用户 修改该数据。
例:
DECLARE @ptrval varbinary(16) SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 READTEXT zy_ct.img_ct @ptrval 1 25 (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(16) SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 UPDATETEXT zy_ct.img_ct @ptrval 16 0x54345 可以看出,这三个函数的使用比较复杂,虽然可以通过生成存贮过程来调用执行SQL Server存储图像数据,但有一个缺陷是在读取数据时,READTEXT函数读取的数据无法直接传递回前端应用程序。
3、 VB 6.0中图像数据的存取 VB 6.0 的ADO Field 对象提供了GetChunk *** 和AppendChunk *** 来存取BLOB数据[1],这两个函数实质是通过API调用WRITETEXT 、READTEXT和UPDATETEXT这三个函数,简化了调用的 *** 。
(1)GetChunk 和AppendChunk *** 介绍 GetChunk *** 检索其部分或全部长二进制或字符数据[4]。GetChunk 调用返回的数据将赋给“变量”。假如 Size 大于剩余的数据,则 GetChunk 仅返回剩余的数据而无需用空白填充“变量”。假如字段为空,则 GetChunk *** 返回 Null。
每个后续的 GetChunk 调用将检索从前一次 GetChunk 调用停止处开始的数据。但是,假如从一个字段检索数据然后在当前记录中设置或读取另一个字段的值,ADO 将认为已从之一个字段中检索出数据。
假如在之一个字段上再次调用 GetChunk *** ,ADO 将把调用解释为新的 GetChunk 操作并从记录的起始处开始读取。Field 对象的之一个 AppendChunk 调用将数据写入字段,覆盖所有现有的数据,随后的 AppendChunk 调用则添加到现有数据。
由于系统资源总是有限的,假如一次读(存)取大量数据SQL Server存储图像数据,可能会引起服务器、客户机死机或是服务器的性能大大下降,因此使用这两个函数时,要将图像数据进行分段读写。
在某些电脑中,机器内部蜂鸣器与系统的声音输出方案是相关联的,这样一来会导致当系统输出声音时,即使电脑没有连接外部音响或耳机,也会通过内置蜂鸣器发出“嘟嘟哔哔”的声音。这个问题主要出现在Windows 7电脑中,假如你的电脑恰好遇到了这样的问题,可参考下面的方法来解决: 1、在桌面“计算机”图标上右...
Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...
打开IE浏览器的时候、聊QQ的时候、玩游戏的时候… … 这到底是谁惹的祸呢? 很多人都知道Windows 7桌面特效全部开启会使系统性能降低,那到底是哪个特效导致的这一情况呢? 解决办法: 右键计算机,高级系统设置-性能-设置-关闭”任务栏和开始菜单使用动画“和”最大化和最小化动态显示窗口“...
国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...
北京时间1月13日消息,根据计划,微软将于2015年1月13日正式结束对Windows 7SP1的“主流支持”,而这也标志着“扩展支持”阶段的开始,这个阶段将于2020年1月14日结束。 2013年10月份,微软终止销售独立的Windows 7系统安装包,并要求制造商于2014年10月份停止生...
故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态 Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...