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

转载 2004年09月16日 14:40:00

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

适用于

概要

使用 ActiveX 数据对象 (ADO) 2.5 中引入的 Stream 对象可以大大简化访问和修改 SQL Server 数据库中的二进制大对象 (BLOB) 数据需要编写的代码。在以前版本的 ADO(2.0、2.1 和 2.1 SP2)中使用 Field ObjectGetChunkAppendChunk 方法以固定块区大小从 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=<name of your SQL Server>;
    Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your 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=<name of your SQL Server>;
    Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your 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 "<path to .gif file>"
    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 数据

VS2010通过ADO链接SQL Server的方法体会

这里时我花了一天多的时间查找各种资料和网站上面整理出来的有关MFC通过ADO的方式连接SQL server数据库的方法,各种书籍或者网站都只说了其中的一些,只是举了一些成功的例子,因为不同人不同电脑的...
  • woshimalingyi
  • woshimalingyi
  • 2014年12月15日 02:21
  • 2813

用ADO操作数据库的方法步骤

学习ADO时总结的一些经验     用ADO操作数据库的方法步骤   ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr...
  • gongluck93
  • gongluck93
  • 2016年09月19日 10:33
  • 2675

用ADO方式连接SQL SEVER的几个简单步骤

其步骤一般分为: (1)     引入ADO动态库文件 (2)     初始化COM环境 (3)     连接数据库操作数据 1、引入ADO库文件,一般是在stdAfx.h文件中添加(在你需要添加...
  • qq_15328161
  • qq_15328161
  • 2015年04月29日 14:13
  • 1670

如何使用C#和ADO.NET在SQL Server数据库读取和写入blob数据

转自:http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158 标题:How To Read and Write BLOB Dat...
  • Hugoo_Hu
  • Hugoo_Hu
  • 2012年11月20日 11:03
  • 485

asp.net学习总结——ADO.net(对Sql Server进行操作的数据访问类)

ADO.net(对Sql Server进行操作的数据访问类)
  • sun15732621550
  • sun15732621550
  • 2016年06月11日 21:40
  • 1032

网狐 中心服务器 ADO 错误:0x80004005,[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。【第二次修改13-11-2】

【 2012-12-0310:44:06 】ADO 错误:0x80004005,[DBNETLIB][ConnectionOpen(Connect()).]SQL Server 不存在或拒绝访问。 【...
  • piazini
  • piazini
  • 2012年12月03日 15:04
  • 18854

VC使用ADO访问sql server数据库

软件:vs2010、sql server2005 代码如下: #include #include using namespace std; //1、添加对ADO的支持 #import "C...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年05月31日 13:37
  • 1488

visual C++使用ADO访问sql server 2000

ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的...
  • linshengchao123
  • linshengchao123
  • 2014年10月31日 18:30
  • 449

使用ADO.NET对SQL Server数据库进行访问

在上一篇博客中我们给大家简单介绍了一下VB.NET语言的一些情况,至于理论知识的学习我们可以利用VB的知识体系为基础,再将面向对象程序设计语言的知识进行融合便可进行编程实战。          如果我...
  • u010929604
  • u010929604
  • 2014年06月01日 20:05
  • 4452

VC++中使用ADO访问SQL Server数据库与Access数据库的不同之处总结

最近调试一个VC++ Access数据库迁移到SQL Server平台的项目,遇到了一些问题,经过几天努力,通过论坛发帖子和资料查找,最后终于找到了问题所在,并顺利解决了问题,下面是一些总结,希望对碰...
  • zxhx
  • zxhx
  • 2011年03月04日 22:47
  • 2181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用 ADO Stream 对象访问和修改 SQL Server BLOB 数据
举报原因:
原因补充:

(最多只允许输入30个字)