999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ADO的OLE字段的加密功能的實(shí)現(xiàn)

2007-01-01 00:00:00王德東
現(xiàn)代商貿(mào)工業(yè) 2007年5期

摘 要:在Visubal Basic6.0中,利用微軟的ADO技術(shù),討論了如何把OLE字段加密存儲(chǔ)到ACCESS數(shù)據(jù)庫中,以及如何從ACCESS中獲取OLE字段并解密的實(shí)現(xiàn)方法。

關(guān)鍵詞:ADO;OLE字段;數(shù)據(jù)加密;Visubal Basic

0 前言

在開發(fā)MIS或OA類的軟件時(shí),經(jīng)常需要將外部圖片或各類文件保存在數(shù)據(jù)庫中,目前的關(guān)系數(shù)據(jù)庫大都有一個(gè)大二進(jìn)制字段,可以保存該類數(shù)據(jù)。將圖片及文件以二進(jìn)制方式存儲(chǔ)在數(shù)據(jù)庫中,可以考慮以下兩種方法:一是使用ADO的Stream 對(duì)象的LoadFromFile方法以及SaveToFile方法實(shí)現(xiàn);二是使用ADO的 Recordset.Field 對(duì)象的 GetChunk 以及 AppendChunk 方法實(shí)現(xiàn)。鑒于數(shù)據(jù)的安全性,需要將保存在OLE字段的數(shù)據(jù)加密。

1 實(shí)現(xiàn)步驟

一個(gè)通用的方法是可以先將外部文件或圖片加密,然后再保存到OLE字段中,解密時(shí)反向操作即可,缺點(diǎn)是效率不高。對(duì)于使用ADO的Stream對(duì)象或ADO的 Recordset.Field 對(duì)象的 GetChunk、 AppendChunk 保存數(shù)據(jù)的方法,由于在操作中使用了數(shù)組,可以直接將加密、解密算法在內(nèi)存中直接操作,所以在效率及安全方面都比前者的方法要好。

2 AppendChunk及Getchunk方法簡介

2.1 AppendChunk方法

語法 :Object.AppendChunk Data; 對(duì)象Data是變體型,包含追加到對(duì)象中的數(shù)據(jù)。使用 Field 或 Parameter 對(duì)象的 AppendChunk 方法可將長二進(jìn)制或字符數(shù)據(jù)填寫到對(duì)象中。在系統(tǒng)內(nèi)存有限的情況下,可以使用 AppendChunk 方法對(duì)長整型值進(jìn)行部分而非全部的操作。

在 Field 對(duì)象上的第一個(gè) AppendChunk 調(diào)用將數(shù)據(jù)寫入字段,覆蓋任何現(xiàn)有的數(shù)據(jù),隨后的 AppendChunk 調(diào)用則添加到現(xiàn)有數(shù)據(jù)。如果將數(shù)據(jù)追加到一個(gè)字段,然后設(shè)置或讀取當(dāng)前記錄中另一個(gè)字段的值,ADO 則認(rèn)為已將數(shù)據(jù)追加到第一個(gè)字段。如果在第一個(gè)字段上再次調(diào)用 AppendChunk 方法,那么 ADO 將調(diào)用解釋為新的 AppendChunk 操作并覆蓋現(xiàn)有數(shù)據(jù)。訪問其他Recordset 對(duì)象(并非第一個(gè) Recordset 對(duì)象的復(fù)制品)中的字段將不會(huì)破壞 AppendChunk 操作。

2.2 Getchunk方法

語法:variable = field.GetChunk( Size ) ;使用 Field 對(duì)象的 GetChunk 方法來檢索其中的部分或全部長二進(jìn)制或字符數(shù)據(jù)。在系統(tǒng)內(nèi)存有限的情況下,可使用 GetChunk 方法操作部分而非全部 Long 值。

GetChunk 調(diào)用返回的數(shù)據(jù)將被分配給 Variable。如果 Size 大于剩余的數(shù)據(jù),GetChunk 方法僅返回剩余的數(shù)據(jù)而不用空格填充 Variable。如果該字段為空,GetChunk 方法將返回 Null 值。每個(gè)后續(xù)的 GetChunk 調(diào)用將從上一次 GetChunk 調(diào)用停止處開始檢索數(shù)據(jù)。

3 ADO Stream簡介

顧名思義,ADO Stream以流的方式來操作文件或記錄。通過Open 方法來打開 Stream 對(duì)象來操作二進(jìn)制或文本數(shù)據(jù)的流,通過Read或Write來讀寫流。用 SaveToFile 和 LoadFromFile 方法保存和恢復(fù)文件中的數(shù)據(jù)。

4 關(guān)鍵代碼分析

4.1 使用AppendChunk將文件保存到OLE字段:

Public Sub CopyFiletoField(fld As ADODB.Field, sfName)

Dim ioSize As Long

Dim i As Long, ifSize As Long,iKey as Byte

iKey = 2'密鑰

Dim A1() As Byte, A2() As Byte, A3() As Byte '定義字節(jié)數(shù)組存放文件內(nèi)容

ifSize = FileLen(sfName)

Open sfName For Binary Access Read As #1

ReDim A2(ifSize) '放大數(shù)組

ReDim A3(ifSize)

Dim j As Long

Dim lLen As Long

lLen = UBound(A3)

Get #1, , A3()

For j = 0 To lLen-1

A2(j) = A3(j) Xor iKey'這里用簡單的異或算法來加密

Next

fld.AppendChunk A2'寫入OLE字段

Close #1

End Sub

4.2 使用GetChunk將OLE字段保存為文件:

Public Sub CopyFieldToFile(sfName As String, fld As ADODB.Field)

On Error Resume Next

……

Open sfName For Binary Access Write Lock Write As #1

ioSize = fld.ActualSize

iChunks = ioSize / iSize '分塊數(shù)目

iRestSize = ioSize Mod iSize '余下的部分

A1() = fld.GetChunk(iRestSize)

A2 = A1

lLen = UBound(A1)

For j = 0 To lLen-1

A2(j) = A1(j) Xor iKey '再次異或計(jì)算就還原為原來的文件了

Next

Put #1, , A2()

End If

……

Next i

Close #1

End Sub

4.3 以流的方式保存文件到數(shù)據(jù)庫中

Public Sub SaveFileToDB(f As String, fld As String)

Dim iStm As ADODB.Stream

Dim iRe As ADODB.Recordset

Dim iConcStr As String

Set iStm = New ADODB.Stream

Dim iFileSize As Long

Dim A1() As Byte,A2() As Byte

With iStm

.Type = adTypeBinary'二進(jìn)制模式

.Open

.LoadFromFile f

iFileSize = .Size

.Position = 0

A1 = .Read ''讀取流到字節(jié)數(shù)組

End With

iStm.Position = 0

A2 = A1

Dim i As Long

iFileSize = UBound(A1)

For i = 0 To iFileSize-1

A2(i) = A1(i) Xor 2

Next

iStm.Write A2

'數(shù)據(jù)庫連接字符串

iConc = cnnStr

'打開保存文件的表

Set iRe = New ADODB.Recordset

iStm.Position = 0

With iRe

.Open “tbWord”, iConc, adOpenKeyset, adLockOptimistic

.Fields(fld) = iStm.Read

.Update

End With

'完成后關(guān)閉對(duì)象

iRe.Close

iStm.Close

End Sub

4 以流的方式從數(shù)據(jù)庫讀取數(shù)據(jù)生成文件

Public Function ReadFileFromDB(f As String, fld As String) As String

……

Set iRe = New ADODB.Recordset

iRe.Open “tbWord”, iConc, adOpenKeyset, adLockReadOnly

'保存到文件

Set iStm = New ADODB.Stream

With iStm

.Mode = adModeReadWrite

.Type = adTypeBinary

.Open

.Write iRe(fld)

.Position = 0

A1 = iRe(fld)

A2 = A1

Dim i As Long

iFileSize = UBound(A1)

For i = 0 To iFileSize

A2(i) = A1(i) Xor 2

Next

.Write A2

.Position = 0

.SaveToFile f, adSaveCreateOverWrite'生成文件

End With

iRe.Close

iStm.Close

End Function

5 結(jié)束語

ADO的Stream對(duì)象和 Recordset.Field 對(duì)象的 GetChunk、 AppendChunk 方法是操作數(shù)據(jù)庫OLE字段常用的兩種方法。GetChunk、 AppendChunk方法相對(duì)來說要通用一些,在一些低版本的ADO中,Stream可能得不到很好的支持。限于篇幅,文中的代碼略有刪減。

參考文獻(xiàn)

[1]魏新俊, 郭力平, Microsoft Access2.0/7.0[M].北京: 清華大學(xué)出版社, 1997.

[2]陳虹頤,何春.VB6.0中利用ADO對(duì)象實(shí)現(xiàn)數(shù)據(jù)庫編程[J].甘肅科技,2007,23(4).

主站蜘蛛池模板: 久久国产成人精品国产成人亚洲 | 亚洲欧美精品日韩欧美| 国产在线八区| 热re99久久精品国99热| 人人91人人澡人人妻人人爽| 小说 亚洲 无码 精品| 国产亚洲欧美在线专区| 青青网在线国产| 伊人激情综合网| 中国国产A一级毛片| 国产av一码二码三码无码| 91视频青青草| 亚洲av日韩av制服丝袜| 凹凸国产熟女精品视频| 人妻无码中文字幕一区二区三区| 国产美女91视频| 国产熟女一级毛片| 99久久99这里只有免费的精品| a级毛片一区二区免费视频| 免费不卡视频| 97亚洲色综久久精品| 无码久看视频| 在线中文字幕网| 国产成人精品无码一区二| 久久超级碰| 国产永久无码观看在线| 国产精品微拍| 亚洲成aⅴ人在线观看| 2024av在线无码中文最新| 欧美一级夜夜爽www| 欧美另类视频一区二区三区| 亚洲欧洲美色一区二区三区| 精品国产Ⅴ无码大片在线观看81 | 精品久久国产综合精麻豆| 婷婷丁香在线观看| 丁香六月综合网| 无码国产伊人| 人人看人人鲁狠狠高清| 在线看片免费人成视久网下载 | 一级毛片免费观看不卡视频| 午夜毛片免费观看视频 | 日本成人一区| 久久精品这里只有精99品| 亚洲日韩高清在线亚洲专区| 国产精品女在线观看| 亚洲激情99| 在线国产三级| 色婷婷在线影院| 2021亚洲精品不卡a| 免费国产高清视频| 五月婷婷亚洲综合| 国产成人三级在线观看视频| 欧美成在线视频| 91在线播放国产| 特级欧美视频aaaaaa| 国产欧美精品专区一区二区| 日韩欧美视频第一区在线观看| 婷婷午夜天| yy6080理论大片一级久久| 国产h视频在线观看视频| 亚洲性日韩精品一区二区| 国产精品2| 亚洲AV无码不卡无码| 国产精品网曝门免费视频| 成人无码一区二区三区视频在线观看 | 五月天久久综合国产一区二区| 亚洲最大福利网站| 午夜人性色福利无码视频在线观看| 美女黄网十八禁免费看| 成人亚洲视频| 欧美区一区二区三| 欧美一区二区人人喊爽| 久久a级片| 亚洲色婷婷一区二区| 在线观看免费国产| 亚洲成人精品久久| 91区国产福利在线观看午夜| 日韩毛片免费观看| 国产av色站网站| 亚洲AⅤ综合在线欧美一区| 丁香婷婷久久| www.av男人.com|