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

基于ADO的OLE字段的加密功能的實現

2007-01-01 00:00:00王德東
現代商貿工業 2007年5期

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

關鍵詞:ADO;OLE字段;數據加密;Visubal Basic

0 前言

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

1 實現步驟

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

2 AppendChunk及Getchunk方法簡介

2.1 AppendChunk方法

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

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

2.2 Getchunk方法

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

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

3 ADO Stream簡介

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

4 關鍵代碼分析

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 '定義字節數組存放文件內容

ifSize = FileLen(sfName)

Open sfName For Binary Access Read As #1

ReDim A2(ifSize) '放大數組

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 '分塊數目

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 '再次異或計算就還原為原來的文件了

Next

Put #1, , A2()

End If

……

Next i

Close #1

End Sub

4.3 以流的方式保存文件到數據庫中

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'二進制模式

.Open

.LoadFromFile f

iFileSize = .Size

.Position = 0

A1 = .Read ''讀取流到字節數組

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

'數據庫連接字符串

iConc = cnnStr

'打開保存文件的表

Set iRe = New ADODB.Recordset

iStm.Position = 0

With iRe

.Open “tbWord”, iConc, adOpenKeyset, adLockOptimistic

.Fields(fld) = iStm.Read

.Update

End With

'完成后關閉對象

iRe.Close

iStm.Close

End Sub

4 以流的方式從數據庫讀取數據生成文件

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 結束語

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

參考文獻

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

[2]陳虹頤,何春.VB6.0中利用ADO對象實現數據庫編程[J].甘肅科技,2007,23(4).

主站蜘蛛池模板: 奇米精品一区二区三区在线观看| 精品国产自| 国产成人高清在线精品| 国产黄在线观看| 亚洲国产天堂久久综合226114| 在线观看亚洲人成网站| 精品成人免费自拍视频| 成年A级毛片| 国产在线观看精品| 色偷偷一区| 欧美成人区| 91青青视频| 亚洲高清中文字幕| 国产黄色视频综合| 97超碰精品成人国产| 亚洲AV色香蕉一区二区| 91区国产福利在线观看午夜 | 黄色不卡视频| 国产精品亚洲精品爽爽| 久久久久久国产精品mv| a级高清毛片| 制服丝袜国产精品| 99精品视频在线观看免费播放| 久久综合结合久久狠狠狠97色| 亚洲成aⅴ人在线观看| 99在线观看视频免费| 精品国产成人国产在线| 91人妻日韩人妻无码专区精品| 亚洲免费成人网| 欧美a在线| 国产精品视频系列专区| 欧美黄色a| 国产精品伦视频观看免费| 日韩精品视频久久| 亚洲中文字幕久久无码精品A| 国产成人一区免费观看| 免费在线国产一区二区三区精品| 99国产精品国产| 国产成人亚洲欧美激情| 成人亚洲国产| 91色在线观看| 日韩在线1| 日韩国产亚洲一区二区在线观看| 日韩在线视频网| 亚洲精品无码久久毛片波多野吉| 99在线观看视频免费| 欧美精品啪啪一区二区三区| 在线免费亚洲无码视频| 亚洲欧美精品日韩欧美| 亚洲国产精品成人久久综合影院| 国产免费怡红院视频| 亚洲狠狠婷婷综合久久久久| 久久免费精品琪琪| 69免费在线视频| 亚洲无码91视频| 欧美一区二区精品久久久| 欧美精品不卡| 欧美精品高清| 亚洲综合精品第一页| 女人18毛片一级毛片在线 | 色综合久久88| 在线va视频| 国产第一福利影院| 国产一级片网址| 亚洲欧美国产五月天综合| 久久情精品国产品免费| 欧美日韩综合网| 欧美乱妇高清无乱码免费| 国产在线97| 亚洲日韩精品欧美中文字幕| 无码内射中文字幕岛国片 | 欧美精品亚洲精品日韩专区| 国产精品无码AV片在线观看播放| 亚洲精品欧美日本中文字幕| 国产福利微拍精品一区二区| 91丝袜乱伦| 免费观看三级毛片| 97青草最新免费精品视频| 免费看美女自慰的网站| 一级毛片基地| 国产情侣一区| JIZZ亚洲国产|