欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

c++ mysql 存储图片路径_3.用ADO实现图片在数据库中存储

发布时间:2024/8/5 数据库 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c++ mysql 存储图片路径_3.用ADO实现图片在数据库中存储 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

在网上看到了不少介绍

VB

如何在

SQL SERVER

中存取图片数据的文章。

经自己实现后,最终把心得拿出来和大家分享。

GOOGLE

搜索,网上的对数据库图片进行存储的文章,绝大部分是来自一篇。都是采用

ADO Stream

方法使用

field

对象的

AppendChunk

GetChunk

方法将大容量的二进制数组通过

Update

存储到数据库中。

Dim Conn as ADODB.Connection'

声明

Connection

对象

Dim Rs as ADODB.RecordSet'

声明

RecordSet

对象

CONST BLOCKSIZE=4096'

定义缓冲区块大小

Set Conn = New ADODB.Connection

Conn.ConnectionString = " DATA SOURCE = PUBS "'ODBS

数据源名称为

PUBS

Conn.Open

Set Rs = New ADODB.RecordSet

Rs.Open "test", Conn, adOpenKeyset, adLockOptimistic'

数据库表为

"test"

Dim Data() as Byte'

声明字节型数组,存放数据库图片信息

Dim FileLength as Integer'

文件长度变量

Dim BlockNum as Integer'

存放缓冲区块的个数

Dim DataLeft as Integer'

存放取整块后的遗留信息

Open "C:\TEST.BMP" for BINARY as #1'

假设图片文件为

C:\TEST.BMP

Dim i as Integer

FileLength = LOF(1)

BlockNum = FileLength \ BLOCKSIZE'

整取块大小,得缓冲区块数

DataLeft = FileLength Mod BLOCKSIZE'

整块取后的遗留

ReDim Data(BLOCKSIZE)'

重新定义缓冲区块大小为

BLOCKSIZE

For i=1 to BlockNum

Get #1,,Data()

Rs(0).AppenChunk Data()'

Data()

复制至

Rs(0)

字段,假设

test

表中的

image

为第一字段

Next i

ReDim Data(DataLeft)'

重新定义块大小取得遗留信息

Get #1,,Data()

Rs(0).AppendChunk Data()'

此时图片信息已全部拷贝至当前记录

Rs(0)

字段

Close #1

...

Rs.UpDate

具体的存储方法如上所述。

下面将简单的介绍取出信息的方法:

介绍说,将图片二进制存储信息用

GetChunk

方法取出,将其存储为临时文件即可。

REM

Rs

为打开的数据库表对应的

RecordSet

对象,其中的

image

对象仍然为第一字段

REM

接着上面的思路

Dim Data() as Byte'

声明字节型数组,存放数据库图片信息

Dim FileLength as Integer'

文件长度变量

Dim BlockNum as Integer'

存放缓冲区块的个数

Dim DataLeft as Integer'

存放取整块后的遗留信息

Dim i as Integer

ReDim Data(BLOCKSIZE)

Open "C:\TMP.BMP" for BINARY as #1

FileLength = Rs(0).ActualSize

BlockNum = FileLength \ BLOCKSIZE

DataLeft = FileLength Mod BLOCKSIZE

ReDim Data(BLOCKSIZE)

For i = 1 to BlockNum

Data() = Rs(0).GetChunk(BLOCKSIZE)'GetChuk

方法有一个参数为

Size

Next i

Put #1,,Data()

ReDim Data(DataLeft)

Data() = Rs(0).GetChunk(DataLeft)

Put #1,,Data()

Close #1

关于存取的内容全部于上面已经列出,组织的方法还请各位网友自行去组织一下。

如果有什么缺乏说明或是不正确的地方,还请各位能够指出。

对于此问题的实现,本人还有一个设想,打算利用

SQL SERVER

的服务器端来实现存储过程,使得客户端的存取数据库图片信息更加方便。

具体的实现可能还得努力等看书之后,期待中

......

后记:

在具体存储过程中,遇到了一个关于Rs的属性长度的问题,原先采用的是Len(Rs(0))[Rs(0)为image对象],但测试时总是缺少一半的字符长度,后来查明对于Byte型数组进行Len()求值时,只会取到一半的数值。如:

Dim a(4096) as ByteMsgbox Len(a())

结果是:2048

原因分析:可能跟VB中Len函数的ANSI或是UniCODE有关。但是了准确的原因还没有查出,因为时间关系,暂时还不能去做,到时查出后再附上。

总结

以上是生活随笔为你收集整理的c++ mysql 存储图片路径_3.用ADO实现图片在数据库中存储的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。