MSSQL中提供了一个功能,能够分块读取Blob字段中的数据,写了一个存储过程代码如下:
CREATE PROCEDURE PRO_GET_FILE_DATA
@PKG_ID INT,
@VER VARCHAR(50),
@START INT,
@COUNT INT
AS
BEGIN
--定义指针变量,必须为varbinary(16)
DECLARE @ptrval varbinary(16);
--定义指针指向
SELECT @ptrval = TEXTPTR(FILE_DATA)
FROM T_SYS_PKG_FILE
WHERE PKG_ID = @PKG_ID //获取某条记录的条件
AND FILE_VER = @VER;
--获取数据
IF @ptrval IS NOT NULL
READTEXT T_SYS_PKG_FILE.FILE_DATA @ptrval @START @COUNT;
END;
这个功能最大的好处就是:可以读取Blob字段中的任意一部分数据。我主要使用在客户端执行文件升级。
1、把客户端所有业务封装到dll中,由主程序调用时,载入dll及其业务模块;
2、当业务模块版本升级时,将dll导入到数据库的Blob中,客户端主程序在载入dll之前,先进行版本检查,如果有新版本,则下载业务模块dll;
3、为展示下载进度,分块取Blob字段中的内容,就用到了上述功能;
4、将业务尽可能封装到不同dll,这样其体积要小一些,只有在调用业务模块时再载入dll,可以有效避免大量客户端同时下载同一个dll带来的问题。
5、暂适用于MSSQL,Oracle的还没有想好。