日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

数据库

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

發布時間:2024/8/5 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现图片在数据库中存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。