如何使用 ADO Stream 对象访问和修改 SQL Server BLOB 数据

如何使用 ADO Stream 对象访问和修改 SQL Server BLOB 数据
文章 ID : 258038

概要
使用 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.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream

5. 将以下代码剪切并粘贴到您添加到窗体中的 CommandButton 控件的 Click 事件中:
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=;
Initial Catalog=pubs;User Id=;Password="

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
mstream.SaveToFile "c:\publogo.gif", adSaveCreateOverWrite

rs.Close
cn.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.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream

5. 将以下代码剪切并粘贴到您添加到窗体中的 CommandButton 控件的 Click 事件中:
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=;
Initial Catalog=pubs;User Id=;Password="

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile ""
rs.Fields("logo").Value = mstream.Read
rs.Update

rs.Close
cn.Close

6. 保存并运行 Visual Basic 项目。
7. 单击 CommandButton 运行代码,将 .gif 文件的内容以数据流传输到 ADO Stream 对象,然后将 Stream 中的数据保存到记录集中第一条记录的徽标列中。
8. 使用示例 1 中的代码验证徽标列中的图像是否已被修改。

参考
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
308042 如何在 Visual Basic .NET 中使用 ADO.NET 读写 BLOB 数据

——————————————————————————–

这篇文章中的信息适用于:
• Microsoft ActiveX Data Objects 2.5 Service Pack 2
• Microsoft Visual Basic 6.0 专业版
• Microsoft Visual Basic 6.0 企业版
• Microsoft OLE DB Provider for SQL Server 7.0

发表回复