【摘 要】本文詳細介紹并使用了基于VC6.0的開發技術。使學員掌握如何在ACCESS數據庫中存取大二進制數據。我們以.BMP格式的圖片的存取為例。簡單的介紹了存取的方法。
【關鍵詞】二進制對;ADO;存儲結構
1.ORACLE數據庫簡介
Oracle數據庫是以高級結構化查詢語言(SQL)為基礎的大型關系數據庫。通俗地講,它使用方便邏輯管理的語言操縱大量有規律數據的集合,是目前最流行的服務器/客戶機體系的數據庫之一。
1.1 Oracle 的特點
Oracle7.x以來引入共享SQL和多線索服務器體系結構。這減少了Oracle的資源占用,增強了Oracle的能力,使之在低檔軟硬件平臺上用較少的資源就可以支持更多的用戶而在高檔的平臺上可以支持成百上千個用戶。
提供了基于角色(Role)分工的安全保密管理。在數據庫管理功能,完整性檢查,安全性,一直性方面都有良好的表現。
提供了與第三代高級語言的接口軟件PRO*系列,能在C,C++等主語言中嵌入SQL語句及過程化(PL/SQL)語句對數據庫中的數據進行操作。
1.2 Oracle 的存儲結構
物理結構。Oracle數據庫在物理上是存儲于硬盤的各種文件,它是活動的,可擴充的,它隨著數據的添加和應用程序的增大而變化。
邏輯結構。Oracle 數據庫在邏輯上是由許多表空間組成的。主要分為系統表空間和非系統表空間。非系統表空間內存儲著各項應用的數,索引,程序等相關信息。要建立較大的Oracle 應用系統時,應先創建它所獨占的表空間,同時定義物理文件的存放路徑和所占硬盤的大小。
Oracle以穩定并適合作為大型應用的數據庫平臺而著稱。 但他的可操作性不強,不是和中小型應用軟件系統。一般不選擇為小型應用數據庫平臺。
1.3 BLOB的起源
數據庫在當今的應用越來越廣泛了,同樣伴隨著領域的廣泛,存儲的內容也不在是只有數值、字符、boolean幾種類型,而是越來越多樣化。在這樣的前提下就出現了Blob類型。
Blob是指二進制大二進制對象也就是英文Binary Large Object的所寫,由此可見這個類型都是用來存儲大量數據而設計的,BLOB是用來存儲大量二進制數據的。
1.4 BLOB的概述
1.4.1大對象類型概述
大對象類型BLOB全稱為Binary Large Objects,即二進制大對象??梢园袯LOB區別為三種形式:聲像數據、二進制數據和大文本數據。因此,最常見的應用就是存儲圖形、聲音等對象,此外,大二進制對象、OLE對象也可以通過BLOB類型存入數據庫,如果文本對象過大,超出了文本類型的規定長度,則必須用BLOB字段進行存儲。我們在經常使用的編程環境中并不能直接支持BLOB字段,因此需要調用相應的函數完成BLOB的使用。不同的數據庫系統對大二進制對象類型的支持不同,常用數據庫系統支持的大二進制對象數據類型。
1.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 *類型的指針,以方便處理。
1.4.3數據轉換過程中大二進制對象處理方法
在數據轉換中,首先取出源數據源的元數據,判斷源數據源和目的數據源中是否存在字段為大二進制對象的類型。對于源數據源中的每個大二進制對象字段的數據,選擇相應的大二進制對象讀取方法,把此大二進制對象數據取出后保留在一個臨時文件中,然后在目的數據庫插入數據,遇到大二進制對象字段時,選擇相應的大二進制對象存取方法,再從臨時文件中依次讀出數據插入到指定字段中。
2.什么是ADO
ADO是ActiveX數據對象(ActiveX Data Object),這是Microsoft開發數據庫應用程序的面向對象的新接口。ADO訪問數據庫是通過訪問OLE DB數據提供程序來進行的,提供了一種對OLE DB數據提供程序的簡單高層訪問接口。ADO技術簡化了OLE DB的操作,OLE DB的程序中使用了大量的COM接口,而ADO封裝了這些接口。所以,ADO是一種高層的訪問技術。
2.1 ADO的對象
ADO是目Microsoft通用的數據庫訪問技術。ADO編程模型定義一組對象,ADO對象模型包含9個對象:Connection,Recordset,Record, Command,Parameter,Field,Property,Stream和Error.
2.2該程序主要用到的4個對象
Connection對象
2.3說明
Connection 對象代表與數據源進行的唯一會話。如果是客戶端/服務器數據庫系統,該對象可以等價于到服務器的實際網絡連接。取決于提供者所支持的功能,Connection 對象的某些集合、方法或屬性有可能無效。
2.4 Error對象
Error 對象包含與單個操作(涉及提供者)有關的數據訪問錯誤的詳細信息。
3.說明
任何涉及 ADO 對象的操作都會生成一個或多個提供者錯誤。每個錯誤出現時,一個或多個 Error 對象將被放到 Connection 對象的 Errors 集合中。當另一個 ADO 操作產生錯誤時,Errors 集合將被清空,并在其中放入新的 Error 對象集。