在VB中,与SQL连接后怎样存取图片

解决方案 »

  1.   

    使用Stream对象,可以实现对数据库的图像存取。
    数据库中存放图像的字段类型image(Access为OLE类型)。
    比如,如果用“CommonDialog”控件来选择你硬盘上的图像文件;
    用“Picture”控件来显示图像,那么下面的代码供参考:
    (运行VB,选择“工程\引用”命令,引用“Microsoft AetiveX Date 2.5 Library”。已连接数据库,打开了相应的记录集rs)
        Dim StmPic As ADODB.Stream
        Dim StrPicTemp As String
      ......
      '保存你所选择的图像
      Set StmPic = New ADODB.Stream
        StmPic.Type = adTypeBinary    '指定流是二进制类型
        StmPic.Open           '将数据获取到Stream对象中
        StmPic.LoadFromFile (CommonDialog1.FileName) '将选择的图像加载到打开的StmPic中
        rs.AddNew
        rs.Fields(1).Value = StmPic.Read   '从StmPic对象中读取数据
        rs.Update
        StmPic.Close
      ......
      '读取显示数据库中的图像
      Set StmPic = New ADODB.Stream
        StrPicTemp = "c:\temp.tmp"    '临时文件,用来保存读出的图片
        With StmPic
        .Type = adTypeBinary      
        .Open                     
        .Write rs.Fields(1)       '写入数据库中的数据至Stream中
        .SaveToFile StrPicTemp, adSaveCreateOverWrite  '将Stream中数据写入临时文件中
        .Close
      End With
      Picture1.Picture = LoadPicture(StrPicTemp)  '用Picture控件显示图像
      ......
      

  2.   

    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;258038
    如何使用 ADO Stream 对象访问和修改 SQL Server BLOB 数据
    文章 ID : 258038 
    最后更新日期 : 2004年9月1日 
    版本 : 1.0 
    本文的发布号曾为 CHS258038
    本页内容
     概要 
     更多信息 
     参考 概要
    使用 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=<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, adLockOptimisticSet mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("logo").Value
    mstream.SaveToFile "c:\publogo.gif", adSaveCreateOverWriters.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, adLockOptimisticSet mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.LoadFromFile "<path to .gif file>"
    rs.Fields("logo").Value = mstream.Read
    rs.Updaters.Close
    cn.Close

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

  3.   

    也可以采用appendchunk和getchunk方法
    或者利用remoteData控件建立连接
      

  4.   

    存储图像数据的方法  1 建立具有image宇段的SQL Server数据库  当需要在SQL Server数据库中存储图像数据时,首先应建立包含image数据类型字段的数据库关系表。SQL Server数据库平台支持的数据类型中,image数据类型主要用于存储图像数据等大段的二进制数据。SQL Server 7.0之后的版本,image类型可存储2GB的数据。   2 使用Remote Data控件建立与数据库的连接  Remote Data控件是在Visual Basic应用程序中用来获取远程数据的控件。它在.远程数据对象(RDO)和数据绑定控件之间提供了接口,只要给它提供有关数据存储的位置、获取的数据和一些接口控制,就可以连接到数据库,实现对数据库的基本操作。   使用Remote Data控件建立与远程数据库的连接步骤如下:  1.在Visual Basic的窗体中加入一个Remote Data控件。 ,  2.在Remote Data控件DataSourceName属性的下拉列表中选择一个ODBC数据源。例如pubs。  3.在Remote Data控件的SQL属性中输入SQL查询语句。例如,Select * from pub_info。  2.3 绑定OLE和Remote Data控件实现图像数据的存储与编辑  OLE是允许应用程序相互之间交换和显示数据的一项技术,使用OLE,可以从支持OLE技术的任何应用程序中读取信息,也可以在任何支持OLE的程序中显示和编辑它。在Visual Basic中,可利用OLE容器控件与Remote Data控件的绑定,来实现显示、存储和编辑SQL Serve数据库中的image类型数据。  1.显示SQL Serve数据库image类型字段的图像数据  具体步骤如下:  (1)在加入了Remote Data控件的Visual Basic的窗体中,添加一个OLE容器控件。创建OLE容器控件时,会出现“插入对象’:对话框,此时点击“取消”按钮,不必为该容器指定对象。  (2)将OLE容器控件的DataSource属性设置为Remote Data控件的名字,实现控件的绑定。  (3)在OLE容器控件。DataField属性的下拉列表中选择要显示的字段名。例如,logo。  (4)运行应用程序。对于包含image数据类型的logo字段的数据将在OLE容器控件中显示一幅图像。  2.在SQL Sever数据库image类型字段中添加存储图像数据  具体步骤如下:  (1)将Remote Data控件的EOFAction属性设置为rdAddNew,实现数据库的数据添加功能。  (2)在Visual Baisic的窗体中添加一个CommandButton控件,并编写图像文件嵌入OLE容器控件的程序代码。例如:Private Sub Command_Click()OLEl.CreateEmbed“c:\图片.bmp”End Sub   (3)运行应用程序,点击Remote Data控件的记录指示按钮,移动到新的记录,然后点击CommandButton控件按钮,实现图像数据的添加入库操作。  3.编辑SQL Serve数据库image数据类型字段的图像数据  具体步骤如下:  (1)在Visual Basic的窗体中添加一个CommandButton控件,编写对OLE对象的编辑程序代码。例如:Private Sub Command2--_Click()OLEl.DoVerb VbOLEOpenEnd Sub    (2)运行应用程序,点击Remote Data控件的记录指示按钮,选择需要编辑的图像,然后点击CommandButton控件按钮,在分隔的应用程序窗口打开对象,进行图像的编辑操作。
      

  5.   

    存进去后
    怎么用asp来读取??
      

  6.   

    adodc1.recordset.fields().getchunk即可,
    原理是把图片转换成二进制文件进行存取
      

  7.   

    用Stream对象。这个方法不错的!