4.2 大对象的存取方法
1)利用MFC提供的CLongBinary类
VC存取大对象数据有众多方法,如OLE、ActiveX等,而VC的MFC提供的CLongBinary类可以方便地实现存取BLOB字段。使用CLongBinary类可以存取超过MAXINT数目的数据,最大为可以得到的内存容量。但数据完全保存在内存中,对超大量数据消耗太大。
2)利用ODBC的SQLGetData和SQLPutData函数
对于不能存储在单一缓冲区中的数据,在行中的其他数据已被获取之后,可以直接用SQLGetData分批从驱动程序检索这些数据。为了从一列检索长数据,应用程序首先调用SQLFetchScroll或SQLFetch移动一行,并且调用SQLGetData获取绑定列的数据。SQLPutData允许在应用程序语句执行时,把参数或字段送到驱动程序。该函数用来把字符或二进制数值送到字符、二进制或数据源指定类型的字段。它可以传递任何类型的数据,但对字符和二进制数据可传递部分数据、绑定缓冲区并让驱动器从缓冲区中检索数据。3)使用ADO存取BLOB数据
可以使用ADO中的AppendChunk函数来存取BLOB数据。AppendChunk包含在Field对象中,原型如下:HRESULT AppendChunk (const _variant_t & Data );从函数原型中可以看到关键的问题是需把二进制数据赋值给VARIANT类型的变量。对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:_variant_t GetChunk (long Length );给出数据的长度后GetChunk将返回包含数据的VARIANT类型变量,然后我们可以利用SafeArrayAccessData函数得到VARIANT变量中指向数据的char *类型的指针,以方便处理。4.3 数据转换过程中大对象处理方法
在数据转换中,首先取出源数据源的元数据,判断源数据源和目的数据源中是否存在字段为大对象的类型。对于源数据源中的每个大对象字段的数据,选择相应的大对象读取方法,把此大对象数据取出后保留在一个临时文件中,然后在目的数据库插入数据,遇到大对象字段时,选择相应的大对象存取方法,再从临时文件中依次读出数据插入到指定字段中。
1)利用MFC提供的CLongBinary类
VC存取大对象数据有众多方法,如OLE、ActiveX等,而VC的MFC提供的CLongBinary类可以方便地实现存取BLOB字段。使用CLongBinary类可以存取超过MAXINT数目的数据,最大为可以得到的内存容量。但数据完全保存在内存中,对超大量数据消耗太大。
2)利用ODBC的SQLGetData和SQLPutData函数
对于不能存储在单一缓冲区中的数据,在行中的其他数据已被获取之后,可以直接用SQLGetData分批从驱动程序检索这些数据。为了从一列检索长数据,应用程序首先调用SQLFetchScroll或SQLFetch移动一行,并且调用SQLGetData获取绑定列的数据。SQLPutData允许在应用程序语句执行时,把参数或字段送到驱动程序。该函数用来把字符或二进制数值送到字符、二进制或数据源指定类型的字段。它可以传递任何类型的数据,但对字符和二进制数据可传递部分数据、绑定缓冲区并让驱动器从缓冲区中检索数据。3)使用ADO存取BLOB数据
可以使用ADO中的AppendChunk函数来存取BLOB数据。AppendChunk包含在Field对象中,原型如下:HRESULT AppendChunk (const _variant_t & Data );从函数原型中可以看到关键的问题是需把二进制数据赋值给VARIANT类型的变量。对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:_variant_t GetChunk (long Length );给出数据的长度后GetChunk将返回包含数据的VARIANT类型变量,然后我们可以利用SafeArrayAccessData函数得到VARIANT变量中指向数据的char *类型的指针,以方便处理。4.3 数据转换过程中大对象处理方法
在数据转换中,首先取出源数据源的元数据,判断源数据源和目的数据源中是否存在字段为大对象的类型。对于源数据源中的每个大对象字段的数据,选择相应的大对象读取方法,把此大对象数据取出后保留在一个临时文件中,然后在目的数据库插入数据,遇到大对象字段时,选择相应的大对象存取方法,再从临时文件中依次读出数据插入到指定字段中。
解决方案 »
- 过程参数不能传递空格码???
- 初学者碰到的问题
- oracle如何能实现类似IIF函数在功能
- jsp 操作oracle BLOB !!! 有成功经验的请指教!
- 讨论一下在开发时应用存储过程提高效率的情况
- 我在ASP中用ODBC连接ORACLE,表中有CLOB类型,只要是SELECT CLOB型数据,就出现如下错误,高手请进
- 同样的程序在不同的操作系统下连接oracle速度的不同反应!
- oracle数据库文档生成
- 在win2000服务管理器中为什么启动不了OracleOraHome81ManagementServer???提示重叠的I/O操作??
- MySQL安装出线问题
- 已知一条纪录,怎么查找下一条纪录
- 大家好,帮忙!
ado里的getchunk()函数好像只能从开头一块一块地读,不能直接指定读中间一块吧?
从图像中割一小块的算法如果用在blob上,割出来的还是一块图像吗?
唉,迷惑ing...