概要
使用 ActiveX 資料對象 (ADO) 2.5 中引入的 Stream 對象可以大大簡化訪問和修改 SQL Server 資料庫中的二進位大對象 (BLOB) 資料需要編寫的代碼。在以前版本的 ADO(2.0、2.1 和 2.1 SP2)中使用 Field Object 的 GetChunk 和 AppendChunk 方法以固定塊區大小從 BLOB 列中讀取 BLOB 資料,或將 BLOB 資料寫入其中時,必須要小心。現在 ADO 2.5 中提供了一種替代方法。本文包含的程式碼範例示範如何使用 Stream 對象編寫程式來執行以下常見任務:
• |
將 SQL Server Image 列中儲存的資料儲存到硬碟上的檔案中。 |
• |
將 .gif 檔案的內容移動到 SQL Server 表的 Image 列中。 |
回到頂端
更多資訊
以下程式碼範例基於 SQL Server 7.0 pubs 樣本資料庫中 pub_info 表中儲存的資料。您需要將 ADO 連線字串修改為指向您自己的 SQL Server。
樣本 1:將 SQL Server Image 列中的資料儲存到硬碟上的檔案中
本例中的代碼將開啟 pubs 資料庫中 pub_info 表中的一個記錄集,並將第一條記錄的徽標列中儲存的二進位映像資料儲存到硬碟上的檔案中,如下所示:
1. |
開啟一個新的標準 EXE Visual Basic 項目。 |
2. |
在項目菜單上,單擊以選擇引用,然後設定對 Microsoft ActiveX 資料對象 2.5 物件程式庫的引用。 |
3. |
在 Form1 上放置一個 CommandButton 控制項。 |
4. |
在該表單的 General 聲明部分作出以下聲明: Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim mstream As ADODB.Stream
|
5. |
將以下代碼剪下並粘貼到您添加到表單中的 CommandButton 控制項的 Click 事件中: Set cn = New ADODB.Connectioncn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"Set rs = New ADODB.Recordsetrs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimisticSet mstream = New ADODB.Streammstream.Type = adTypeBinarymstream.Openmstream.Write rs.Fields("logo").Valuemstream.SaveToFile "c:/publogo.gif", adSaveCreateOverWriters.Closecn.Close
|
6. |
儲存並運行 Visual Basic 項目。 |
7. |
單擊 CommandButton 將第一條記錄的徽標列中的位元據儲存到 c:/publogo.gid 檔案。在 Windows 資源管理員中尋找並開啟此檔案以查看儲存的映像。 本例中的代碼將聲明一個 ADODB Stream 對象,並將其 Type 屬性設定為 adTypeBinary 以表明該對象將用於處理位元據。然後,通過調用 Stream 對象的 Write 方法將 pub_info 表的第一條記錄的徽標列中儲存的位元據寫到該對象中。接下來,通過調用 Stream 對象 SaveToFile 方法並傳入檔案路徑,將該對象包含的位元據儲存到檔案中。作為第二個參數傳入的 adSaveCreateOverWrite 常量會導致 SaveToFile 方法覆蓋指定的檔案(如果該檔案存在)。 |
樣本 2:將 .gif 檔案中儲存的映像傳輸到 SQL Server 表的 Image 列
本例中的代碼將 .gif 檔案中儲存的映像儲存到 pub_info 表中第一條記錄的徽標列,從而覆蓋該列當前的內容,如下所示:
1. |
開啟一個新的標準 EXE Visual Basic 項目。 |
2. |
在項目菜單上,單擊以選擇引用,然後設定對 Microsoft ActiveX 資料對象 2.5 物件程式庫的引用。 |
3. |
在 Form1 中放置一個 CommandButton 控制項。 |
4. |
在該表單的 General 聲明部分作出以下聲明:Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim mstream As ADODB.Stream
|
5. |
將以下代碼剪下並粘貼到您添加到表單中的 CommandButton 控制項的 Click 事件中:Set cn = New ADODB.Connectioncn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"Set rs = New ADODB.Recordsetrs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimisticSet mstream = New ADODB.Streammstream.Type = adTypeBinarymstream.Openmstream.LoadFromFile "<path to .gif file>"rs.Fields("logo").Value = mstream.Readrs.Updaters.Closecn.Close
|
6. |
儲存並運行 Visual Basic 項目。 |
7. |
單擊 CommandButton 運行代碼,將 .gif 檔案的內容以資料流傳輸到 ADO Stream 對象,然後將 Stream 中的資料儲存到記錄集中第一條記錄的徽標列中。 |
8. |
使用樣本 1 中的代碼驗證徽標列中的映像是否已被修改。 |